跨列自动化卡方

时间:2017-10-01 13:49:23

标签: r chi-squared

我想使用卡方来测试数据集。怎么做,使用循环或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,但对我而言,现在它太难了。

1 个答案:

答案 0 :(得分:4)

您可以使用lapply循环变量。

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

这将返回一个命名列表,其中changin变量作为每个列表项的名称。

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

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

    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"))将返回一个带有来自所有测试的p值的命名向量。