【问题标题】:Omit Na values in a Chi Squared test在卡方检验中省略 Na 值
【发布时间】:2020-04-14 03:02:01
【问题描述】:

我需要一个函数来获取矩阵中多个卡方检验的 p 值 寻找,我找到了这段代码:

chisqmatrix <- function(x) {
  names = colnames(x);  num = length(names)
  m = matrix(nrow=num,ncol=num,dimnames=list(names,names))
  for (i in 1:(num-1)) {
    for (j in (i+1):num) {
      m[i,j] = chisq.test(x[,i],x[,j],)$p.value
    }
  }
  return (m)
}
mat = chisqmatrix(DATAFRAME)
mat

而且效果很好!

但问题是我需要这个函数省略 NA 值。

我不能只省略所有数据帧中的 NA 值,我需要为函数中的每一对省略它们

所以当x[,i] 选择列时,我如何才能实现它只取不为空的值。我尝试了 !="NA" 之类的方法,但方法不正确。

谢谢!

【问题讨论】:

  • 只是为了检查,你的意思是做 chisq.test(x[,i],x[,j],) 还是 chisq.test(cbind(x[,i],x[, j],))
  • 如果两者都是向量,那么根据小插图“删除缺失值的情况,将对象强制为因子,并根据这些计算列联表”,意思是,你不需要删除 NA。但如果这是故意的,那就太奇怪了

标签: r na missing-data chi-squared


【解决方案1】:

您确实需要提供可重现的数据。如手册页所述,chisq.test 在计算之前删除缺失值:

set.seed(42)
x <- matrix(sample(c(LETTERS[1:3], NA), 100, replace=TRUE), 20, 5)
x <- data.frame(x)
head(x)
#     X1   X2   X3 X4   X5
# 1    A    C    C  A <NA>
# 2    A    C    C  B    A
# 3    A    A    B  B    B
# 4    A    A    B  B    A
# 5    B    C <NA>  B    A
# 6 <NA> <NA> <NA>  B <NA>
x.chi <- chisq.test(x[, 1], x[, 2])
# Warning message:
# In chisq.test(x[, 1], x[, 2]) : Chi-squared approximation may be incorrect
x.chi$observed
#       x[, 2]
# x[, 1] A B C
#      A 3 1 3
#      B 2 1 2
sum(x.chi$observed) # How many observations in x.chi?
[1] 12
nrow(na.omit(x[, 1:2])) $ How many rows in x after removing NAs?
[1] 12

您的函数将完全按照您的意愿执行。

【讨论】:

    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多