Tidyverse y minería de datos en R: estimar regresiones por grupos

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" 

Entradas populares de este blog

Valores perdidos (NA) en R: identificación y tratamiento (I)

Ejemplos de tablas en Stata

Métodos y técnicas de Investigación Económica