1

我正在运行多个单变量回归,就像在这个可重现的示例中一样:

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()from一起使用dynlm。我收到此错误消息:

merge.zoo(log(GNP),L(log(M1),0),retclass =“list”,all = FALSE)中的错误:找不到函数“L”

编辑:发现一个有趣的帖子 bei Achim Zeileis指的是这个问题。

4

2 回答 2

2

要构建 R 公式,您必须将它们全部粘贴在一起,而不仅仅是它的预测器部分。所以你需要类似的东西:

formula <- as.formula(
    paste("log(GNP)~",
        paste("L(",rep(vars,each=3),",",l,")",sep=""),
        sep = ""
    )
)

然后运行

dynlm(formula, data = ...)
于 2011-09-22T18:05:32.370 回答
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)

Each element of this list contains details on a single regression from which you can extract your desired output

于 2011-09-23T04:05:51.597 回答