Análisis de Datos de Encuestas en R
Análisis de Datos de Encuestas en R
Datos de encuestas
Se puede ver que con el MAS una gran parte de la muestra está concentrada
en las dos ciudades más pobladas (Philadelphia y Pittsburgh). Otras dos
ciudades en verde (con poca población) no tienen información.
Muestreo Aleatorio Estratificado (MAE)
[1] 20293 78
WTMEC2YR es la variable que contiene a cuantas personas representa cada
persona muestreada.
library(dplyr)
summarize(NHANESraw, N_hat = sum(WTMEC2YR))
# A tibble: 1 x 1
N_hat
<dbl>
1 608534400.
NHANES
# A tibble: 3 x 1
SDMVPSU
<int>
1 1
2 2
3 3
Visualizando el impacto de la ponderación en el análisis
Supongamos que se desea estimar la distribución de la población por raza:
Visualizando el impacto de la ponderación en el análisis
# A tibble: 5 x 3
Race1 Freq Prop
<fct> <int> <dbl>
1 White 7393 0.364
2 Black 4640 0.229
3 Mexican 3739 0.184
4 Other 2312 0.114
5 Hispanic 2209 0.109
Analisis de variables categóricas: Gráfica de una variable
Hispanic
Other
Race1
Mexican
Black
White
Diabetes
No Yes
275814034 24335536
Analisis de variables categóricas: pregunta de investigación
Diabetes
Race1 No Yes
Black 32697528 4003497
Hispanic 17258245 1370393
Mexican 27886500 2081657
White 177088354 14708094
Other 20883407 2171895
Por ejemplo, se estima que más de 4 millones de personas de color negro se
les ha diagnosticado diabetes, mientras que a más de 32 millones no.
Analisis de variables categóricas: gráfica
Antes de graficar la tabla, debemos transformarla en un marco de datos donde
cada fila represente una de las entradas de la tabla de contingencia. Ahora
tenemos tres columnas, Race1, Diabetes y Freq, el recuento estimado.
tab_w <- [Link](tab_w)
tab_w
Other
White
Diabetes
Race1
Mexican No
Yes
Hispanic
Black
Esto crea un gráfico de barras apiladas donde apilamos las barras de diabetes
dentro de cada grupo racial. Observe que para facilitar la lectura, se invierte
las coordenadas. Podemos hacer un par de observaciones.
▶ Primero, cada barra tiene más rosa que turqueza porque, para cada grupo
racial, es más probable que uno no haya sido diagnosticado con diabetes.
▶ En segundo lugar, la altura de las barras refleja los recuentos estimados
en cada grupo racial. Por tanto, la blanca es la barra más alta ya que es
el grupo más común.
Analisis de variables categóricas: gráfica
Other
White
Diabetes
Race1
Mexican No
Yes
Hispanic
Black
Como vimos en el último gráfico, parece haber una relación entre la raza de
una persona y la probabilidad de que sea diagnosticado con diabetes. Esto se
puede aseverar observando el gráfico de que las tasas de prevalencia difieren
según cada grupo. Pero recuerde, estas estimaciones solo se basan en una
muestra aleatoria de la población de EE. UU. y, por lo tanto, tal vez la
asociación que estamos observando podría deberse puramente al azar.
Ahora es necesario realizar una prueba estadística formal para determinar, si
tenemos o no evidencia de una asociación entre la raza y diabetes.
Inferencia: prueba de Chi-Cuadrado
# A tibble: 14,390 x 1
DaysPhysHlthBad
<int>
1 0
2 2
3 20
4 2
5 0
6 0
7 0
Análisis de variables cuantitativas: Explorando una variable
mean SE
DaysPhysHlthBad 3.3315 0.1128
svytotal(x = ~DaysPhysHlthBad,
design = NHANES_design, [Link] = TRUE)
total SE
DaysPhysHlthBad 7.65e+08 35784824
Análisis de variables cuantitativas: media, total y mediana
Aunque para este ejemplo probablemente estemos más interesados en la
mediana. Para hacer esto, usaremos svyquantile() y agregaremos quantiles
= 0.5, ya que la mediana es el cuantil número 50. En este caso, la mediana
es igual a 0, lo que significa que estimaríamos que la mayoría de los
estadounidenses no tienen ningún día de mala salud en un mes determinado.
svyquantile(x = ~DaysPhysHlthBad,
design = NHANES_design, [Link] = TRUE,
quantiles = 0.5)
$DaysPhysHlthBad
quantile ci.2.5 ci.97.5 se
0.5 0 0 1 0.2457588
attr(,"hasci")
[1] TRUE
attr(,"class")
[1] "newsvyquantile"
Análisis de variables cuantitativas: por grupos
En las estadísticas de encuestas, también es común estimar cantidades dentro
de diferentes subgrupos de la población. Para una variable cuantitativa, como
DaysPhysHlthBad, nuestros subgrupos podrían ser fumadores y no
fumadores, donde queremos estimar el número promedio de días de mala
salud para ambos grupos. Para hacer esto, usaremos la función svyby().
SmokeNow DaysPhysHlthBad se
No No 3.908984 0.1996290
Yes Yes 4.951750 0.2346189
Vemos que los fumadores tienen, en promedio, un día más de mala salud física
que los no fumadores en un mes determinado.
Análisis de variables cuantitativas: por grupos
SmokeNow Age se
1 No 54.57933 0.6249442
2 Yes 42.76574 0.4087738
Análisis de variables cuantitativas: tabla de medias
ggplot(data = tab,
mapping = aes(x = SmokeNow, y = DaysPhysHlthBad)) +
geom_col() +
labs(y = "Número de días malos de salud", x = "Fumador?")
5
4
Número de días malos de salud
No Yes
Fumador?
Análisis de variables cuantitativas: gráfico de barras con error
ggplot(data = tab,
mapping = aes(x = SmokeNow, y = DaysPhysHlthBad,
ymin = lower, ymax = upper)) +
geom_col(fill = "blue") + geom_errorbar(width = 0.5) +
labs(y = "Número de días malos de salud",x = "Fumador?")
4
Número de días malos de salud
No Yes
Fumador?
Análisis de variables cuantitativas: histograma
Es posible que queramos mostrar algo más que la tendencia central de una
variable de encuesta. Por ejemplo, tal vez queramos ver la forma y
distribución del número de días de mala salud. Para ello podemos crear un
histograma o un gráfico de densidad.
ggplot(data = NHANESraw,
mapping = aes(x = DaysPhysHlthBad, weight = WTMEC4YR)) +
geom_histogram(binwidth = 1, color = "white") +
labs(x = "Number of Bad Health Days in a Month")
1.5e+08
1.0e+08
count
5.0e+07
0.0e+00
0 10 20 30
Análisis de variables cuantitativas: histograma
Un gráfico de densidad también nos dará una sensación de forma. Dado que
el área bajo la curva representa probabilidades, debe integrarse a uno y, por lo
tanto, tenemos que realizar algunos pasos de procesamiento de datos antes de
crear la gráfica.
Primero, eliminaremos los NA de nuestra variable mediante filter() y luego
agregaremos una columna de pesos que sume 1. ¡Observa que luego podemos
canalizar estos datos directamente a ggplot()! ¡Reemplazamos
geom_histogram con geom_density y tenemos nuestra trama! bw es un
argumento importante de geom_density ya que controla la suavidad de la
curva.
Análisis de variables cuantitativas: gráfico de densidad
NHANESraw %>%
filter() %>%
mutate(WTMEC4YR_std = WTMEC4YR/sum(WTMEC4YR)) %>%
ggplot(mapping = aes(x = DaysPhysHlthBad,
weight = WTMEC4YR_std)) +
geom_density(bw = 0.6, fill = "blue") +
labs(x = "Número de días de mala salud en un mes")
0.4
0.3
density
0.2
0.1
0.0
0 10 20 30
Número de días de mala salud en un mes
Inferencia con variables cuantitativas
Hemos resumido los datos de encuesta y los hemos graficado. Pero ¿qué pasa
con la inferencia para una variable cuantitativa? Exploremos cómo comparar
las medias de una variable de encuesta cuantitativa para dos subgrupos de la
población.
Pregunta de investigación: ¿Existe evidencia convincente de que el
número promedio de días de mala salud es diferente entre fumadores y
no fumadores?
Al observar las estadísticas descriptivas, parece que la respuesta es “¡Sí!” Pero
recuerde, el gráfico de barras contiene estimaciones basadas en la muestra y
no en los promedios reales de todos los fumadores y no fumadores en Estados
Unidos. Y si bien las barras con error nos dan una sensación de incertidumbre,
no pueden responder nuestra pregunta.
Necesitamos realizar una prueba de hipótesis.
Inferencia con variables cuantitativas: prueba-t (t-test)
Como tenemos una variable cuantitativa y una variable categórica con dos
grupos, debemos ejecutar una prueba-t de dos muestras.
Hipótesis nula: El número promedio mensual de días de mala salud es el
mismo para fumadores y no fumadores.
Hipótesis alternativa: La conjetura planteada sería, de que los fumadores
tienen un número promedio mensual diferente de días de mala salud que los
no fumadores.
El estadístico de prueba-t es la diferencia en las medias de la muestra
ponderada de la encuesta dividida por el error estándar de la diferencia de
medias.
𝑦𝑓𝑢𝑚𝑎𝑑𝑜𝑟𝑒𝑠
̄ − 𝑦𝑛𝑜𝑓𝑢𝑚𝑎𝑑𝑜𝑟𝑒𝑠
̄
𝑡=
𝑆𝐸
Inferencia con variables cuantitativas: prueba-t (t-test)
La función R que usaremos es svyttest(). Usamos svyttest() y no la función
R [Link]() porque svyttest() calcula una estadística de prueba que toma en
cuenta el complejo diseño de muestreo.
Design-based t-test
# A tibble: 484 x 2
AgeMonths HeadCirc
<int> <dbl>
1 3 42.7
2 4 42.8
3 2 38.8
4 0 36
5 5 42.7
Modelamiento de variables cuantitativas: visualización
El gráfico habitual para visualizar la relación entre dos variables cuantitativas
es el diagrama de dispersión. Aquí asignamos AgeMonths a x y HeadCirc a
y. Vemos que a medida que aumenta la edad, el tamaño de la cabeza
también aumenta y de forma bastante lineal.
ggplot(data = bebes,
mapping = aes(x = AgeMonths, y = HeadCirc)) +
geom_point()
45
HeadCirc
40
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: visualización
Un problema es que, dado que la edad está en meses, el apilamiento es un
problema en eje x para estos datos, solo se especifica el ancho y no el alto.
Entonces los puntos solo se moverán un poco hacia la izquierda o hacia la
derecha, no hacia arriba o hacia abajo.
ggplot(data = bebes,
mapping = aes(x = AgeMonths, y = HeadCirc)) +
geom_jitter(width = 0.3, height = 0)
45
HeadCirc
40
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: visualización
Sin embargo, el principal problema de nuestro diagrama de dispersión es que
no incorpora el diseño muestral. Agreguemos la variable de peso de la
encuesta, WTMEC4YR, a nuestro conjunto de datos.
Esto nos dice que el primer bebé representa 12.915 bebés mientras que el
tercero sólo representa 2.359. Queremos tener en cuenta estas diferencias de
peso muestral en nuestro diagrama de dispersión.
# A tibble: 484 x 3
AgeMonths HeadCirc WTMEC4YR
<int> <dbl> <dbl>
1 3 42.7 12915.
2 4 42.8 12791.
3 2 38.8 2359.
4 0 36 4306.
Modelamiento de variables cuantitativas: visualización
Una forma de hacerlo es asignando los pesos a la estética del tamaño.
Entonces, el tamaño de las burbujas es proporcional al peso, donde una
burbuja más grande representa un peso de encuesta mayor. La última capa
especifica que no quiero una leyenda. Esto se llama diagrama de burbujas.
ggplot(data = bebes,
mapping = aes(x=AgeMonths, y=HeadCirc, size=WTMEC4YR)) +
geom_jitter(width = 0.3, height = 0) + guides(size = "none")
45
HeadCirc
40
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: visualizar tendencias
Volviendo al diagrama de dispersión de la edad versus circunferencia de la
cabeza, donde hay una clara tendencia positiva entre estas variables. Sin
embargo, ¿dónde se encuentra exactamente la línea de mejor ajuste?
Agreguemos eso a la trama.
ggplot(data = bebes,
mapping = aes(x = AgeMonths, y = HeadCirc, alpha = WTMEC4YR)) +
geom_jitter(width = 0.3, height = 0) + guides(alpha = "none") +
geom_smooth(method = "lm", se = FALSE,
mapping = aes(weight = WTMEC4YR))
45
HeadCirc
40
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: visualizar tendencias
Podemos agregar la línea de mejor ajuste agregando una capa más a nuestro
ggplot(), geom_smooth. Luego especificamos que el método es igual a “lm”
para el modelo lineal y se = FALSO, para no asignar el error estándar. La
última pieza es agregar un nuevo argumento estético que no necesitábamos
para nuestro geom_jitter: weight = WTMEC4YR, el peso es igual a los
pesos de la encuesta.
# A tibble: 484 x 4
AgeMonths HeadCirc WTMEC4YR Gender
<int> <dbl> <dbl> <fct>
1 3 42.7 12915. male
2 4 42.8 12791. female
3 2 38.8 2359. female
4 0 36 4306. female
5 5 42.7 2922. female
6 2 41.9 5561. male
Modelamiento de variables cuantitativas: visualizar tendencias
Y ahora para incorporar el género a nuestra trama, lo asignaremos al color.
Observe que ahora tenemos dos líneas de tendencia, una para cada género.
ggplot(data = bebes,
mapping = aes(x=AgeMonths, y=HeadCirc, alpha=WTMEC4YR,
color=Gender)) +
geom_jitter(width=0.3, height=0) + guides(alpha="none") +
geom_smooth(method = "lm", se = FALSE,
mapping = aes(weight = WTMEC4YR))
45
Gender
HeadCirc
female
40
male
35
0 2 4 6
Modelamiento de variables cuantitativas: regresión lineal
Ahora que agregamos la línea de regresión a nuestro diagrama de dispersión,
que resalta la relación lineal positiva entre la edad y el tamaño de la cabeza.
En consecuancia podemos usar esta línea para predecir el tamaño de la cabeza
de un bebé determinado.
Por ejemplo, ¿cuál sería el tamaño de la cabeza de un bebé de 4 meses?
45
HeadCirc
40
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: regresión lineal
Según nuestro gráfico, predeciríamos que un bebé de 4 meses tendría un
tamaño de cabeza de alrededor de 42,5 centímetros. Si bien estas líneas de
referencia naranjas fueron útiles para hacer nuestra predicción, sería más fácil
usar la ecuación de regresión directamente. Entonces, ¿cómo es la ecuación
de regresión?
Modelamiento de variables cuantitativas: ecuación de la
regresión
La ecuación de regresión lineal es una línea recta, donde a es la intersección
con el eje Y, y b es la pendiente, y 𝑦 ̂ es el valor de predicción para 𝑦 basado
en un valor dado de 𝑥.
Pero, ¿cómo sabemos a qué equivalen a y b? Como mencionamos antes, se
eligen de modo que la distancia al cuadrado entre 𝑦 e 𝑦,̂ multiplicado por el
peso de la encuesta, sea pequeña.
▶ La ecuación de la regresión está dado por:
𝑦 ̂ = 𝑎 + 𝑏𝑥
𝑛
∑ 𝑤𝑖 (𝑦𝑖 − 𝑦𝑖̂ )
𝑖=1
Modelamiento de variables cuantitativas: ajustando la
regresión
Call:
svyglm(formula = HeadCirc ~ AgeMonths, design = NHANES_design)
Survey design:
svydesign(data = NHANESraw, strata = ~SDMVSTRA, id = ~SDMVPSU,
nest = TRUE, weights = ~WTMEC4YR)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 38.13757 0.20043 190.28 <2e-16 ***
AgeMonths 1.07081 0.05927 18.07 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
𝑦 ̂ = 𝑎 + 𝑏𝑥
𝐸(𝑦) = 𝐴 + 𝐵𝑥
Una pregunta inferencial común que podríamos hacer es ¿están nuestras dos
variables relacionadas linealmente?. Esto es lo mismo que preguntar si 𝐵
es distinto de [Link] esa pregunta en hipótesis nulas y alternativas.
Modelamiento de variables cuantitativas: inferencia con
regresión
Hipótesis nula: La circunferencia de la cabeza no está relacionada
linealmente con la edad, es decir (𝐵 = 0).
Hipótesis alternativa: La circunferencia de la cabeza SI está relacionada
linealmente con la edad, es decir (𝐵 ≠ 0).
mod <- svyglm(HeadCirc ~ AgeMonths, design = NHANES_design)
summary(mod)
𝑏
El estadístico de prueba: 𝑡 = 𝑆𝐸
Modelamiento de variables cuantitativas: inferencia con
regresión
45
Gender
HeadCirc
female
40
male
35
0 2 4 6
AgeMonths
Modelamiento de variables cuantitativas: regresión
multivariante
𝐸(𝑦) = 𝐵0 + 𝐵1 𝑥1 + 𝐵2 𝑥2 + ... + 𝐵𝑝 𝑥𝑝
𝐸(𝑦) = 𝐵0 + 𝐵1 𝑥1 + 𝐵2 𝑥2
Modelamiento de variables cuantitativas: regresión
multivariante
# A tibble: 6 x 4
AgeMonths HeadCirc WTMEC4YR Gender
<int> <dbl> <dbl> <fct>
1 3 42.7 12915. male
2 4 42.8 12791. female
3 2 38.8 2359. female
4 0 36 4306. female
5 5 42.7 2922. female
6 2 41.9 5561. male
Modelamiento de variables cuantitativas: regresión
multivariante
# A tibble: 4 x 5
AgeMonths HeadCirc WTMEC4YR Gender Gender2
<int> <dbl> <dbl> <fct> <dbl>
1 3 42.7 12915. male 1
2 4 42.8 12791. female 0
3 2 38.8 2359. female 0
4 0 36 4306. female 0
Modelamiento de variables cuantitativas: regresión
multivariante
Ahora nuestra ecuación de regresión tiene dos 𝑥: 𝑥1 para la edad y 𝑥2 para el
género. Para los hombres, 𝑥2 = 1, por lo que su intercepto es 𝐵0 + 𝐵2 con
una pendiente de 𝐵1 . Y para las mujeres, 𝑥2 = 0, por lo que su intercepto es
sólo 𝐵0 .
𝐸(𝑦) = 𝐵0 + 𝐵1 𝑥1 + 𝐵2 𝑥2
𝐸(𝑦) = (𝐵0 + 𝐵2 ) + 𝐵1 𝑥1
𝐸(𝑦) = 𝐵0 + 𝐵1 𝑥1
Modelamiento de variables cuantitativas: regresión
multivariante
Call:
svyglm(formula = HeadCirc ~ AgeMonths + Gender, design = NHANES_design)
Survey design:
svydesign(data = NHANESraw, strata = ~SDMVSTRA, id = ~SDMVPSU,
nest = TRUE, weights = ~WTMEC4YR)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.48508 0.18320 204.613 < 2e-16 ***
AgeMonths 1.08658 0.05379 20.200 < 2e-16 ***
Gendermale 1.15034 0.16298 7.058 6.3e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Sin embargo, las pruebas de hipótesis asociadas con la tabla de coeficientes ahora ha
cambiado. Ahora las hipótesis preguntan si esa variable debería incluirse o no en el
modelo que contiene los otros predictores.
Hipótesis nula: dado la edad en el modelo, el género no debe incluirse (𝐵2 = 0).
Hipótesis altervativa: dado la edad en el modelo, el género debe incluirse (𝐵2 ≠ 0).
𝑏2
Estadístico de prueba: 𝑡 = 𝑆𝐸
Modelamiento de variables cuantitativas: regresión
multivariante