我目前正在尝试为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)
谁能告诉我循环的问题是什么?
谢谢!
答案 0 :(得分:1)
这会产生一个列表L
,其第i个组件的名称为z
的第i列,其内容是前两个z
的第i列的回归滞后。 Lag
与lag
相同,但转换参数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]
并不连接rx
和i
的内容,它会选择$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仅包含rx1
,rx2
等列。