Refs: https://cran.r-project.org/web/packages/jtools/vignettes/summ.html Fields, Cap. 9: comparing two means Miles, understanding and using statistics
Es esta práctica vamos a abordar dos temas:
1- predictores categóricos en regresión 2- inferencia estadística
Ambos temas corresponden a dos ámbitos independientes en el estudio de la regresión. Sin embargo, la inclusión de predictores categóricos de dos niveles (o variables dicotómicas) nos permitirá una aproximación a inferencia estadística que es directamente vinculable a los conocimientos previos sobre diferencia de promedios mediante la prueba t.
Hasta ahora hemos trabajado solamente con predictores a los que asumimos un nivel de medición contínua (es decir, al menos intervalar). ¿Qué sucede con predictores donde se asume un distinto nivel de medición, como nominal u ordinal? En general este tipo de predictores requiere una interpretación y tratamiento distinto que los predictores continuos.
Las variables dicotómicas son aquellas variables nominales u ordinales que poseen solo dos categorías de respuesta, por ejemplo hombre/mujer, sano/enfermo, deportista/sedentario. La inclusión de estas variables en un modelo de regresión no requiere un tratamiento especial, solo hay que considerar que su interpretación tiene un sentido distinto.
# librerias:
pacman::p_load(dplyr,
corrplot,
ggplot2,
texreg,
stargazer,
kableExtra,
pander,
descr,
expss)
#datos
exercise <- read.csv("https://juancarloscastillo.github.io/metsoc-facsouchile/documents/practicas/3regmul/exercise.txt", sep="")
exercise
## id exercise food metab sex wtloss
## 1 1 0 2 15 0 6
## 2 2 0 4 14 0 2
## 3 3 0 6 19 0 4
## 4 4 2 2 15 1 8
## 5 5 2 4 21 1 9
## 6 6 2 6 23 0 8
## 7 7 2 8 21 1 5
## 8 8 4 4 22 1 11
## 9 9 4 6 24 0 13
## 10 10 4 8 26 0 9
# transformando la variable peso x 100 para que sea más fácil de interpretar:
exercise$wtloss <- exercise$wtloss*100
Veamos primero un scatter de peso \(Y\) con sexo como independiente \(X_{sexo}\)
Observamos que solamente hay 2 niveles en los valores de la variable X: 0 (hombre) y 1 (mujer). Por lo tanto, solo dos medias condicionales. Vamos a comparar con los promedios simples por sexo, pero antes vamos a etiquetar los valores de la variable sexo mediante las funciones de la librería sjlabelled
Si calculamos el promedio simple de perdida de peso por sexo tenemos:
## # A tibble: 2 x 2
## sex Mean
## <fct> <dbl>
## 1 Hombre 700
## 2 Mujer 825
Segun esto la pérdida de peso para una mujer es de 825 gramos, mientras para un hombre es de 700. Realizando ahora la regresión:
##
## ===============================================
## Dependent variable:
## ---------------------------
## wtloss
## -----------------------------------------------
## sexMujer 125.000
## (222.146)
##
## Constant 700.000***
## (140.498)
##
## -----------------------------------------------
## Observations 10
## R2 0.038
## Adjusted R2 -0.082
## Residual Std. Error 344.147 (df = 8)
## F Statistic 0.317 (df = 1; 8)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Entonces,
\[wtloss=700 + 125Sexo\]
Las mujeres pierden en promedio 125 gramos más en comparación con los hombres. En este caso, hombre se denomina la categoría de referencia
¿Cuál es la predicción de pérdida de peso para la variable sexo?
En el caso de hombre:
\[wtloss=700 + 125*0=700\] Y para mujer:
\[wtloss=700 + 125*1=825\]
… que finalmente es lo mismo que los valores promedio de pérdida de peso para hombre y mujer que vimos antes al calcular los promedios simples. Por lo tanto:
##
## =======================================================
## Dependent variable:
## -----------------------------------
## wtloss
## (1) (2)
## -------------------------------------------------------
## sexMujer 125.000 136.364
## (222.146) (241.380)
##
## food 13.636
## (57.701)
##
## Constant 700.000*** 627.273
## (140.498) (342.175)
##
## -------------------------------------------------------
## Observations 10 10
## R2 0.038 0.046
## Adjusted R2 -0.082 -0.227
## Residual Std. Error 344.147 (df = 8) 366.450 (df = 7)
## F Statistic 0.317 (df = 1; 8) 0.168 (df = 2; 7)
## =======================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Lo que sucede aquí es que controlando por ingesta de alimentos (food), las mujeres pierden en promedio 136 más gramos que los hombres. ¿Cómo es posible que un control haga aumentar una diferencia? Veamos los promedios de ingesta de alimentos según sexo:
## # A tibble: 2 x 2
## sex Mean
## <fct> <dbl>
## 1 Hombre 5.33
## 2 Mujer 4.5
Los hombres en promedio ingieren más alimentos que las mujeres, y a pesar de eso sabemos que en general pierden menos peso. Por lo tanto, controlando por ingesta de alimentos hace aumentar la diferencia.
LA base exercise
contiene una variable del mismo nombre que contiee información sobr las horas de ejercicio:
## exercise$exercise
## Frequency Percent
## 0 3 30
## 2 4 40
## 4 3 30
## Total 10 100
Las horas de ejercicio pueden ser tomadas como una variable continua o categórica, lo que depende no solo de la distribución empírica de la variable sino principalmente de la decisión de quien investiga. Para este ejercicio la tomaremos como una variable categórica de tres niveles: bajo (0), medio (2) y alto (4).
Para poder incluir esta variable en la regresión como categórica en R la manera más simple es definirla como un factor. Primero necesitamos conocer la estructura de la variable, ya que puede venir previamente definida como factor:
## int [1:10] 0 0 0 2 2 2 2 4 4 4
En este caso, int
hace referencia a una variable contínua. Si la ingresamos de esta manera a la regresión:
##
## Call:
## lm(formula = wtloss ~ exercise, data = exercise)
##
## Coefficients:
## (Intercept) exercise
## 400 175
Este \(b\) nos dice que por cada nivel adicional de ejercicio, la perdida de peso promedio es de 175 gramos. Para transformarla a factor la función es as.factor
, lo que puede ser definido en la misma regresión:
##
## Call:
## lm(formula = wtloss ~ as.factor(exercise), data = exercise)
##
## Coefficients:
## (Intercept) as.factor(exercise)2 as.factor(exercise)4
## 400 350 700
La diferencia es que aquí aparecen 2 betas. El primero as.factor(exercise)2
que se refiere a 2 horas y as.factor(exercise)4
a 4 horas. Al ser ingresado como predictor categórico, al igual que en los dicotómicos del ejemplo anterior la interpretación se realiza en relación a la categoría de referencia. En este caso, sabemos que la variable tiene tres niveles de respuesta (0,2,4) y que al ser estimada como factor automáticamente R
deja como nivel de referencia al más bajo (0). Y, por lo tanto, los betas de un predictor estimado como categórico por defecto serán equivalentes a los niveles de la variable -1. En este caso, la interpretación es que el ejercitar 2 horas hace que en promedio la perdida de peso sea de 350 gramos más que no ejercitar nada (referencia), y para el caso de ejercitar 4 horas en promedio lleva a una pérdida de peso de 700 gramos en relación a no ejercitar nada.
Para entender esto, veamos los promedios de perdida de peso por la variable ejercicio:
## # A tibble: 3 x 2
## exercise Mean
## <int> <dbl>
## 1 0 400
## 2 2 750
## 3 4 1100
Con esta información analicemos con más detalle qué sucede con la estimación en la regresión. De acuerdo al modelo con exercise
estimado como categórico:
\[wtloss=400 + exercise_{2horas}350+exercise_{4horas}700\]
Es decir, para una persona que ejercita 2 horas el \(\widehat{Y}\) es 400+350=750, para quien ejercita 4 es 400+700=1100, y para quien ejercita 0 es solo 400, lo que es equivalente a los promedios simples calculados anteriormente. Y si dividimos la diferencia del nivel más bajo (400) y el más alto (1100) por los niveles teóricos de esta variable (4 horas) tenemos: 700/4=175, que sería la pérdida de peso por cada hora adicional de ejercicio, y que corresponde al coeficiente del predictor estimado como continuo.
Un par de cosas más:
val_lab(exercise$exercise) = num_lab("
0 Bajo
2 Medio
4 Alto
")
# Y transformar previamente a factor
exercise$exercise<-as.factor(exercise$exercise)
reg4 <- lm(wtloss ~ exercise, data=exercise)
reg4
##
## Call:
## lm(formula = wtloss ~ exercise, data = exercise)
##
## Coefficients:
## (Intercept) exerciseMedio exerciseAlto
## 400 350 700
Y/o establecer mejores etiquetas en reporte final con stargazer
stargazer(reg4,
type = "text",
covariate.labels=c("Ejercicio Medio", "Ejercicio Alto"),
dep.var.caption = "Pérdida de peso"
)
##
## ===============================================
## Pérdida de peso
## ---------------------------
## wtloss
## -----------------------------------------------
## Ejercicio Medio 350.000**
## (144.338)
##
## Ejercicio Alto 700.000***
## (154.303)
##
## Constant 400.000***
## (109.109)
##
## -----------------------------------------------
## Observations 10
## R2 0.746
## Adjusted R2 0.674
## Residual Std. Error 188.982 (df = 7)
## F Statistic 10.290*** (df = 2; 7)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
##
## Call:
## lm(formula = wtloss ~ relevel(exercise, ref = "Medio"), data = exercise)
##
## Coefficients:
## (Intercept)
## 750
## relevel(exercise, ref = "Medio")Bajo
## -350
## relevel(exercise, ref = "Medio")Alto
## 350
Cálculo de la desviación estándar de la diferencia de promedios:
## # A tibble: 2 x 2
## sex var
## <fct> <dbl>
## 1 Hombre 152000
## 2 Mujer 62500
## # A tibble: 2 x 2
## # Groups: sex [2]
## sex n
## <fct> <int>
## 1 Hombre 6
## 2 Mujer 4
## [1] 118437.5
Error estándar de la diferencia
## [1] 222.1463
## # A tibble: 2 x 2
## sex Mean
## <fct> <dbl>
## 1 Hombre 700
## 2 Mujer 825
## [1] 0.562693
Comparando
##
## ===============================================
## Dependent variable:
## ---------------------------
## wtloss
## -----------------------------------------------
## sexMujer 125.000
## (222.146)
##
## Constant 700.000***
## (140.498)
##
## -----------------------------------------------
## Observations 10
## R2 0.038
## Adjusted R2 -0.082
## Residual Std. Error 344.147 (df = 8)
## F Statistic 0.317 (df = 1; 8)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Intervalos de confianza
## [1] -2.306004 2.306004