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

R中数据帧中所有列组合独立性的卡方检验,r,chi-squared,R,Chi Squared,这是我第一次在这里发帖,我希望这一切都在正确的地方。我使用R进行基本统计分析已经有一段时间了,但还没有真正将其用于任何具有计算挑战性的领域,而且我在R的编程/数据操作方面是一个非常初学者 我有一个集水区323个地块中72种植物物种的存在/不存在(二元)数据。数据帧是323行,每行代表一个图,72列,每列代表一个物种。这是前4列的样本(由于323个图是大量预先指定图的子集,而不是所有图都已调查过,因此缺少一些行号): 我想确定该流域的任何植物物种是否与其他物种有关联,如果是,这是正关联还是负关联。

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

我有一个集水区323个地块中72种植物物种的存在/不存在(二元)数据。数据帧是323行,每行代表一个图,72列,每列代表一个物种。这是前4列的样本(由于323个图是大量预先指定图的子集,而不是所有图都已调查过,因此缺少一些行号):

我想确定该流域的任何植物物种是否与其他物种有关联,如果是,这是正关联还是负关联。为了做到这一点,我想对每个物种组合进行卡方检验。我需要为每个speciesxspecies比较创建一个2x2列联表,在每个列联表上运行卡方检验,并保存输出。最后,我想以一份所有物种的列表或矩阵作为结束,通过物种间的测试来显示物种组合是否具有积极、消极或无显著关联。我还想合并一些代码,这些代码仅在所有预期值都大于5时才将关联显示为正

我首先编写了以下函数:

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)
}
现在,我试图找出一种方法,将此函数应用于数据帧中的每个speciesxspecies组合。我基本上希望R取每一列,对该列和其他列依次应用CHI函数,依此类推,通过所有列,从数据帧中减去每一列,这样相同的物种对就不会被测试两次。我尝试过各种方法,试图使用“for”循环或“apply”函数,但一直无法解决这个问题。
我希望这足够清楚。这里的任何帮助都将不胜感激。我曾尝试在网上寻找这个特定问题的现有解决方案,但没有找到任何真正有用的解决方案。如果有人能将我链接到这个问题的现有答案,那也太好了。

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

apply(combn(1:ncol(plots), 2), 2, function(ind) CHI(plots[, ind[1]], plots[, ind[2]]))

我想你在找这样的东西。我使用了iris数据集

require(datasets)
ind<-combn(NCOL(iris),2)
lapply(1:NCOL(ind), function (i) CHI(iris[,ind[1,i]],iris[,ind[2,i]]))
require(数据集)

ind下面的R代码针对给定变量(x或y chisquare参数保持稳定,明确定义)对R数据帧的每个分类变量/每个因子进行卡方检验:

定义变量 请-将df$variable1更改为所需的因子变量,并将df更改为所需的数据框,其中包含针对给定df$variable1测试的所有因子变量

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

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


df2@Psidom你跑得太快了;对不起,我不能删除我的答案,因为没有删除按钮。这将教会我在发帖前刷新。非常感谢你的帮助!我尝试对我的数据使用这段代码:`>plotc>lapply(1:NCOL(数据),函数(I)CHI(plots[,plotc[1,I]],plots[,plotc[2,I]])[[1]]X平方1.095869e-27 1.000000e+00-1.000000e+00`这返回一个输出。我想输出每个卡方检验的结果-组合表中每个元素一个。抱歉,这在我最初的问题中可能不清楚。你知道实现这一目标的方法吗?再次感谢您在代码中指定只提供一个输出。如果您想让他们全部删除代码末尾的
[[1]]
,并仅绘制
plotc对不起,我的格式很差-我认为在代码段的任一侧加上“`”会使其显示为代码,但显然不是。“[[1]]”来自控制台的R输出的第一行,而不是我的代码。我正在运行您刚刚在注释中显示的代码,它返回的是长度为1的列表。我发现问题在于将
NCOL(data)
更改为
NCOL(plotc)
。在我的代码中,我最初将变量命名为
data
,而不是
ind
,并且我没有在
lappy
中更改它。我将编辑我的代码。
apply(combn(1:ncol(plots), 2), 2, function(ind) CHI(plots[, ind[1]], plots[, ind[2]]))
require(datasets)
ind<-combn(NCOL(iris),2)
lapply(1:NCOL(ind), function (i) CHI(iris[,ind[1,i]],iris[,ind[2,i]]))
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))