我有一个同时观察多个站点值的数据框。这些观察结果多次重复(想想一组气象站,所有气象站都在一小时测量温度,每天测量一年)。
我想获得每个站点的测量值之间的相关性,逐个月。我对获得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)))
现在,因为我们有大量的网站(而且我们在运行时间之前几乎不知道有多少网站),让我们将它们融合成一个长数据框架。
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
如何逐月获得不同地点的测量值之间的相关性(使用r平方测量),而不需要使用一堆“for”循环?
答案 0 :(得分: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