我有293个网站11年的数据,并希望在这些年中在每个网站上运行线性模型,提取获得的梯度值并将其附加到数据中。
我有一个df,包含所有年份的所有数据,only_means和带有年份c(2005:2015)的向量,称为年
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
1 20.8 16.5 21.2 24.6 23.2 26.4 23.8 24.9 20.3 19.5 NA
2 21.9 19.5 19.8 25.9 25.6 26.7 24.4 22.9 21.8 18.6 15.8
3 33.7 44.2 44.8 51.9 59.6 61.4 57.7 61.7 46.5 48.3 45.5
4 41.5 48.0 47.1 53.9 67.6 58.3 62.0 53.4 50.7 52.2 47.1
5 40.7 45.9 39.9 41.3 47.1 47.2 46.0 41.6 35.8 37.7 37.4
6 37.5 38.3 37.1 44.3 49.4 52.6 48.0 44.2 35.9 37.4 37.5
如果可能的话,我也希望获得每个模型的R ^ 2值并追加它
编辑:自变量是年份,因变量是提供的读数
预期输出是通过点
的最佳拟合线的梯度答案 0 :(得分:1)
它不会为您提供每个网站的R平方值,但如果您使用长格式,lmList()
将按组适合线性回归:
dd <- read.table(header=TRUE,check.names=FALSE,row.names=1,text="
2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
1 20.8 16.5 21.2 24.6 23.2 26.4 23.8 24.9 20.3 19.5 NA
2 21.9 19.5 19.8 25.9 25.6 26.7 24.4 22.9 21.8 18.6 15.8
3 33.7 44.2 44.8 51.9 59.6 61.4 57.7 61.7 46.5 48.3 45.5
4 41.5 48.0 47.1 53.9 67.6 58.3 62.0 53.4 50.7 52.2 47.1
5 40.7 45.9 39.9 41.3 47.1 47.2 46.0 41.6 35.8 37.7 37.4
6 37.5 38.3 37.1 44.3 49.4 52.6 48.0 44.2 35.9 37.4 37.5
")
将宽格式转换为长格式:
dd$site <- factor(rownames(dd))
dd_long <- tidyr::gather(dd,year,value,-site,convert=TRUE)
适用于:
fit <- lme4::lmList(value~year|site,data=dd_long)
## Call: lme4::lmList(formula = value ~ year | site, data = dd_long)
## Coefficients:
## (Intercept) year
## 1 -394.3945 0.2072727
## 2 667.1091 -0.3209091
## 3 -1743.9000 0.8927273
## 4 -842.4727 0.4454545
## 5 1176.6091 -0.5645455
## 6 202.8182 -0.0800000