我有一个 df 如下:
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
, if估计k = 5
,第二个模型应该用 估计t=1, t=2,...,t=6
,依此类推。
换句话说,它从具有设置窗口 t+k 的起点进行迭代,其中 k 是某个预先指定的窗口长度,并在该特定窗口长度上迭代地应用 lm 函数。
我试过像这样使用 lapply:
mdls = lapply(df, function(x) lm(r[x,]~t))
但是,我收到以下错误:
r[x, ] 中的错误:维数不正确
如果我删除 [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 是否在欺骗我,或者我的代码是否有问题。
如何调整这些方法以确保它们按照我的意愿进行迭代?