首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对R中数据帧中所有列组合的独立性的卡方检验

对R中数据帧中所有列组合的独立性的卡方检验
EN

Stack Overflow用户
提问于 2016-05-23 21:42:36
回答 3查看 4.5K关注 0票数 6

这是我第一次在这里发帖,我希望这一切都在正确的地方。我使用R进行基本的统计分析已经有一段时间了,但还没有真正将它用于任何具有计算挑战性的事情,而且我在R的编程/数据操作方面还是个初学者。

我有一个单一集水区323个地块中72种植物的存在/不存在(二进制)数据。数据框有323行,每行表示一个图,有72列,每列表示一个物种。这是前4列的示例(缺少一些行号,因为323个绘图是大量预先分配的绘图的子集,并不是所有的都进行了调查):

代码语言:javascript
复制
> head(plots[,1:4])
 Agrostis.canina Agrostis.capillaris Alchemilla.alpina Anthoxanthum.odoratum
1               1                   0                 0                     0
3               0                   0                 0                     0
4               0                   0                 0                     0
5               0                   0                 0                     0
6               0                   0                 0                     0
8               0                   0                 0                     0

我想要确定这个集水区中的任何植物物种是否与其他任何植物物种相关,如果是,这是积极的还是消极的关联。为了做到这一点,我想对每个物种组合进行卡方检验。我需要为每个物种x物种比较创建一个2x2列联表,对每个列联表运行卡方检验,并保存输出。最终,我想通过物种测试列出所有物种的列表或矩阵,以显示该物种的组合是否具有正相关性、负相关性或无显著性关联。我还想加入一些代码,只有当所有期望值都大于5时,才会将关联显示为正。

首先,我编写了以下函数:

代码语言:javascript
复制
CHI <- function(sppx, sppy) 
{test <- chisq.test(table(sppx, sppy)) 
result <- c(test$statistic, test$p.value,
        sign((table(sppx, sppy) - test$expected)[2,2]))
return(result)
}

这将返回以下内容:

代码语言:javascript
复制
> CHI(plots$Agrostis.canina, plots$Agrostis.capillaris)

X-squared                             
1.095869e-27  1.000000e+00 -1.000000e+00 
Warning message:
In chisq.test(chitbl) : Chi-squared approximation may be incorrect

现在,我正在尝试找出一种方法,将该函数应用于数据框中的每个speciesxspecies组合。实际上,我希望R获取每一列,按顺序对该列和其他每一列应用CHI函数,依此类推,遍历所有列,在执行过程中从数据帧中减去每一列,这样同一物种对就不会被测试两次。我尝试过使用"for“循环或"apply”函数的各种方法,但都不能解决这个问题。我希望这已经足够清楚了。这里的任何帮助都将不胜感激。我试着在网上寻找这个特定问题的现有解决方案,但没有找到任何真正有帮助的解决方案。如果有人能把我链接到一个现有的答案上,那就太好了。

EN

回答 3

Stack Overflow用户

发布于 2016-05-23 22:21:25

您需要combn函数来查找列的所有组合,然后将它们应用于您的函数,如下所示:

代码语言:javascript
复制
apply(combn(1:ncol(plots), 2), 2, function(ind) CHI(plots[, ind[1]], plots[, ind[2]]))
票数 2
EN

Stack Overflow用户

发布于 2016-05-23 22:37:31

我想你正在寻找这样的东西。我用的是虹膜数据集。

代码语言:javascript
复制
require(datasets)
ind<-combn(NCOL(iris),2)
lapply(1:NCOL(ind), function (i) CHI(iris[,ind[1,i]],iris[,ind[2,i]]))
票数 1
EN

Stack Overflow用户

发布于 2017-05-14 18:11:52

下面的R代码针对给定的变量对每个分类变量/r数据框架的每个因子运行chisquare测试(x或y chisquare参数保持稳定,明确定义):

定义您的变量请将df $varable1更改为所需的因子变量,将df更改为包含针对给定df$ariable1进行测试的所有因子变量的所需数据帧

定义您的数据帧创建一个新的数据帧(df2),它将包含给定变量与数据帧比较的所有x平方值/ dfs,p值

从stackoverflow中类似的帖子创建/完成/修改的代码,都没有产生我想要的结果。X-Square表统计/ df /p值变量与数据帧"2“参数定义列宽比较-检查应用(余量)选项。

代码语言:javascript
复制
df2 <- t(round(cbind(apply(df, 2, function(x) {
  ch <- chisq.test(df$variable1, x)
  c(unname(ch$statistic), ch$parameter, ch$p.value )})), 3))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37392655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档