将回归斜率附加到新向量

时间:2015-08-02 21:31:41

标签: r append linear-regression

我有一个大型的站点位置数据集和相关的测量/日期,可变长度记录。我想在每个站点进行线性回归,并将回归线的斜率附加为我的数据的新向量。

以下是我的数据的简化示例:

site_no<- c(1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5)             
date<- c(1/1/1990, 1/1/1991, 1/1/1992, 1/4/1963, 1/10/1970, 1/10/1975, 
     1/10/1980, 1/1/1990, 1/1/1998, 1/1/1999, 1/1/2000, 1/1/2005)  
measurement<- c(.5, .75, 1.0, .5, .6, 1.0, 1.5, 1.1, 1.2, 1.8, 1.9, 2)   
df<- data.frame(site_no, date, measurement)

如果可以消除单个测量站点,可以获得奖励积分,但我可以在事实之前或之后轻松处理这个问题。

我还将这些数据按站点编号拆分为单独的CSV文件,因此从这个角度来看可能更容易解决问题?

感谢任何见解。

1 个答案:

答案 0 :(得分:0)

你可以这样。一点手册,但透明。

site_no<- c(1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5)             
 date<- c(1/1/1990, 1/1/1991, 1/1/1992, 1/4/1963, 1/10/1970, 1/10/1975, 
        1/10/1980, 1/1/1990, 1/1/1998, 1/1/1999, 1/1/2000, 1/1/2005)  
 measurement<- c(.5, .75, 1.0, .5, .6, 1.0, 1.5, 1.1, 1.2, 1.8, 1.9, 2)   
 df<- data.frame(site_no, date, measurement)

 fit <- lm(measurement ~ site_no, data=df) 
 fit$coefficients[[1]]
[1] 0.2769231

 fit$coefficients[[2]]
[1] 0.3096154

  df$slope = measurement - (fit$coefficients[[2]]*site_no+fit$coefficients[[1]])

> df
   site_no         date measurement       slope
1        1 5.025126e-04        0.50 -0.08653846
2        1 5.022602e-04        0.75  0.16346154
3        1 5.020080e-04        1.00  0.41346154
4        2 1.273561e-04        0.50 -0.39615385
5        2 5.076142e-05        0.60 -0.29615385
6        3 5.063291e-05        1.00 -0.20576923
7        3 5.050505e-05        1.50  0.29423077
8        4 5.025126e-04        1.10 -0.41538462
9        4 5.005005e-04        1.20 -0.31538462
10       4 5.002501e-04        1.80  0.28461538
11       4 5.000000e-04        1.90  0.38461538
12       5 4.987531e-04        2.00  0.17500000