1

我想对不同的国家(即我的数据的子集)进行相同的回归。我确实想出了如何在 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 循环?

4

1 回答 1

4

有几种选择:

一种使用方式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))

您可以使用lmListnlme 包中的函数。

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

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

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

于 2013-09-21T17:24:43.703 回答