0

我有一个 3185x90​​ 的二进制值数据集,并且想要对独立性进行卡方检验,将所有列变量相互比较。

我已经尝试使用来自谷歌搜索的不同代码变体 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")

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

4

2 回答 2

2

你可以使用类似下面的代码,它类似于 R 的cor函数。我没有你的数据,所以我在模拟一些。请注意,我使用传统的截止值 0.05 得到了一个显着的 p 值。

set.seed(3)
nr=3185; nc=3

oak <- as.data.frame(matrix(sample(0:1, size=nr*nc, replace=TRUE), ncol=nc))
oak

mult.chi <- function(data){
  nc <- ncol(data)
  res <- matrix(0, nrow=nc, ncol=nc) # or NA
  for(i in 1:(nc-1))
    for(j in (i+1):nc)
      res[i,j] <- suppressWarnings(chisq.test(oak[,i], oak[,j])$p.value)
  rownames(res) <- colnames(data)
  colnames(res) <- colnames(data)
  res
}

mult.chi(oak)

#    V1        V2         V3
# V1  0 0.7847063 0.32012466
# V2  0 0.0000000 0.01410326
# V3  0 0.0000000 0.00000000

因此,请考虑应用评论中提到的多重测试调整。

于 2020-06-14T05:11:42.467 回答
1

这是一个解决方案,combn可以将所有列号组合为 2 到 2。使用 @Edward答案中的数据进行测试。

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
于 2020-06-14T07:24:05.747 回答