删除R中的单个时间趋势
我有一个数据集:删除R中的单个时间趋势,r,R,我有一个数据集: User Date Value 1 A 2011 1 2 A 2012 3 3 A 2013 2 4 A 2014 4 5 A 2015 6 6 B 2011 10 7 B 2012 8 8 B 2013 4 9 B 2014 5 10 B 2015 2 11 C 2011 5 12 C 2012
User Date Value
1 A 2011 1
2 A 2012 3
3 A 2013 2
4 A 2014 4
5 A 2015 6
6 B 2011 10
7 B 2012 8
8 B 2013 4
9 B 2014 5
10 B 2015 2
11 C 2011 5
12 C 2012 7
13 C 2013 8
14 C 2014 2
15 C 2015 1
由以下代码生成:
d <- data.frame(
User = rep( LETTERS[1:3], each=5 ),
Date = rep(2011:2015,3),
Value = c(1,3,2,4,6,10,8,4,5,2,5,7,8,2,1)
)
所以A的值在每个时间段都有向上1.1个单位的趋势。因此,我们可以在第一个观测值上加2.2,第二个观测值上加1.1,第三个观测值不变,第四个观测值减去1.1,第五个观测值减去2.2
一旦发生这种情况,用户A就不再有时间趋势了
summary(lm(c(3.2,4.1,2,2.9,3.8)~c(2011:2015)))
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.200e+00 6.039e+02 0.005 0.996
c(2011:2015) -1.404e-16 3.000e-01 0.000 1.000
若你们想要的只是一个差异向量,那个么一个快速的方法就是从包含交互作用的线性模型中得到残差
diffs <- unname(lm(Value ~ User*Date, data=d)$residuals)
diff抱歉,但我认为这不正确,因为它为用户a提供了不同的答案(与我手动计算的结果不同)。当我检查我的手工编制的解决方案时,我发现没有更多的时间趋势。还没有看到您的编辑-添加了我自己的编辑,将与您的答案相匹配。
diffs <- unname(lm(Value ~ User*Date, data=d)$residuals)
diffs <- unname(lm(Value ~ User*Date, data=d)$residuals) + unname(lm(Value ~ User,data=d)$fitted)