我有一个大型的站点位置数据集和相关的测量/日期,可变长度记录。我想在每个站点进行线性回归,并将回归线的斜率附加为我的数据的新向量。
以下是我的数据的简化示例:
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文件,因此从这个角度来看可能更容易解决问题?
感谢任何见解。
答案 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