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