0

我想做的事

我有一个同时观察多个站点的值的数据框。这些观测被多次重复(想想一组气象站,所有的时间都在测量温度,一年中的每一天)。

我想按月获取每个站点的测量值之间的相关性。我对获得 R 平方特别感兴趣。因此,对于 1 月、2 月、3 月等,这是站点 1:站点 2、站点 1:站点 3 等的 R 平方。

故事到此为止

让我们伪造一些数据:

df <- data.frame("B" = c(rep("January",20),rep("February",20)),
                 "D" = c(seq(1,20,1),seq(1,20,1)),
                 "site1" = c(seq(1,20,1),seq(0.1,2,0.1)),
                 "site2" = c(seq(2,40,2),seq(0.2,4,0.2)),
                 "site3" = c(seq(3,60,3),seq(0.3,6,0.3)))

现在,因为我们有大量站点(直到运行时我们才知道有多少),让我们将它们融合到一个长 data.frame 中:

require(reshape)
df.melt <- melt(data = df,
                id.vars = c("B","D"),
                values = c("site1","site2","site3"))

我卡住的地方

我想我会试试这个nlme包。我首先创建一个groupedData对象:

require(nlme)
df.melt.grp <- groupedData(value ~ value | variable,
                           data = df.melt,
                           inner = ~ B)

我认为我在这里所说的是考虑value依赖于value,按variable(即融化后的站点)分组,然后按月进一步分组。

然后我尝试申请lmlist得到回归

lm.model <- lmList(object = df.melt.grp)

不幸的是,当我要求对此进行总结时,看起来好像我没有按月获得互相关或子集:

> summary(lm.model)
Call:
  Model: value ~ value | variable 
   Data: df.melt.grp 

Coefficients:
   (Intercept) 
      Estimate Std. Error  t value     Pr(>|t|)
site1    5.775   2.163481 2.669309 8.680907e-03
site2   11.550   2.163481 5.338618 4.658854e-07
site3   17.325   2.163481 8.007927 9.612311e-13

Residual standard error: 13.68306 on 117 degrees of freedom

问题

如何在不使用一堆“for”循环的情况下逐月获得不同站点的测量值之间的相关性(使用 r-squared 测量)?

4

1 回答 1

1

Hmisc 库包含rcorr将采用矩阵参数的函数

require(Hmisc)
 lapply(split(df[, 3:5], df$B),
              function(mo) rcorr(as.matrix(mo))[[1]]^2 )
$February
      site1 site2 site3
site1     1     1     1
site2     1     1     1
site3     1     1     1

$January
      site1 site2 site3
site1     1     1     1
site2     1     1     1
site3     1     1     1
于 2013-07-14T20:34:59.877 回答