7  Variables categóricas

7.1 Introducción

Como hemos visto en el ejercicio del apartado anterior, si no hacemos ningún tratamiento, una variable categórica nos aparecerá en la consola de R como una secuencia desordenada de diferentes categorías, que se van repitiendo de vez en cuando. Precisamente, las dos técnicas cuantitativas principales que tenemos para sintetizar la información de este tipo de variable son o bien contar la cantidad de veces que se repite cada una de estas categorías (es decir, la frecuencia en la que aparecen), o bien contar la cantidad de veces que se repite cada categoría en comparación con las otras categorías de la variable. Estas serán las dos técnicas principales que aprenderemos en este apartado.

El instrumento que utilizaremos para representar estos cálculos es la tabla de frecuencias. En la tabla 7.1 encontramos un ejemplo de su contenido. La tabla muestra la cantidad de veces, en términos absolutos y en términos relativos, que se repiten los valores de la variable happy del marco de datos wvs. Esta variable pregunta a los encuestados si creen que son felices con la vida. Las respuestas posibles son “Muy feliz”, “Bastante feliz”, “No muy feliz” o “Nada feliz”.

Tabla 7.1: Tabla de frecuencias relativas y absolutas
happy Freq. Absolutas Freq. Ac. Absolutas Freq. Relativas Freq. Ac. Relativas
Not at all happy 12511 12511 2.8 2.8
Not very happy 67252 79763 15.2 18.0
Quite happy 234545 314308 53.1 71.1
Very happy 127750 442058 28.9 100.0

Como vemos, la tabla de frecuencias nos permite sintetizar la información de una variable categórica. La columna de frecuencias absolutas simplemente nos recuenta el número de casos de cada categoría, mientras que la columna de frecuencias relativas nos dice qué porcentaje representa esta cantidad sobre el total de casos. En el caso de las variables ordinales, también nos puede interesar conocer las frecuencias acumuladas, que es la suma de las frecuencias de todas las categorías hasta una categoría particular de la tabla.

Ejercicio 7.1 (Prepara los datos) Asegúrate de que en el Global Environment tienes cargados los marcos de datos gapminder y wvs. Haz una exploración rápida de los datos antes de continuar:

  • Examina qué variables tenemos con glimpse().

7.2 Frecuencia absoluta

Pedir las frecuencias absolutas es algo relativamente sencillo con código de R, y tenemos una gran variedad de funciones que nos lo permiten hacer. Sin embargo, nos centraremos en dos funciones. La primera es count(), que, al ser una función de dplyr, tiene dos características que la hacen muy útil: devuelve como resultado un marco de datos y se puede utilizar en el sistema pipe. El argumento sort = T nos permite ordenar las categorías de más a menos frecuencia.

gapminder |> 
  count(continent, sort = T)
## # A tibble: 5 × 2
##   continent     n
##   <fct>     <int>
## 1 Africa      624
## 2 Asia        396
## 3 Europe      360
## 4 Americas    300
## 5 Oceania      24

La otra función con la que podemos crear una tabla de frecuencias es table(). A diferencia de count(), esta función no se puede usar en el sistema pipe ni tampoco devuelve un marco de datos, sino un objeto de tipo table. Es por eso que tendremos que utilizar el formato dólar para enlazar el marco de datos con el vector que queremos observar (table(df$v)).

Nueva clase de objeto

En los primeros módulos hemos dicho que estudiaríamos principalmente dos objetos, los vectores y los marcos de datos, pero que en realidad hay otros muchos tipos de objetos.

d <- table(gapminder$continent)
is(d)
## [1] "table"    "oldClass"
table(gapminder$continent)
## 
##   Africa Americas     Asia   Europe  Oceania 
##      624      300      396      360       24

Además de cuantificar una variable numérica, a menudo también querremos visualizar la distribución de las frecuencias en un gráfico. Una opción rápida es barplot(), una función que nos creará un diagrama de barras si lo añadimos al objeto creado anteriormente con table().

barplot(table(gapminder$continent))

Visualizar muchas frecuencias

Si probamos de visualizar una variable con muchas frecuencias, es muy posible que este código no nos permita visualizar correctamente los nombres de las categorías. Para resolverlo, tenemos varias maneras, que aprenderemos en Tipos de visualizaciones.

Tanto en la tabla de frecuencias anterior como en este diagrama de barras encontraremos el estadístico que nos interesa más en las variables categóricas: la moda. La moda es el valor o valores que aparecen con más frecuencia en una distribución. En la tabla 7.1, la moda es “Quite happy”, con 234.545 ocurrencias, mientras que en el ejemplo que acabamos de ver la moda es África con 624.

No siempre encontraremos necesariamente una moda en todas las variables categóricas. A veces podemos encontrar dos (bimodal) o varias (multimodal).

7.3 Frecuencia relativa

La frecuencia relativa es la proporción o el porcentaje que representa la frecuencia absoluta de un valor en relación con el total de observaciones en una muestra o población. Volviendo al ejemplo anterior, para pedir la frecuencia relativa de una variable nominal con count() dividiremos el número de ocurrencias de cada valor por el total de observaciones. El resultado, expresado en porcentajes, se suele representar con uno o dos decimales para facilitar la interpretación.

gapminder |> 
  count(continent, sort = T) |> 
  mutate(per = round(n / sum(n) * 100, 1))
## # A tibble: 5 × 3
##   continent     n   per
##   <fct>     <int> <dbl>
## 1 Africa      624  36.6
## 2 Asia        396  23.2
## 3 Europe      360  21.1
## 4 Americas    300  17.6
## 5 Oceania      24   1.4

Si utilizamos la función table(), añadiremos a la tabla de frecuencias la funciónprop.table(). R devuelve el resultado sobre 1, y por eso tendremos que multiplicar por 100 para tener la frecuencia relativa en porcentajes.

prop.table(table(gapminder$continent)) * 100
## 
##    Africa  Americas      Asia    Europe   Oceania 
## 36.619718 17.605634 23.239437 21.126761  1.408451

Y también podemos hacer el mismo procedimiento para visualizar la distribución de las frecuencias relativas. Solo habrá que añadir barplot() al código anterior para generar un diagrama de barras. Fijaos que en el eje vertical vemos los porcentajes de cada categoría.

barplot(prop.table(table(gapminder$continent)) * 100)

7.4 Frecuencias acumuladas

Si trabajamos con variables categóricas nominales, nos bastará con las funciones anteriores para visualizar los datos, pero si se trata de variables ordinales también nos puede interesar ver las frecuencias acumuladas para cada categoría. Es decir, querremos observar cómo se acumulan los valores y los porcentajes si los añadimos a los valores o porcentajes de las filas anteriores. En el código siguiente vemos cómo crear una tabla con frecuencias y porcentajes acumulados.

wvs |> 
  count(happy) |> 
  filter(!is.na(happy)) |> 
  arrange(desc(happy)) |> 
  mutate(n_cum = cumsum(n),
         per = round(prop.table(n) * 100, 2),
         per_cum = cumsum(per))
## # A tibble: 4 × 5
##   happy                 n  n_cum   per per_cum
##   <ord>             <int>  <int> <dbl>   <dbl>
## 1 Not at all happy  12511  12511  2.83    2.83
## 2 Not very happy    67252  79763 15.2    18.0 
## 3 Quite happy      234545 314308 53.1    71.1 
## 4 Very happy       127750 442058 28.9   100

Es importante que los valores en cuestión estén ordenados de menor a mayor para ver cómo los valores se acumulan en orden ascendente.

7.5 Comparar frecuencias

Con la información contenida en la tabla de frecuencias, podemos observar la importancia absoluta y relativa de cada valor en el conjunto de datos, que proporciona información sobre qué valores tienen más presencia o prevalencia en la muestra o población estudiada. Pero también facilita la comparación entre diferentes conjuntos de datos. Así, podemos entender la distribución de los datos entre grupos e identificar qué valores son más comunes o representativos en las muestras o poblaciones analizadas.

En la tabla 7.2 hemos comparado las frecuencias absolutas (n) y relativas (r) de varias variables de la WVS, que preguntan sobre la importancia de varios aspectos de la vida: la familia, los amigos, el tiempo de ocio y la política. Observamos, por ejemplo, que 915 de los 1.000 encuestados consideran que la familia es muy importante, y esto representa un 91,5 % de la muestra. Estos porcentajes son inferiores cuando preguntamos por los amigos (40,5 %), el tiempo de ocio (38,6 %) o la política (16,1 %).

(a) Importancia de la familia
Q1 n r
1 915 91.5
2 74 7.4
3 7 0.7
4 4 0.4
(b) Importancia de los amigos
Q2 n r
1 404 40.5
2 449 45.0
3 116 11.6
4 28 2.8
(c) Importancia del tiempo de ocio
Q3 n r
1 383 38.6
2 437 44.0
3 145 14.6
4 28 2.8
(d) Importancia de la política
Q4 n r
1 159 16.1
2 311 31.5
3 304 30.8
4 214 21.7

Tabla 7.2: Comparación entre diferentes respuestas de la World Values Survey

Ejercicio 7.2 (La salud en Albania) En Albania, ¿qué salud subjetiva tiene la población en 2002? La variable health del marco de datos wvs pregunta por la salud subjetiva de la población en muchos países. Haz una tabla de frecuencias que te permita observar los datos en Albania en 2002.

  • ¿Qué valor es la moda?
  • ¿Qué porcentaje de encuestados considera que tiene una muy buena salud (“Very good”)?

La moda es “Good” (salud buena), mientras que un 24,6 % de los encuestados considera que tiene una muy buena salud (“Very good”).

wvs |> 
  filter(country == "ALB", year == 2002) |> 
  count(health) |> 
  filter(!is.na(health)) |> 
  arrange(desc(health)) |> 
  mutate(r = n / sum(n) * 100)