整个数据集的独立性的卡方检验

时间:2020-06-14 04:21:46

标签: r for-loop chi-squared

我有一个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")

我在输出的最后几行中添加了我的数据样本。数据集的部分很小,但是看起来都是这样。

2 个答案:

答案 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
相关问题