Actividad χ²: reporte y código en R

info
recursos
Encuentra los errores en un reporte de χ² y corrige un script de R para reproducir sus resultados.
Posted

miércoles octubre 21, 2026 at 12:00 AM

Reporte de \(\chi^2\)

Un estudiante quería saber si existe una asociación estadísticamente significativa en la población entre sexo y situación laboral. Para ello, construyó la siguiente tabla de contingencia. Cada celda muestra la frecuencia observada, la frecuencia esperada (entre paréntesis) y el porcentaje por fila.

Sexo No ocupado Ocupado Total
Hombre 70
(79,2)
38,9 %
110
(100,8)
61,1 %
180

100,0 %
Mujer 106
(96,8)
48,2 %
114
(123,2)
51,8 %
220

100,0 %
Total 176

44,0 %
224

56,0 %
400

100,0 %

Luego, realizó la prueba de \(\chi^2\) con chisq.test

chisq.test(tabla)

    Pearson's Chi-squared test with Yates' continuity correction

data:  tabla
X-squared = 3.1029, df = 1, p-value = 0.07815

A partir de estos resultados, redactó el siguiente reporte:

Para evaluar si el sexo se asocia con la situación laboral se aplicó una prueba de χ² a una muestra de 400 personas. El 61,1 % de los hombres está ocupado, frente al 51,8 % de las mujeres. El estadístico obtenido fue χ² = 3,10, con 2 grados de libertad. Como el valor crítico para α = 0,05 es 1,96 y el χ² obtenido es mayor, se rechaza la hipótesis nula de independencia.

¿Qué errores encuentras en el reporte? ¿Cómo los corregirías?

Pasa el cursor sobre las partes marcadas en rojo, o haz clic en ellas, para ver cuál es el error.

Para evaluar si el sexo se asocia con la situación laboral se aplicó una prueba de χ² a una muestra de 400 personas. El 61,1 % de los hombres está ocupado, frente al 51,8 % de las mujeres. El estadístico obtenido fue χ² = 3,10, con 2 grados de libertadEn una tabla 2 × 2 los grados de libertad son (2 − 1) × (2 − 1) = 1, como indica también el output (df = 1).. Como el valor crítico para α = 0,05 es 1,961,96 es el valor crítico de la distribución z, no de χ². Para χ² con 1 grado de libertad y α = 0,05, el valor crítico es 3,84. y el χ² obtenido es mayor, se rechaza la hipótesis nulaCon el valor crítico correcto, la conclusión se invierte: χ² = 3,10 es menor que 3,84, por lo que no se rechaza H₀. Además, p = 0,078 es mayor que 0,05: ambos criterios siempre deben llevar a la misma decisión. de independencia.

Una redacción correcta podría ser:

Se aplicó una prueba de χ² para evaluar la asociación entre sexo y situación laboral en una muestra de 400 personas. El 61,1 % de los hombres está ocupado, frente al 51,8 % de las mujeres. El estadístico obtenido (χ² = 3,10, gl = 1, p = 0,078) no supera el valor crítico de 3,84, por lo que no se rechaza la hipótesis nula de independencia. Es decir, no hay evidencia suficiente para afirmar que el sexo y la situación laboral estén asociados en la población, con un 95 % de confianza.

Para tener en cuenta

Aunque la diferencia no es significativa, a nivel descriptivo se observa que los hombres tienen 9,3 puntos porcentuales más de ocupación que las mujeres. Tomando esto en consideración:

  1. ¿Qué pasaría si la muestra fuera más grande?
  2. ¿Existe alguna forma de medir la fuerza de la asociación entre las dos variables?

1. ¿Qué pasaría si la muestra fuera más grande?

Probablemente la asociación resultaría significativa. Para comprobarlo, podemos multiplicar todas las frecuencias de la tabla por 2. Así se duplica la muestra, pero los porcentajes por fila no cambian:

tabla_doble <- tabla * 2
tabla_doble
        ocupado
sexo     No ocupado Ocupado
  Hombre        140     220
  Mujer         212     228
# Los porcentajes por fila son los mismos que en la tabla original
round(prop.table(tabla_doble, margin = 1) * 100, 1)
        ocupado
sexo     No ocupado Ocupado
  Hombre       38.9    61.1
  Mujer        48.2    51.8
chisq.test(tabla_doble)

    Pearson's Chi-squared test with Yates' continuity correction

data:  tabla_doble
X-squared = 6.5675, df = 1, p-value = 0.01039

Con n = 800 se obtiene χ² = 6,57 y p = 0,010. Ahora sí se rechazaría H₀, aunque la diferencia de 9,3 puntos porcentuales entre hombres y mujeres es la misma.

