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

Write a loop for my function in r

我目前正在尝试为 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))
}

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

Error in model.frame.default(formula = dyn(my_num_data$rx[i] ~ lag(my_num_data$rx[i], : invalid type (NULL) for variable 'my_num_data$rx[i]'

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

谢谢!

我对 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))
}

再一次,我可能离这里很远,因为如果我的第一个 post 和 R 对我来说还是很新的。

第一个问题,我很确定您要查找的函数是 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

这会生成一个列表,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)))