【问题标题】:covariance matrix from a community list with grouping factors来自具有分组因子的社区列表的协方差矩阵
【发布时间】:2014-03-20 04:02:59
【问题描述】:

我仍在学习使用 data.table(来自 data.table 包),即使在网上和帮助文件上寻求帮助后,我仍然在努力做我想做的事。 我有一个包含 60 多列的大型数据表(前三列对应于因子,其余对应于响应变量,在这种情况下是不同的物种)和几行对应于不同的处理水平和物种丰度。一个非常小的版本如下所示:

> TEST<-data.table(Time=c("0","0","0","7","7","7","12"),
             Zone=c("1","1","0","1","0","0","1"),
             quadrat=c(1,2,3,1,2,3,1),
             Sp1=c(0,4,29,9,1,2,10),
             Sp2=c(20,17,11,15,32,15,10),
             Sp3=c(1,0,1,1,1,1,0)) 
>setkey(TEST,Time)

> TEST
    Time Zone quadrat Sp1 Sp2 Sp3
1:    0    1       1   0  20   1
2:    0    1       2   4  17   0
3:    0    0       3  29  11   1
4:   12    1       1  10  10   0
5:    7    1       1   9  15   1
6:    7    0       2   1  32   1
7:    7    0       3   2  15   1   

我需要计算每个 Zone x 样方组的协方差之和。如果我只有给定 Zone x 样方组合的物种列表,那么我可以使用 cov() 函数,但使用 cov() 的方式与在

中使用 mean() 或 sum() 的方式相同
 Abundance = TEST[,lapply(.SD,mean),by="Zone,quadrat"]  

不起作用,因为我收到以下错误消息:

Error in cov(value) : supply both 'x' and 'y' or a matrix-like 'x'

我明白为什么,但我不知道如何解决这个问题。

我真正想要的是能够为每个区域 x 样方组合获得所有采样时间点上所有物种的协方差矩阵。然后,我需要从每个矩阵中计算所有物种对的协方差之和,这样我就可以得到每个 Zone x 样方组合的协方差之和。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 您的test 不起作用,因为列的长度不同。它看起来也不像您在此处显示的TEST。另外,您的示例是否需要 Time 变量?最后,你想要的输出是什么样的?矩阵列表?
  • 抱歉,复制了错误的版本:我已编辑问题以更正它。是的,我需要 Time 变量,因为这是应该计算协方差的变量。我还对问题进行了编辑,以更具体地说明我在寻找什么。
  • 好的,比如TEST[,sum(upper.tri(cov(.SD))),by='Zone,quadrat',.SDcols=paste('Sp',1:3,sep='')]?
  • 这不起作用,尽管我认为它的方向是正确的:sum 函数似乎从 upper.tri 函数计算 TRUE 值的数量,而不是实际值。
  • OK,所以把上面的代码改成diag = FALSE之后,我觉得可以了

标签: r data.table


【解决方案1】:

根据上面@Frank 提供的帮助以及我围绕upper.tri 函数的使用所做的一些额外搜索,以下代码有效:

Cov= TEST[,sum(cov(.SD)[upper.tri(cov(.SD), diag = FALSE)]), by='Zone,quadrat', .SDcols=paste('Sp',1:3,sep='')]

建议的初始版本,其中upper.tri() 没有出现在 [] 中,仅从协方差矩阵中提取逻辑值,并且允许diag = FALSE 在对矩阵的上三角形求和之前排除对角线值。就我而言,我不在乎它是上三角还是下三角,但我确信使用lower.tri() 会同样有效。

我希望这对可能遇到类似问题的其他用户有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2015-01-19
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多