0

我有一个自定义函数,它运行回归并以所需的方式返回结果。该函数名为“reg.fun”。例如,我可以运行这样的代码:

results <- dt[ ,reg.fun(.SD, depvar="Y", indepvars=c("X1", "X2")),
              .SDcols=c("Y", "X1", "X2"), by = id]

上面的代码产生这样的输出:它只是以我想要的方式报告回归结果。)我在数据表中使用它来使用“按”组功能。

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 中的第一个项目。有人可以让我知道问题出在哪里,或者如果这不是正确的方向,那么正确的方向是什么?

4

2 回答 2

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)

此外,rollapplyby参数很可能应该是数字!

而且您的自定义函数似乎也reg.funby参数,这是模棱两可的,也可能导致错误。

于 2017-04-03T21:49:29.350 回答
0
regress <- dt[ ,rollapply(.SD, width = 3, reg.fun, depvar="Y",
                indepvars=c("X1","X2")), .SDcols = c("Y", "X1", "X2"), by = id]
于 2017-06-07T16:56:51.953 回答