这是我第一次在这里发布帖子,希望这个地方是正确的。我已经使用R进行基本的统计分析一段时间了,但实际上还没有将其用于任何计算挑战,并且在R的编程/数据操作方面我还是一个初学者。
我有72种植物物种在单个集水区的323个样地中的存在/缺失(二进制)数据。数据框是323行,每行代表一个样地,有72列,每列代表一种物种。这是前4列的样例(由于323个样地是预先分配的大量样地的子集,不是所有样地都被调查,因此某些行号可能会缺失):
我希望确定该集水区的任何植物物种是否与其他任何物种相关联,如果是,那么这是正关联还是负关联。为此,我想对每个物种组合执行独立卡方检验。我需要为每个物种x物种比较创建一个2x2列联表,对这些列联表中的每一个运行卡方检验,并保存输出。最终,我希望得到一个所有物种的列表或矩阵,显示该物种组合是否具有积极、消极或没有显著关联。我还想加入一些代码,只有在所有期望值大于5时才将关联显示为积极。
我已经编写了以下函数作为起点:
这将返回以下内容:
现在我正在尝试找到一种方法,将此函数应用于数据框中的每个物种组合。 我希望R将每一列取出,将CHI函数依次应用于该列和其他列,然后依此类推通过所有列,从数据框中减去每一列,这样就不会测试相同的物种对两次。 我已经尝试过使用“for”循环或“apply”函数的各种方法,但还没有能够解决这个问题。
我希望这足够清楚。 在这里的任何帮助都将不胜感激。 我已经尝试寻找在线上现有的解决方案,但还没有找到真正有帮助的。 如果有人可以链接给我一个现有的答案,那也太好了。
我有72种植物物种在单个集水区的323个样地中的存在/缺失(二进制)数据。数据框是323行,每行代表一个样地,有72列,每列代表一种物种。这是前4列的样例(由于323个样地是预先分配的大量样地的子集,不是所有样地都被调查,因此某些行号可能会缺失):
> 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时才将关联显示为积极。
我已经编写了以下函数作为起点:
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)
}
这将返回以下内容:
> 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
现在我正在尝试找到一种方法,将此函数应用于数据框中的每个物种组合。 我希望R将每一列取出,将CHI函数依次应用于该列和其他列,然后依此类推通过所有列,从数据框中减去每一列,这样就不会测试相同的物种对两次。 我已经尝试过使用“for”循环或“apply”函数的各种方法,但还没有能够解决这个问题。
我希望这足够清楚。 在这里的任何帮助都将不胜感激。 我已经尝试寻找在线上现有的解决方案,但还没有找到真正有帮助的。 如果有人可以链接给我一个现有的答案,那也太好了。
> plotc <- combn(NCOL(plots),2) > > lapply(1:NCOL(data), function (i) CHI(plots[,plotc[1,i]],plots[,plotc[2,i]])) [[1]] X-squared 1.095869e-27 1.000000e+00 -1.000000e+00
这将返回单个输出。我想要输出每个组合表中每个元素的卡方检验结果,很抱歉,在我的原始问题中可能没有表达清楚。您知道如何实现这一点吗?再次感谢。 - YJS[[1]]
,并将代码改为plotc <- combn(NCOL(plots),2); lapply(1:NCOL(data), function (i) CHI(plots[,plotc[1,i]],plots[,plotc[2,i]]))
。 - JeoniferNCOL(data)
改为NCOL(plotc)
。在我的代码中,我最初将变量命名为data
而不是ind
,并且我没有在lapply
中更改它。我会编辑我的代码。 - Jeonifer