我想对不同的国家(即数据的子集)进行相同的回归。我确实想出了如何在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))
您可以使用lmList
nlme软件包中的函数。
您可以直接使用lm(尽管这将使用方差的合并估计而不是单独的估计):
lm( y ~ 0 + factor(country) * (x1 + x2), data=data, subset= country %in% c('USA','UK','France') )
还有by
函数和for
循环,可能还有其他选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句