我希望能够计算滚动回归的系数(特别是截距) . 有许多因变量 . 其中一些(Y1和Y2)如下所示 . 它们中的每一个都用自变量X1和X2回归 . 另外,Y1和Y2在不同时期都具有NA . 数据是按月间隔的时间序列 . 滚动窗口是6 .
这是我的代码:
rr <- rollapply(df, width = 6,
FUN = function(z) coef(lm(Y1~ X1+X2,
data = as.data.frame(z))),
by.column = FALSE, align = "right")
但是,这段代码的问题是
1)它一次只处理一个自变量(在这种情况下为Y1),
2)它给出了所有滚动回归的相同系数 . 我假设NA的存在搞砸了滚动回归?
如果有人可以点灯,我将不胜感激 . 谢谢 .
这是一个示例数据 .
Date Y1 Y2 X1 X2
1/1/2009 NA 1.51 0.02 0.75
2/1/2009 NA -0.38 0.01 0.59
3/1/2009 NA 1.54 0.02 0.96
4/1/2009 NA 1.78 0.01 0.92
5/1/2009 NA 0.94 0.02 0.02
6/1/2009 NA 1.37 0.01 0.46
7/1/2009 NA 1.22 0.01 0.61
8/1/2009 NA 1.32 0.01 0.04
9/1/2009 NA 0.83 0.01 0.03
10/1/2009 NA 0.95 0.02 0.61
11/1/2009 NA 0.28 0.03 0.53
12/1/2009 NA 0.17 0.01 0.32
1/1/2010 1.71 NA 0.03 0.53
2/1/2010 0.39 NA 0.03 0.16
3/1/2010 0.11 NA 0.01 0.58
4/1/2010 1.25 NA 0.01 0.41
5/1/2010 0.57 NA 0.01 0.9
6/1/2010 0.48 NA 0.01 0.58
7/1/2010 0.16 NA 0.01 0.03
8/1/2010 0.37 NA 0.01 0.23
9/1/2010 0.31 NA 0.01 0.77
10/1/2010 0.63 NA 0.01 0.75
11/1/2010 0.61 NA 0.01 0.74
12/1/2010 0.91 NA 0.01 0.41
1 回答
有两个问题:
将data.frame传递给
rollapply
会导致它转换为矩阵,并且由于其中一列是字符列,因此结果将是字符矩阵,而数字则是所需的 . 使用df[-1]
或下面显示的代码 .lm
不接受具有所有NA值的因变量 . 在这种情况下检查并返回NA .添加一些改进:
首先将输入转换为类动物园 .
定义函数
getCoef
以获得给定数据的系数以及公式的左侧和右侧定义函数
roll
使用rollapplyr
执行rollapply
lapply
函数roll
overc("Y1", "Y2")
生成2个动物园对象的列表可选地将
fortify.zoo
映射到L
以提供数据帧列表码:
(可选)对于data.frames列表:
Note: 可重复形式的输入
df
是: