Análisis de variables categóricas con R

Francisco García García (2014-17-12)


0. Introducción

1. Tablas de contingencia

2. Prueba chi-cuadrado

3. Ejercicios

4. Bibliografía y enlaces de interés





0. Introducción

Para conocer la relación entre dos variables categóricas utilizaremos:



1. Tablas de contingencia

Comenzamos leyendo la base de datos riesgos:

datos <- read.csv("riesgos.csv", header = T, sep = "\t")

Echamos un vistazo a la estructura de los datos:

str(datos)
#> 'data.frame':    91 obs. of  10 variables:
#>  $ id        : int  2 3 6 7 8 10 11 12 14 15 ...
#>  $ contrato  : int  3 1 5 1 3 2 1 3 1 1 ...
#>  $ jornada   : Factor w/ 2 levels "completa","parcial": 1 1 1 1 1 1 1 1 1 1 ...
#>  $ turno     : int  1 1 1 1 1 1 1 1 3 1 ...
#>  $ carfisi   : Factor w/ 2 levels "no","sí": 1 1 2 2 2 1 1 1 1 1 ...
#>  $ carpsiqui : Factor w/ 2 levels "no","sí": 1 1 1 1 1 2 1 1 2 2 ...
#>  $ expquímica: Factor w/ 2 levels "no","sí": 1 1 1 1 2 1 1 1 1 1 ...
#>  $ edad      : int  33 37 35 30 30 32 27 33 31 31 ...
#>  $ peso      : num  74 74 67 57 69 56 74 76 65 NA ...
#>  $ talla     : num  155 170 170 164 160 160 170 165 170 173 ...
head(datos)
#>   id contrato  jornada turno carfisi carpsiqui expquímica edad peso talla
#> 1  2        3 completa     1      no        no         no   33   74   155
#> 2  3        1 completa     1      no        no         no   37   74   170
#> 3  6        5 completa     1      sí        no         no   35   67   170
#> 4  7        1 completa     1      sí        no         no   30   57   164
#> 5  8        3 completa     1      sí        no         sí   30   69   160
#> 6 10        2 completa     1      no        sí         no   32   56   160
tail(datos)
#>    id contrato jornada turno carfisi carpsiqui expquímica edad peso talla
#> 86 73        5 parcial     1      no        no         no   32   65   159
#> 87 75        1 parcial     1      no        no         no   33   87   185
#> 88 76        1 parcial     1      sí        no         no   30   76   178
#> 89 80        4 parcial     1      no        no         no   29   65   153
#> 90 82        1 parcial     1      no        no         no   35   78   190
#> 91 86        4 parcial     4      no        no         no   28   65   167

Con la función attach hacemos accesible la base de datos seleccionada:

attach(datos) 
#> The following objects are masked from datos (position 3):
#> 
#>     carfisi, carpsiqui, contrato, edad, expquímica, id, jornada,
#>     peso, talla, turno
#> The following objects are masked from datos (position 4):
#> 
#>     carfisi, carpsiqui, contrato, edad, expquímica, id, jornada,
#>     peso, talla, turno
#> The following objects are masked from datos (position 5):
#> 
#>     carfisi, carpsiqui, contrato, edad, expquímica, id, jornada,
#>     peso, talla, turno
#> The following objects are masked from datos (position 11):
#> 
#>     carfisi, carpsiqui, contrato, edad, expquímica, id, jornada,
#>     peso, talla, turno

Describimos cada una de las variables categóricas: jornada, carfisi y expquímica:

table(jornada)
#> jornada
#> completa  parcial 
#>       67       24
table(carfisi)
#> carfisi
#> no sí 
#> 57 34
table(expquímica)
#> expquímica
#> no sí 
#> 86  5

Nos interesa describir la relación entre jornada y cada uno de los dos riesgos mencionados anteriormente. Utilizaremos el comando table para dos variables que nos proporciona una tabla de contingencia:

tabla1 <- table(jornada,carfisi)
tabla1
#>           carfisi
#> jornada    no sí
#>   completa 38 29
#>   parcial  19  5

También nos gustaría visualizar esta relación:

plot(tabla1, col = c("red", "blue"), main = "jornada vs. carga física")

plot of chunk unnamed-chunk-6

tabla2 <- table(jornada, expquímica)
tabla2
#>           expquímica
#> jornada    no sí
#>   completa 65  2
#>   parcial  21  3
plot(tabla2, col = c("red", "blue"), main = "jornada vs. exposición química")

plot of chunk unnamed-chunk-6

A partir de los datos que nos ofrece la muestra, ¿crees que hay una relación entre el tipo de jornada y estar expuesto a carga física? ¿Qué opinas de la relación entre el tipo de jornada y exposición química?

2. Prueba chi-cuadrado

2.1. Independencia de dos variables categóricas.

En el apartado anterior detectamos que parece existir una relación entre ambas variables. Las personas con jornada completa tienen una mayor exposición a carga física y menor exposición química que las personas con jornada parcial.

¿Estas diferencias serán estadísticamente significativas? Utilizaremos la prueba de chi-cuadrado:

chisq.test(tabla1)
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  tabla1
#> X-squared = 2.9067, df = 1, p-value = 0.08821
chisq.test(tabla2)
#> Warning in chisq.test(tabla2): Chi-squared approximation may be incorrect
#> 
#>  Pearson's Chi-squared test with Yates' continuity correction
#> 
#> data:  tabla2
#> X-squared = 1.5209, df = 1, p-value = 0.2175

Con un nivel de significación de 0.05, no podríamos rechazar en ninguno de los dos escenarios la hipótesis nula, luego consideraremos que hay independencia entre ambas variables, es decir, el tipo de contrato no está asociado a una mayor exposición química o carga física.

2.2. Contraste de homogeneidad de proporciones.

Si queremos comparar dos proporciones poblaciones, es posible el tes de comparar proporciones basado en los procedimiento z. ¿Y si disponemos de más de 2 proporciones? Para esta situación, también es posible utilizar el test de chi-cuadrado. Lo vemos con un ejemplo:

Queremos comparar si las proporciones de presencia de carga física en tres poblaciones de trabajadores (A, B, C) son iguales o diferentes. Para ello, se seleccionaron 3 muestras aleatorias, cada una correspondiente a estas poblaciones. Se obtuvieron los siguiente resultados:

Calculamos las proporciones de personas con carga física en cada uno de los grupos:

400/1780
#> [1] 0.2247191
416/2239
#> [1] 0.1857972
188/1356
#> [1] 0.1386431

¿Observamos diferencias entre las proporcionales a nivel muestral?

Comprobaremos si esas diferencias son estadísticamente significativas utilizando el test de chi-cuadrado. El primer paso será generar una tabla de contingencia:

fila1 <- c(400,1380)
fila2 <- c(416,1823)
fila3 <- c(188,1168)
tabla=rbind(fila1,fila2,fila3)
colnames(tabla) <- c("con carfisica", "sin carfisica")
tabla  
#>       con carfisica sin carfisica
#> fila1           400          1380
#> fila2           416          1823
#> fila3           188          1168

Resolvemos el contraste en R:

resultados <- chisq.test(tabla)
names(resultados)
#> [1] "statistic" "parameter" "p.value"   "method"    "data.name" "observed" 
#> [7] "expected"  "residuals" "stdres"
resultados$observed
#>       con carfisica sin carfisica
#> fila1           400          1380
#> fila2           416          1823
#> fila3           188          1168
resultados$expected
#>       con carfisica sin carfisica
#> fila1      332.4874      1447.513
#> fila2      418.2244      1820.776
#> fila3      253.2882      1102.712
resultados
#> 
#>  Pearson's Chi-squared test
#> 
#> data:  tabla
#> X-squared = 37.5663, df = 2, p-value = 6.959e-09

Interpreta los resultados obtenidos:



3. Ejercicios

En la base de datos estres.csv se incluye información sobre los niveles de estrés de un grupo de trabajadores, así como otras variables de interés.

Realiza las siguientes actividades en R:

4. Bibliografía y enlaces de interés: