跨列自动执行卡方检验

Automate Chi-square across columns

我想使用卡方检验数据集。怎么做,使用 loop for 或 sapply。

这是一组示例数据:

n<-40
set.seed(1)
data <- data.frame(v1.1=sample(c('0','1'),n,replace=T),v1.2=sample(c('0','1'),n,replace=T),v1.3=sample(c('0','1'),n,replace=T),v1.4=sample(c('0','1'),n,replace=T),v1.5=sample(c('0','1'),n,replace=T),m1=sample(c('1','2'),n,replace=T))

我想用变量 m1 测试所有名为 v1.x 的变量。就这些了。

我希望避免这样的情况:

chisq.test(table(data$v1.1,data$m1))
chisq.test(table(data$v1.2,data$m1))
chisq.test(table(data$v1.3,data$m1))
chisq.test(table(data$v1.4,data$m1))
chisq.test(table(data$v1.5,data$m1))

我找到了this topic,但对我和现在来说太难了。

您可以只使用 lapply 循环变量。

myTests <- lapply(data[-length(data)], function(x) chisq.test(table(x, data$m1)))

这个 return 是一个命名列表,changin 变量作为每个列表项的名称。

names(myTests)
[1] "v1.1" "v1.2" "v1.3" "v1.4" "v1.5"

然后使用 myTests[[1]]myTests[["v1.1"]] 访问每个。这些return

    Pearson's Chi-squared test with Yates' continuity correction

data:  table(x, data$m1)
X-squared = 0, df = 1, p-value = 1

然后,要从各个测试中提取组件,请使用 names(myTests[[1]]str(myTests[[1]]) 检查内容。例如,myTests[[1]]$p.value 将从第一个测试中提取 p.value,而 unlist(sapply(myTests, "[", "p.value")) 将 return 一个具有所有测试的 p 值的命名向量。