双向表和R中的卡方测试

时间:2017-09-13 08:33:56

标签: r

我目前正在为学校开展一个R项目。我对这个项目有疑问。我必须打印一个双向表,我表中的每个单元格都应该包含卡方测试的结果。

例如:

My two-ways table

例如,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的新手 另外,对不起我的英文

2 个答案:

答案 0 :(得分: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中的假设测试返回。

答案 1 :(得分:0)

试试这个

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