【问题标题】:How to apply Chisq.test on levels of different categorical variables?如何在不同类别变量的级别上应用 Chisq.test?
【发布时间】:2015-06-12 07:02:41
【问题描述】:

我想在分类变量的每个级别上执行chisq.test()

目前,我已经设法使用以下代码对每个分类变量执行此操作。

# Random generation of values for categorical data
set.seed(12)
x <- data.frame(col1 = sample( LETTERS[1:4], 100, replace=TRUE ), 
                col2 = sample( LETTERS[3:6], 100, replace=TRUE ),
                col3 = sample( LETTERS[2:5], 100, replace=TRUE ),
                out = sample(c(1,2),100, replace=TRUE))

# performing chisq.test
pval <- as.data.frame(sapply(c(1:3),function(i)chisq.test(x[,i],x[,'out'])$p.value ))

#output
    p.value
1 0.33019256
2 0.08523487
3 0.79403367

我有兴趣比较不同结果的水平。

# for col1 levels different outcomes
table(x$col1,x$out)

#output
     1  2
  A  8 12
  B 18 10
  C 12 11
  D 18 11

例如,比较col1 中的 B 级,以获得 out 中的不同结果 1,2。

我想知道如何将其扩展到(或以另一种智能方式)到分类变量的每个级别?

# Expected output
       p.value

col1.A  *****
col1.B  *****
col1.C  *****
.
.
.
col3.E  *****

感谢您的关注。

【问题讨论】:

  • 什么意思?你打算如何只在一个因素的一个层面上做一个chisq.test
  • @thelatemail 我想比较每个级别的不同结果。我试着举个例子,这有意义吗?
  • @NickK 在我的一位同事向我提出this paper 的问题后,我什至想知道如何解决这个问题。在表 1 中,他们比较了不同教育程度的疾病。如果我的理解与此处提出的问题不相关,请纠正我。
  • 对于他们评估的每个类别,他们构建了一个 2x2 列联表,例如高等教育与没有高等教育的行和先兆子痫与没有先兆子痫的列。这与您在问题中提出的不同。您的类别是互斥的(对于第 1 列,您不能是 A+B),而他们的类别是重叠的(您可以在他们的数据集中接受高等教育和至少 12 年的教育,尽管这对我来说似乎很不寻常)。
  • @NickK 感谢您的解释,我现在明白该示例与我的问题无关。与吸烟状态分类变量不同,重叠的教育参数对我来说是模棱两可的。

标签: r statistics sapply chi-squared


【解决方案1】:

如果您想对给定概率(使用p = rep(0.5, 2))进行卡方检验,您会这样做。

为了便于理解,我已将其分解:

getP <- function(lev, x, i) {
  tab <- table(x$out[x[, i] == lev])
  chisq.test(tab)$p.value
}
pvalList <- lapply(1:3, function(i) {
  df <- data.frame(Column = i, Category = levels(x[, i]))
  df$p.value <- sapply(df$Category, getP, x, i)
  df
})
pval <- do.call("rbind", pvalList) # Convert to single data frame

或者,如果您想要的实际上是 A 与非 A、B 与非 B 等,您可以将 getP 的定义替换为:

getP <- function(lev, x, i) {
  tab <- table(x$out, x[, i] == lev)
  chisq.test(tab)$p.value
}

【讨论】:

  • 谢谢,我是 R 初学者。虽然我现在不明白你提供的解决方案,但希望我能在接下来的几分钟内明白。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多