r 中保留行名称的 chisquare 测试

chisquare test in r that keeps row names

我正在构建一个包含两波的员工调查,我想确保每一波在某些人口统计变量(例如种族和性别)方面是平衡的。这是一个虚构的数据样本:

library(tidyverse)
sample_data <- tibble(demographics = c("White / Female", "Non-White / Female", "White / Male", "Non-White / Male", "White / Transgender", "Non-White / Transgender"),
                      wave_1 = c(40, 38, 60, 56, 0, 2),
                      wave_2 = c(38, 39, 62, 58, 1, 0))

如果我在 sample_data 上 运行 chisq.test(),我得到一个错误:

library(stats)
chisq.test(sample_data)

Error in chisq.test(sample_data) : 
  all entries of 'x' must be nonnegative and finite

但如果我只使用两个计数列,我不会收到错误消息:

sample_data_count <- sample_data %>%
  dplyr::select(wave_1, wave_2)
chisq.test(sample_data_count)

    Pearson's Chi-squared test

data:  sample_data_count
X-squared = 3.1221, df = 5, p-value = 0.6812

Warning message:
In chisq.test(sample_data_count) :
  Chi-squared approximation may be incorrect

我知道 R 不喜欢我在 sample_data 中有我的人口统计数据,但是如果我想查看不同人口统计学的观察值。有没有办法 运行 包含这些行名称的卡方检验?

我在 http://www.sthda.com/english/wiki/chi-square-test-of-independence-in-r using this dataset (file_path <- "http://www.sthda.com/sthda/RDoc/data/housetasks.txt") 看到了一个例子, 在 r 中做了一个卡方检验,行名还在里面。

如有任何帮助,我们将不胜感激!

因为它还包含 character 列。根据?chisq.test

x - a numeric vector or matrix. x and y can also both be factors.

y - a numeric vector; ignored if x is a matrix. If x is a factor, y should be a factor of the same length.

如果我们要传递 numeric matrix,要么 select 数字列,要么将 'demographics' 转换为行名称,转换为 matrix并应用测试

library(dplyr)
library(tibble)
sample_data %>% 
   column_to_rownames('demographics') %>%
   as.matrix %>% 
   chisq.test

您可以定义自己的函数,仅在数字列上运行卡方:

 my_chi <- function(df) chisq.test(as.matrix(df[, sapply(df, is.numeric)]))

所以现在你可以做

my_chi(sample_data)
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  as.matrix(df[, sapply(df, is.numeric)])
#> X-squared = 3.1221, df = 5, p-value = 0.6812
#> 
#> Warning message:
#> In chisq.test(as.matrix(df[, sapply(df, is.numeric)])) :
#>   Chi-squared approximation may be incorrect