我正在运行多个单变量回归,就像在这个可重复的例子中一样:
require(dynlm)
data(USeconomic)
US<-USeconomic
vars<-colnames(US)[-2]
a<-lapply(colnames(US),function(x) dynlm(log(GNP)~get(x),data=US))
a
包含3个单变量回归列表。假设现在我想用3个滞后运行相同的回归:l<-c(0,1,4)
其中0当然是我已经得到的情况。有没有办法直接使用向量l
,比如
# this did not work for me, I obtain multivariate regressions including all lags at once
lapply(colnames(US),function(x) dynlm(log(GNP)~L(get(x),l),data=US),l=l)
在此之后不起作用我尝试了另一种方法并添加到以下向量:
lagged_vars <- paste("L(",rep(vars,each=3),",",l,")",sep="")
得到:
[1] "L(log(M1),0)" "L(log(M1),1)" "L(log(M1),4)" "L(rs,0)" "L(rs,1)"
[6] "L(rs,4)" "L(rl,0)" "L(rl,1)" "L(rl,4)"
不幸的是,我无法使用新的字符向量运行它,get()也无济于事。我无法理解为什么它适用于vars
而不是lagged_vars
这两个都是字符向量。
请注意,L()
语法来自dynlm包。
附带问题:如果我只是从回归结果中打印出系数,则保留标记为get(x) - 如何更改?
i,j循环可能是解决方案,但我宁愿使用lapply或者这个家族中的某些东西......
编辑:
as.formula
与L()
的{{1}}无法合作。我收到此错误消息:
merge.zoo(log(GNP),L(log(M1),0),retclass =“list”,all = FALSE)出错: 找不到功能“L”
编辑: 发现interesting post bei Achim Zeileis指的是这个问题。
答案 0 :(得分:2)
要构建R公式,您必须将所有粘贴在一起,而不仅仅是它的预测变量旁边。所以你需要这样的东西:
formula <- as.formula(
paste("log(GNP)~",
paste("L(",rep(vars,each=3),",",l,")",sep=""),
sep = ""
)
)
然后运行
dynlm(formula, data = ...)
答案 1 :(得分:1)
以下是使用plyr
library(plyr); library(dynlm); library(tseries)
# FUNCTION TO RUN A SINGLE REGRESSION
foo = function(x, l) dynlm(log(GNP) ~ L(get(as.character(x)), l), data = US)
# CREATE PARAMETER GRID
params = expand.grid(x = colnames(US)[-2], l = c(0, 1, 4))
# RUN REGRESSIONS
regressions = mlply(params, foo)
此列表的每个元素都包含有关单个回归的详细信息,您可以从中提取所需的输出