【问题标题】:Regression on a subset in RR中子集的回归
【发布时间】:2013-09-26 22:26:42
【问题描述】:

我想对不同的国家(即我的数据的子集)进行相同的回归。我确实知道如何在 R 中做,但是在 Stata 中更轻松地做同样的事情之后,我想知道在 R 中是否有更好的方法。

在 Stata 中你会做这样的事情:

foreach country in USA UK France {
    reg y x1 x2 if country == "`country'"
}

简单易读,对吧?在 R 中,我提出了 split 和 ddply 方法,两者都比较复杂。使用split

data.subset <- split(data, data$country)[c("USA", "UK", "France")]
res <- lapply(data.subset, function(subset) lm(y ~ x1 + x2, data=subset))

更紧凑的代码将使用ddply。但在这种情况下,该模型将适用于所有国家/地区。我可以选择几个吗?

ddply(data, "country", function(df) coefficients(lm(Y~X1+X2, data=df)))

不过,我很想知道是否有像 Stata 那样直观、可读的 for 循环?

【问题讨论】:

    标签: r loops subset stata


    【解决方案1】:

    有几种选择:

    一种使用ddply的方式:

    ddply( data[ data$country %in% c('USA','UK','France'), ], "country", function(df) coefficients(lm(Y~X1+X2, data=df)))
    

    以不同的方式使用lapply(或sapply):

    lapply( c("USA","UK","France"), function(curcont) lm(y ~ x1+x2, data=data, subset= country==curcont))
    

    您可以使用 nlme 包中的 lmList 函数。

    您可以直接使用 lm(尽管这将使用方差的汇总估计而不是单独的估计):

    lm( y ~ 0 + factor(country) * (x1 + x2), data=data, subset= country %in% c('USA','UK','France') )
    

    还有by 函数和for 循环,可能还有其他选项。

    【讨论】:

    • 哇——第二段代码中lmsubset 选项正是我想要的。很好的答案!
    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多