Es decir, la significación estadística depende del tamaño de la muestra. Con una muestra muy grande, incluso una asociación débil resulta significativa; con una muestra pequeña, una asociación algo más fuerte puede no serlo.

2. ¿Existe alguna forma de medir la fuerza de la asociación?

Sí. Como el χ² y el valor p dependen del tamaño de la muestra, no sirven para describir qué tan fuerte es la asociación. Para eso se usan medidas de tamaño de efecto que no dependen de n, como el coeficiente φ (para tablas 2 × 2) y la V de Cramer (para tablas de cualquier tamaño). Ambas van de 0 (sin asociación) a 1 (asociación perfecta). En este caso, \(\varphi\) = 0,1, por lo que se considera una asociación débil.

Ejercicio adicional: reproduzca los resultados en R

Otro estudiante se hizo la misma pregunta y entregó un script con el siguiente código:

# 1. Cargar paquetes
pacman::p_load(sjplot, gmodels, dplyr)

# 2. Tabla de contingencia con porcentajes por fila
Encuesta %>%
  sjtab(sexo ocupado, show.col.prc = TRUE)

# 3. Frecuencias esperadas
gmodels::CrossTable(encuesta$sexo, encuesta$ocupado,
                    expected = true)

# 4. Prueba de chi cuadrado
chisq.test(encuesta$ocupado)

Sin embargo, este código contiene varios errores.

¿Puedes encontrar los errores?

Su objetivo es lograr que el código funcione en R y reproduzca exactamente los resultados del reporte.

Instrucciones:

  1. En un script, cree la siguiente base de datos
# 0. Creamos un dataset con datos ficticios para fines del ejercicio
# sexo: Hombre / Mujer
# ocupado: 0 = No ocupado, 1 = Ocupado, -88 = No sabe / No responde
encuesta <- data.frame(
  sexo = factor(rep(c("Hombre", "Mujer"),
                    times = c(70 + 110 + 6, 106 + 114 + 9)),
                levels = c("Hombre", "Mujer")),
  ocupado = c(rep(c(0, 1, -88), times = c(70, 110, 6)),
              rep(c(0, 1, -88), times = c(106, 114, 9)))
)
  1. Luego copie el código del estudiante e intente ejecutarlo. Corrija el código hasta que corra hasta el final sin errores.

  2. Verifique los resultados

TipVerifique los resultados

Sabrá que logró reproducir el código cuando obtenga los siguientes resultados:

  • Una tabla de contingencia de 2 × 2, con las mismas frecuencias que muestra el reporte.
  • Un 61,1 % de hombres ocupados y un 51,8 % de mujeres ocupadas.
  • Una prueba de χ² con X-squared = 3.1029, df = 1 y p-value = 0.07815.

Si alguno de estos resultados no coincide, todavía queda algún error por corregir.

Error Tipo Corrección
sjplot Detiene el código: R distingue entre mayúsculas y minúsculas, por lo que no encuentra el paquete y luego no reconoce la función sjtab(). sjPlot
Encuesta Detiene el código: «objeto no encontrado». encuesta
Falta una coma entre las variables Detiene el código: «unexpected symbol». sjtab(sexo, ocupado, show.row.prc = TRUE)
show.col.prc=TRUE No detiene el código en R, sino que calcula los porcentajes de las columnas en lugar de las filas sjtab(sexo, ocupado, show.row.prc = TRUE)
expected = true Detiene el código: R busca un objeto llamado true. expected = TRUE, en mayúsculas
chisq.test() con una sola variable Detiene el código: «all entries of ‘x’ must be nonnegative and finite». La prueba necesita una tabla de contingencia con las dos variables, no una sola variable. chisq.test(table(encuesta$sexo, encuesta$ocupado))
El código −88 («no sabe / no responde») se trata como una categoría válida No detiene el código en R, pero genera una tabla de 2 × 3, y el χ² se calcula con una categoría que no es válida. Recodificar −88 como NA antes del análisis.

Código corregido:

# 1. Cargar paquetes
pacman::p_load(sjPlot, gmodels, dplyr)

# 2. Recodificar "No sabe / No responde" como valor perdido
encuesta$ocupado[encuesta$ocupado == -88] <- NA

# 3. Tabla de contingencia con porcentajes por fila
encuesta %>%
  sjtab(sexo, ocupado, show.row.prc= TRUE)

# 4. Frecuencias esperadas
gmodels::CrossTable(encuesta$sexo, encuesta$ocupado,
                    expected = TRUE)

# 5. Prueba de chi cuadrado
chisq.test(table(encuesta$sexo, encuesta$ocupado))

# O bien,

# Crear el objeto previamente
tabla <- table(encuesta$sexo, encuesta$ocupado) 
# Luego aplicar el test sobre el objeto
chisq.test(tabla)