【问题标题】:Two way tables and the Chi square Test in RR中的两种方法表和卡方检验
【发布时间】:2017-09-13 17:06:55
【问题描述】:

我目前正在为学校做一个 R 项目。我有一个关于项目的问题。我必须打印一个双向表格,表格的每个单元格都应该包含卡方检验的结果。

例如:

例如,0.7 是 Orange 和 Apple 之间的卡方检验的结果。

我知道如何在两个变量之间进行卡方检验:

chisq.test(c(data_frame$Apple, data_frame$Orange))

然后我尝试打印双向表:

list <- c("Apple", "Orange", "Grappe")
for (element in list) {
   for (element2 in list) {
      chisq.test(c(data_frame$element, data_frame$element2))
   }
}

但它不起作用,我有一个无限循环。

有人可以帮我解决这个问题吗?我是 R 新手 另外,对不起我的英语

【问题讨论】:

  • 使用data_frame[[element]]element2 相同。您也没有分配测试结果。我见过更糟糕的英语。
  • 你好 Rui Barradas,你想让我用 data_frame[element]$element 替换 data_frame$element 吗?
  • 不!用我写的data_frame[[element]] 替换data_frame$element。不同之处在于element 是一个包含df 列名称的字符串,但不是 列本身。
  • 好的,谢谢。我没有任何错误或警告,但屏幕上没有任何内容,这正常吗?
  • 那是因为 for 循环返回 NULL 并且您没有分配测试结果。等等,我会发布一个答案。

标签: r


【解决方案1】:

如果没有看到data_frame,就不可能知道下面的代码是否符合您的要求,但它就在这里。
首先,我把向量的名字改成了mylist,因为list是一个R函数。

mylist <- c("Apple", "Orange", "Grappe")

pval <- lapply(mylist, function(x){
    lapply(mylist, function(y){
        if(x != y) {
            chisq.test(data_frame[[x]], data_frame[[y]])$p.value
        }
    })
})
pval

这只会产生 p 值,如果你想要 chisq.test 的完整输出,你可以使用

result <- lapply(mylist, function(x){
    lapply(mylist, function(y){
        if(x != y) {
            chisq.test(data_frame[[x]], data_frame[[y]])
        }
    })
})

这会生成一个嵌套列表,嵌套列表的每个元素都是 htest 类的对象,这些元素由 R 中的假设检验返回。

【讨论】:

    【解决方案2】:

    试试这个

    list <- c("Apple", "Orange", "Grappe")
    while (element in list) {
       while (element2 in list) {
          chisq.test(c(data_frame$element, data_frame$element2))
       }
    }
    

    【讨论】:

    • 我们不能用 while 循环做列表中的元素
    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2019-06-18
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2020-10-12
    相关资源
    最近更新 更多