在一起我有一个DF如下:使用lapply和LM功能中的R
t r
1 0 100.00000
2 1 135.86780
3 2 149.97868
4 3 133.77316
5 4 97.08129
6 5 62.15988
7 6 50.19177
等等...
我想用lm(r~t)
申请滚动回归。
不过,我想估计一个模型每次迭代,在迭代发生在一个设定的时间窗口t+k
。从本质上讲,第一种模式应与t=0,t=1,...t=5
估计,如果k = 5
,第二个模型t=1, t=2,...,t=6
估计,依此类推。
换句话说,它从具有集合窗口t + k的起点迭代,其中k是某个预先指定的窗口长度,并且迭代地在该特定窗口长度上应用lm函数。
我一直在使用lapply这样的尝试:
mdls = lapply(df, function(x) lm(r[x,]~t))
但是,我得到了以下错误:
Error in r[x, ] : incorrect number of dimensions
如果我删除了[X],每次迭代给我相同的模型换句话说,使用所有的观察。
如果我使用rollapply:
coefs = rollapply(df, 3, FUN = function(x) coef(lm(r~t, data =
as.data.frame(x))), by.column = FALSE, align = "right")
res = rollapply(df, 3, FUN = function(z) residuals(lm(r~t, data =
as.data.frame(z))), by.column = FALSE, align = "right")
其中:
t = seq(0,15,1)
r = (100+50*sin(0.8*t))
df = as.data.frame(t,r)
我得到15种型号,但它们都在估计整个数据集,提供相同的拦截和系数。这很奇怪,因为我在用新脚本测试它之前,设法使rollapply工作。由于某种原因,它不能再工作,所以我很困惑R是否在玩弄我,或者我的代码有什么问题。
如何调整这些方法以确保它们按照我的意愿进行迭代?
非常感谢您! 此外,仅供参考,我注意到,我在我的问题有一个重要的(但愚蠢的)错误。本质上,我写了as.data.frame(t,r)而不是data.frame(t,r),因此只有一个r的向量而不是几个观察值。 通过改变这个错误,我设法得到不同的系数和残差。 无论如何,感谢很多的解决方案,它看起来非常整洁,很容易遵循。 =) – Mattia
谢谢你的评论:) –