La
siguiente entrada utiliza la potente librería tidyverse, de R, para estimar regresiones
por grupo. Para el siguiente ejemplo se utiliza la base bwght del libro de wooldridge.
library(tidyverse); library(purrr)
library(wooldridge)
attach(bwght)
En
primer lugar, indicamos la base de datos con la que deseamos trabajar (bwght
%>%); posteriormente, le indicamos para cuales grupos específicos
requerimos estimar nuestra regresiones (split(.$white)
%>%). En este caso,
se desea repetir la estimación para cada grupo, según color de la piel;
finalmente, especificamos la regresión que deseamos estimar (map(~ lm(lbwght ~ cigprice+faminc,
data = .)) %>%) ayudados por la funciones map y lm; y
llamamos la tradicional salida de la regresión de R (map(summary)). Note, que la regresión propuesta
se estima para cada una de las categorías indicadas en la variable White.
bwght
%>%
split(.$white) %>%
map(~
lm(lbwght ~ cigprice+faminc, data = .)) %>%
map(summary)
$`0`
Call:
lm(formula = lbwght ~ cigprice + faminc, data = .)
Residuals:
Min
1Q Median 3Q
Max
-1.57471 -0.11323
0.02753 0.15088 0.48549
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)
4.522e+00 1.706e-01 26.503
<2e-16 ***
cigprice 1.483e-03
1.327e-03 1.117 0.265
faminc 2.742e-05
8.369e-04 0.033 0.974
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2212 on 296 degrees of
freedom
Multiple R-squared:
0.004233, Adjusted R-squared: -0.002495
F-statistic: 0.6292 on 2 and 296 DF, p-value: 0.5337
$`1`
Call:
lm(formula = lbwght ~ cigprice + faminc, data = .)
Residuals:
Min 1Q
Median 3Q Max
-1.21048 -0.08434
0.01967 0.11253 0.81989
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.7104582
0.0692942 67.978 < 2e-16 ***
cigprice
0.0002696 0.0005266 0.512
0.60876
faminc
0.0008468 0.0002940 2.880
0.00406 **
---
Signif. codes: 0
‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1789 on 1086 degrees of
freedom
Multiple R-squared:
0.00803, Adjusted R-squared: 0.006204
F-statistic: 4.396 on 2 and 1086 DF, p-value: 0.01255
En el
segundo ejemplo, únicamente se agrega la función map_dbl,
para llamar un estadístico específico de los calculados por R de forma automática.
En este ejemplo se llama el R cuadrado (map_dbl("r.squared")).
# Ejemplo: obtiene el R2
para cada grupo
bwght %>%
split(.$white)
%>%
map(~
lm(lbwght ~ cigprice+faminc, data = .)) %>%
map(summary)
%>%
map_dbl("r.squared")
En caso
de desear ver cómo saber cuáles estadísticos podemos llamar:
models1<-lm(lbwght ~ cigprice+faminc)
summary(models1)
ames(summary(models1))
> names( summary(models1))
[1] "call" "terms" "residuals" "coefficients" "aliased" "sigma"
[7] "df" "r.squared" "adj.r.squared" "fstatistic" "cov.unscaled"