我想做的事
我有一个同时观察多个站点的值的数据框。这些观测被多次重复(想想一组气象站,所有的时间都在测量温度,一年中的每一天)。
我想按月获取每个站点的测量值之间的相关性。我对获得 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 测量)?