superponer - Regresión en un subconjunto en R
superponer graficas en r (1)
Quiero ejecutar la misma regresión para diferentes países (es decir, subconjuntos de mis datos). Sí descubrí cómo hacerlo en R, pero después de hacer lo mismo con mucha más facilidad en Stata, me pregunto si hay una mejor manera en R.
En Stata harías algo como esto:
foreach country in USA UK France {
reg y x1 x2 if country == "`country''"
}
Simple y legible por humanos, ¿verdad? En R, se me ocurren métodos split y ddply, ambos son más complicados. Para usar split
data.subset <- split(data, data$country)[c("USA", "UK", "France")]
res <- lapply(data.subset, function(subset) lm(y ~ x1 + x2, data=subset))
Un código más compacto usaría ddply
. Pero en este caso, el modelo se ejecutará para todos los países. ¿Puedo elegir solo unos pocos?
ddply(data, "country", function(df) coefficients(lm(Y~X1+X2, data=df)))
Pero, de nuevo, estoy interesado en saber si hay un loop forzoso intuitivo y legible como en Stata.
Hay varias opciones:
Una forma de usar ddply
:
ddply( data[ data$country %in% c(''USA'',''UK'',''France''), ], "country", function(df) coefficients(lm(Y~X1+X2, data=df)))
Usar lapply
(o sapply
) de una manera diferente:
lapply( c("USA","UK","France"), function(curcont) lm(y ~ x1+x2, data=data, subset= country==curcont))
Puede usar la función lmList del paquete nlme.
Puede usar lm directamente (aunque esto usará una estimación agrupada de la varianza en lugar de las separadas):
lm( y ~ 0 + factor(country) * (x1 + x2), data=data, subset= country %in% c(''USA'',''UK'',''France'') )
También está la función by
y for
bucles y probablemente también otras opciones.