循环线性回归函数并将得到的渐变作为新列附加

时间:2017-10-02 12:39:17

标签: r regression lm linear

我有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值并追加它

编辑:自变量是年份,因变量是提供的读数

预期输出是通过点

的最佳拟合线的梯度

1 个答案:

答案 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