Práctica Dirigida 5

FACULTAD DE CIENCIAS SOCIALES - PUCP

## Curso: POL 278 - Estadística para el análisis político 1 | Semestre 2025 - 1

Tablas de contingencia

Frecuencias observadas y esperadas

  • Frecuencia esperada: Estas son las frecuencia que deberían darse si las variables fueran independientes.

  • Frecuencia observada: Estas son las frecuencias reales que se observa en nuestra data.

Prueba Chi2

Chi2 es una prueba para estimar el grado de asociación entre variables categóricas:

Esto significa que una parte de la variabilidad de una variable puede ser explicada por otra variable.

Supuestos:

Para analizar asociación se requiere que el número de observaciones esperadas en cada celda de la tabla de contingencia debe ser suficientemente grande.

Para fines de este curso, al menos cada celda de la tabla de contingencia de frecuencias esperadas debe ser de 5.

Ten en cuenta que si estas condiciones no se cumplen, entonces la prueba podría no funcionar adecuadamente y los resultados de la prueba podrían no ser válidos.

Hipótesis:

Percepciones sobre la situación del Perú

¿Cuál es la percepción de la situación del país a partir de variables socioeconómicas ? 🤔

Para poder responder a la anterior pregunta se usará la base de datos del Latin American Public Opinion Project (LAPOP1) 2023. Este es un estudio de la Universidad de Vanderbilt que realiza encuestas de opinión pública en 34 países de América, incluyendo Norte, Centro, Sur y el Caribe. LAPOP mide actitudes, evaluaciones y experiencias en diversos temas, proporcionando datos comparativos de alta calidad sobre la democracia, la gobernabilidad y el desarrollo social en la región.

Cargamos la data:

library(rio)
library(dplyr)
lapop=import("peru2023.sav")
str(lapop)
## 'data.frame':    685 obs. of  11 variables:
##  $ estratopri   : num  1103 1103 1103 1103 1103 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ ur           : num  1 1 1 1 1 1 1 1 1 1 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ edad         : num  26 44 68 27 53 43 43 29 57 35 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ sexo         : num  2 2 1 1 1 1 2 2 2 1 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ situ_pais    : num  3 3 2 1 3 3 3 3 3 3 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ situ_personal: num  2 2 3 2 3 3 2 2 3 3 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ mejor_sistema: num  1 1 2 1 1 2 1 1 2 1 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ percep_dina  : num  3 2 3 4 3 3 4 3 3 3 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ calid_esc    : num  3 2 3 3 2 4 2 2 2 2 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ serv_medic   : num  3 2 3 3 2 4 2 3 2 2 ...
##   ..- attr(*, "format.spss")= chr "F8.2"
##  $ serv_agua    : num  2 2 2 2 4 2 2 3 2 3 ...
##   ..- attr(*, "format.spss")= chr "F8.2"

Diccionario de datos


¿Existe diferencia sobre la percepción económica actual entre hombres y mujeres?

PASO 0: Revisamos la estructura de las variables que nos interesan:

lapop = lapop %>%
  mutate(situ_pais = factor(situ_pais, levels = 1:3, labels = c("Mejor", "Igual", "Peor")))

str(lapop$situ_pais) #verificamos
##  Factor w/ 3 levels "Mejor","Igual",..: 3 3 2 1 3 3 3 3 3 3 ...

A nivel general, ¿qué percibe la mayoría sobre la situación económica del país?

resultados = lapop %>%
  count(situ_pais) %>%
  mutate(porcentaje = round(n / sum(n) * 100,2))
resultados
##   situ_pais   n porcentaje
## 1     Mejor  31       4.53
## 2     Igual 108      15.77
## 3      Peor 546      79.71

Variable nominal sexo: 1 - Hombre / 2 - Mujer

str(lapop$sexo)
##  num [1:685] 2 2 1 1 1 1 2 2 2 1 ...
##  - attr(*, "format.spss")= chr "F8.2"
table(lapop$sexo)
## 
##   1   2 
## 360 325

Les damos el formato adecuado

lapop$sexo = factor(lapop$sexo, levels = 1:2, labels = c("Hombre","Mujer"))
table(lapop$sexo)
## 
## Hombre  Mujer 
##    360    325

