我有一个3185x90的二进制值数据集,想要做一个卡方检验独立性,比较所有列变量。
我已经尝试过使用Google搜索chisq.test()
和for循环中的不同代码变体,但到目前为止,它们都没有起作用。
我该怎么做?
这是我修补过的框架。我的数据集是橡树。
chi_trial <- data.frame(a = c(0,1), b = c(0,1))
for(row in 1:nrow(oak)){
print(row)
print(chisq.test(c(oak[row,1],d[row,2])))
}
我也尝试过:
apply(d, 1, chisq.test)
这给了我错误:FUN(newX [,i],...)中的错误: 所有“ x”项必须是非负且有限的
dput(oak[1:2],)
structure(list(post_flu = structure(c(1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
label = "Receipt of Flu Vaccine - Encounter Survey", format.stata = "%10.0g")), row.names = c(NA,
-3185L), class = c("tbl_df", "tbl", "data.frame"), label = "Main Oakland Clinic Analysis Dataset")
我在输出的最后几行中添加了我的数据样本。数据集的部分很小,但是看起来都是这样。
答案 0 :(得分:2)
您可以使用类似下面的代码,类似于R的receipt | id | date | amount
0001 | 1 | 2020 | 100
0002 | 1 | 2019 | 12
0003 | 2 | 2019 | 130
0004 | 1 | 2019 | 20
函数。我没有您的数据,所以我正在模拟一些数据。请注意,使用传统的0.05临界值,我得到一个有效的p值。
cor
因此,请考虑应用评论中提到的多项测试调整。
答案 1 :(得分:1)
这里是combn
的一种解决方案,可将列号2乘以2的所有组合。使用@Edward's answer中的数据进行了测试。
chisq2cols <- function(X){
y <- matrix(0, ncol(X), ncol(X))
cmb <- combn(ncol(X), 2)
y[upper.tri(y)] <- apply(cmb, 2, function(k){
tbl <- table(X[k])
chisq.test(tbl)$p.value
})
y
}
chisq2cols(oak)
# [,1] [,2] [,3]
#[1,] 0 0.7847063 0.32012466
#[2,] 0 0.0000000 0.01410326
#[3,] 0 0.0000000 0.00000000