【问题标题】:Running lagged regressions with lapply and two arguments使用 lapply 和两个参数运行滞后回归
【发布时间】:2011-09-22 17:59:06
【问题描述】:

我正在运行多个单变量回归,例如这个可重现的示例:

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&lt;-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 不能与来自dynlmL() 一起使用。我收到此错误消息:

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

编辑: 找到一个interesting post bei Achim Zeileis 指代这个问题。

【问题讨论】:

    标签: r formula regression lapply


    【解决方案1】:

    要构建 R 公式,您必须将其全部粘贴在一起,而不仅仅是预测器的一面。所以你需要这样的东西:

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

    然后运行

    dynlm(formula, data = ...)
    

    【讨论】:

    • 嗯,很遗憾我收到一条错误消息,因为公式中有 L(),但没有公式 L() 确实有效。
    • “没有公式”是什么意思?
    • 没有公式我的意思是,如果我直接这样做L() 是合法的:dynlm(rl~L(rs,1),data=US)
    【解决方案2】:

    这是一种使用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)
    

    此列表的每个元素都包含有关单个回归的详细信息,您可以从中提取所需的输出

    【讨论】:

    • 呃,一个问题:如果需要 R^2 或 AIC 怎么办?我会使用摘要来获取这些。那你会用lapply(regressions,summary)吗?
    • 侧面回答:getR2 &lt;- function(lm) summary(lm)$r.squared 然后使用 lapply。
    猜你喜欢
    • 2020-07-28
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多