PASO 1: Tabla de contingencia

Los valores observados son los valores de nuestra tabla tal como la tenemos en nuestra base.

tabla1=table(lapop$situ_pais, lapop$sexo) #tabla simple..luego se usará en la prueba chi
tabla1
##        
##         Hombre Mujer
##   Mejor     24     7
##   Igual     69    39
##   Peor     267   279

SUPUESTO

Ten en cuenta que si te piden verificar el supuesto solo tienes que solicitar la tabla de frecuencias esperadas y ver que efectivamente todas las celdas tienen un número igual o mayor a 5.

chisq.test(tabla1)$expected
##        
##            Hombre     Mujer
##   Mejor  16.29197  14.70803
##   Igual  56.75912  51.24088
##   Peor  286.94891 259.05109

En este caso sí cumple el supuesto!😎

Creamos porcentajes por columna, para ello tenemos que agregar prop.table al comando anterior. El argumento de prop.table puede ser

tablapor1 = tabla1 %>%
           prop.table(2) %>%  
           round(2) #redondear el resultado a 2 decimales
tablapor1
##        
##         Hombre Mujer
##   Mejor   0.07  0.02
##   Igual   0.19  0.12
##   Peor    0.74  0.86

¿Existe diferencia con lo que vemos a nivel de cada subgrupo (hombre y mujer) respecto a lo que habíamos visto a nivel de toda la muestra?

PASO 2: Diagrama de barras apiladas

toPlot1 = as.data.frame(tablapor1) 
names(toPlot1) = c("Categoria", "Sexo", "Porcentaje")

Generamos el gráfico y lo solicitamos:

library(ggplot2)
library(ggsci) #para usar la paleta de colores de startrek

  ggplot(toPlot1, aes(x=Sexo, y=Porcentaje*100, fill=Categoria)) +
  geom_bar(position="stack", stat="identity")+ #Stack indica que son barras apiladas
  geom_text(aes(label=paste0(Porcentaje*100,"%")), 
            position = position_stack(vjust = 0.5), 
             size = 4,
             fontface="bold")+
  labs(x="Sexo", y="Porcentaje", fill="Situación económica")+
    scale_fill_startrek()+
  theme_minimal()

De forma preliminar ¿Hay diferencias entre la forma cómo se distribuye la variable “Situación Económica” en cada subgrupo (hombre y mujer)?

PASO 3: Prueba Chi cuadrado

Para hacer el test ingresamos la tabla de frecuencias

chisq.test(tabla1)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla1
## X-squared = 16.174, df = 2, p-value = 0.0003076

De acuerdo al p-value obtenido en la prueba de hipótesis de Chi2, al ser menor de 0.05, podemos rechazar la hipótesis nula (Las variables son independientes).

Por lo tanto, concluimos existe dependencia entre las variables escogidas: sexo y situación económica actual. Esto quiere decir que el ser hombre o mujer se refleja en la percepción de la situación económica del país.


¿Existe relación entre zona de vivienda y la percepción de la gestión de Boluarte?

PASO 0: Revisamos la estructura de las variables que nos interesan:

Para este ejercicio creemos solo tres grupos “Buena” (1/Muy bueno y 2/Bueno), “Ni buena ni mala” (3/Ni bueno ni malo) y “Mala” (4/Malo, 5/Muy malo)

str(lapop$percep_dina)
lapop = lapop %>% 
  mutate(percep_dina2=case_when(percep_dina<=2 ~ "Buena",
                                percep_dina==3 ~ "Ni buena ni mala",
                                T ~ "Mala"))

lapop$percep_dina2 = as.factor(lapop$percep_dina2)

Estrato: 1-Urbano/2-Rural

lapop$ur = factor(lapop$ur, 
                      levels = c(1:2),
                      labels = c("Urbano","Rural"))
table(lapop$ur)
## 
## Urbano  Rural 
##    536    149

PASO 1: Tabla de contingencia

Los valores observados son los valores de nuestra tabla tal como la tenemos en nuestra base

tabla2 = table(lapop$percep_dina2, lapop$ur)
tabla2
##                   
##                    Urbano Rural
##   Buena                39     5
##   Mala                292   106
##   Ni buena ni mala    205    38

