【问题标题】:Substitute strings into {plm} model将字符串替换为 {plm} 模型
【发布时间】:2016-06-04 21:01:42
【问题描述】:

This tutorial 展示了如何将字符串替换为lm 模型调用。我想做同样的事情,但使用plm 进行面板回归。目标是创建一个参数组合网格,然后使用一个 apply 调用运行多个回归,每次都替换为适当的变量。

library(plm)    
#make grid of parameters to loop over; select just the first row to reproduce the error
parameters <- expand.grid(dv="mpg", x1=c("cyl", "gear"), x2=c("hp", "wt"), stringsAsFactors = FALSE)
row <- parameters[1,]

#lm works
lm(substitute(y ~ x*z, list(y=as.name(row[[1]]), x=as.name(row[[2]]), z=as.name(row[[3]]))), data=mtcars)

#plm does not
plm(substitute(y ~ x*z, list(y=as.name(row[[1]]), x=as.name(row[[2]]), z=as.name(row[[3]]))), data=mtcars)

这会产生:

错误:继承(对象,“公式”)不正确

解决方案可能涉及将变量名称粘贴到 plm 中,而不是使用 substitute。或者我可以避免为此使用plm 吗?

【问题讨论】:

    标签: r regression plm


    【解决方案1】:

    plm 需要面板数据。 您可以使用来自?plm 的Produc 示例数据集。

    library(plm)
    parameters <- expand.grid(dv="pcap", 
                              x1=c("hwy", "water"), 
                              x2=c("util", "pc"), 
                              stringsAsFactors = FALSE)
    row <- parameters[1,]
    
    # I assign the formula to another object
    # to avoid clutter in calling plm()
    formula.plm <- substitute(y ~ x  * z, 
                       list(y = as.name(row[[1]]), 
                            x = as.name(row[[2]]), 
                            z = as.name(row[[3]]))) 
    
    plm(eval(formula.plm), data = Produc)
    

    【讨论】:

    • 我对面板数据产生了同样的错误,但您的代码适用于我的数据。不同之处似乎在于包含eval。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多