R中子集的回归

海森堡

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

格雷格·雪诺

有几种选择:

一种使用方式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循环,可能还有其他选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章