Es recomendable calcular los porcentajes sobre la variable sociodemográfica o aquella que antecede a la otra. En este caso, esa variable sería estrato (urbano/rural), por ello deberíamos calcular el porcentaje sobre ella. Esto quiere decir que todas las percepciones deben sumar 100% para urbano y 100% para rural.

tablapor2 = tabla2 %>%
  prop.table(2) %>%  # porcentaje por columna, para calcular por fila indicar (1)
  round(3)
tablapor2
##                   
##                    Urbano Rural
##   Buena             0.073 0.034
##   Mala              0.545 0.711
##   Ni buena ni mala  0.382 0.255

SUPUESTO

Ten en cuenta que si te piden verificar el supuesto sólo tienes que solicitar la tabla de frecuencias esperadas y ver que efectivamente todas las celdas tienen un número igual o mayor a 5.

chisq.test(tabla2)$expected
##                   
##                      Urbano     Rural
##   Buena             34.4292  9.570803
##   Mala             311.4277 86.572263
##   Ni buena ni mala 190.1431 52.856934

En este caso también cumple el supuesto!

PASO 2: Diagrama de barras apiladas

Preparamos la data para graficar:

toPlot2 = as.data.frame(tablapor2) 
names(toPlot2) = c("Categoria", "Estrato", "Porcentaje")

Generamos el gráfico y lo solicitamos:

library(tayloRswift)
  ggplot(toPlot2, aes(x=Estrato, y=Porcentaje*100, fill=Categoria)) +
  geom_bar(position="stack", stat="identity")+
  geom_text(aes(label=paste(Porcentaje*100,"%")), 
            position = position_stack(vjust=0.5), 
             size = 3, fontface="bold")+
  labs(x="Estrato", y="Categoría", fill="Confianza")+
    scale_fill_taylor(palette="lover")+
  theme_bw()

PASO 3: Prueba Chi cuadrado

chisq.test(tabla2)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla2
## X-squared = 13.698, df = 2, p-value = 0.00106

🗯️ De acuerdo al p-value obtenido en la prueba de hipótesis de Chi2, al ser menor de 0.05, podemos rechazar la hipótesis nula (Las variables son independientes).

Por lo tanto, concluimos que la variable percepción de la gestión de Dina y el estrato de residencia sí se encuentran asociadas. Una mayor proporción de los residentes de las zonas rurales califican como mala a la gestión de la presidenta; mientras que, la zona urbana se relaciona con una mayor proporción de opiniones neutrales en comparación.

Ejercicios en clase:

1. Analizar si existe asociación entre las variables satisfacción con la de situación de las escuelas (calid_esc) y edad (agrupado)
Para ello debes agrupar edad, de tal manera que las categorías sean:

  • De 18 a 25

  • De 26 a 40

  • De 40 a 60

  • Más de 60

Hint: Usa case_when y establece los intervalos, no olvides que la estructura es case_when(condición ~ valor, condicion2 ~ valor2,…)

  1. Analizar si existe dependencia entre la variable estrato y satisfacción con la situación de servicios médicos (serv_medic)

Ejercicios para casa:

  1. Analizar la asociación entre la región (estratropri) (Agrupar y obtener Costa/Sierra/Selva/Lima Metropolitana) y la satisfacción con la calidad del servicio de agua (serv_agua).

    1101/1102 - Costa

    1103 - Lima Metropolitana

    1104 - Selva

    1105/1106/1107 - Sierra

  2. Crea un indice aditivo de la satisfacción con servicios públicos que vaya del 0 al 10. Previamente, debes invertir el sentido de las variables: calid_esc, serv_medic y serv_agua. Lo que era 4, ahora debe ser 1, lo que era 3 ahora 2, lo que era 2 ahora 3 y lo que era 1 ahora 4. Así, lo que se convierta en 4 medida la satisfacción y no la insatisfacción. Luego de ello, lo que supere el valor de en el indicador será “Satisfecho con servicios públicos” o 5 o menos será “Insatisfecho con los servicios públicos”, esta nueva variable será llamada ind_agrupado. Analiza si ind_agrupado se encuentra asociado con el sexo del encuestado.


  1. https://www.vanderbilt.edu/lapop/ab2023/AB2023-Pulso-de-la-democracia-final-20240219.pdf↩︎