我有一个自定义函数,它运行回归并以所需方式返回结果。该函数名为“reg.fun”。例如,我可以运行这样的代码:
results <- dt[ ,reg.fun(.SD, depvar="Y", indepvars=c("X1", "X2")),
.SDcols=c("Y", "X1", "X2"), by = id]
上面的代码生成如下输出:它只是以我想要的方式报告回归结果。)我在数据表中使用它来使用“by”组功能。
id X1coef X2coef X1tstat X2tstat ...other results...
A 0.0418 0.1194 2.65 3.56 ....
B 0.7903 -0.554 2.75 4.59 .....
这完美无缺,并在所需的表格中给出了结果。现在,我想使用rollapply函数以滚动窗口的方式执行相同的操作。我写的是:
regress <- dt[ ,rollapply(.SD, width = 3,
reg.fun(.SD, depvar="Y" indepvars=c("X1","X2")) ),
.SDcols = c("Y", "X1", "X2"), by = id]
这是我现在得到的错误:
match.fun(FUN)出错: 'reg.fun(.SD,depvar =“Y”,indepvars = c(“X1”,“X2”))'不是函数,字符或符号
理想情况下,我想生成相同的上表,但现在有多行用于id A和id B,因为我想在滚动窗口上运行回归。像这样的事情:
window id X1coef X2coef X1tstat X2tstat ...other results...
1-3 A xxx xxx xxx xxx ....
2-5 A xxx xxx xxx xxx
3-6 A xxx xxx xxx xxx
...
1-3 B xxx xxx xxx xxx .....
2-5 B xxx xxx xxx xxx
3-6 B xxx xxx xxx xxx
我无法找出为什么在这种情况下reg.fun不被视为rollapply的函数。
我知道我可能在很多层面上都错了,因为这是我在R的第一个项目。有人可以告诉我这是什么问题,或者如果不是这样,那么正确的方向是什么? ?
答案 0 :(得分:0)
我记得你应该在逗号之后在rollapply
内输入自定义函数的参数,而不是在括号中。你应该打印像rollapply(data, window, function, arg1, arg2)
这样的东西。在你的情况下,它应该看起来像:
rollapply(.SD, 3, reg.fun, depvar="Y", indepvars = c("X1", "X2")), .SDcols = c("Y", "X1", "X2"), by = id)
另外rollapply by
参数最有可能是数字!
似乎你的自定义函数reg.fun
也有by
参数,这是不明确的,也可能导致错误。
答案 1 :(得分:0)
regress <- dt[ ,rollapply(.SD, width = 3, reg.fun, depvar="Y",
indepvars=c("X1","X2")), .SDcols = c("Y", "X1", "X2"), by = id]