在r中为我的函数写一个循环

时间:2017-06-06 21:12:53

标签: r loops quantitative-finance

我目前正在尝试为30个变量编写第一个滞后回归循环。变量标记为rx1,rx2 .... rx3,数据帧称为my_num_data。

我创建了一个如下所示的循环:

z <- zoo(my_num_data)

for (i in 1:30)
{dyn$lm(my_num_data$rx[i] ~ lag(my_num_data$rx[i], 1) 
        + lag(my_num_data$rx[i], 2))
}

但是我收到了一条错误消息:

  

model.frame.default中的错误(formula = dyn(my_num_data $ rx [i] ~lag(my_num_data $ rx [i] ,:         变量'my_num_data $ rx [i]'

的无效类型(NULL)

谁能告诉我循环的问题是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

这会产生一个列表L,其第i个组件的名称为z的第i列,其内容是前两个z的第i列的回归滞后。 Laglag相同,但转换参数k的符号除外。

library(dyn)
z <- zoo(anscombe) # test input using builtin data.frame anscombe

Lag <- function(x, k) lag(x, -k)
L <- lapply(as.list(z), function(x) dyn$lm(x ~ Lag(x, 1:2)))

答案 1 :(得分:0)

我对R并不是很熟悉,但看起来你正试图增加rx的索引。 rx是一个值为不同指数的向量吗? 如果不是解决方案,我将连接一个字符串

for (i in 1:30){
varName <-- "rx"+i
dyn$lm(my_num_data$rx[i] ~ lag(my_num_data$rx[i], 1) 
        + lag(my_num_data$varName, 2))
}

同样,我可能会离开这里,因为如果我的第一篇文章和R对我来说仍然很新。

答案 2 :(得分:0)

第一个问题,我非常确定您正在寻找的功能是dynlm(),没有$字符。其次,使用$rx[i]并不连接rxi的内容,它会选择$rx中带有索引i的(单个)元素。试试这个...... 已编辑我没有你的数据,所以我无法在我的机器上测试它:

results <- list()
for (i in 1:30) {
  results[[i]] <- dynlm(my_num_data[,i] ~ lag(my_num_data[,i], 1) 
    + lag(my_num_data[,i], 2))
}

然后列表元素results[[1]]将是第一次回归的结果,依此类推。

请注意,这假设您的my_num_data data.frame仅包含rx1rx2等列。