TodЛs somos políticЛs. TodЛs hacemos política.

En la entrega anterior vimos cómo hacer visualizaciones de calidad con solo unas líneas de código gracias a ggplot2. No obstante, antes de presentar los datos y aplicar técnicas estadísticas complejas tenemos que tener algunas nociones de análisis exploratorio básico. En este post vamos a realizar un análisis exploratorio a través de tablas univariadas y bivariadas y a exponer operaciones de estadística inferencial básica como el cálculo de intervalos de confianza y la prueba t de Student. La capacidad de R a nivel estadístico es muy potente, pero al ser ésta una serie introductoria no profundizaremos en ello.

Tablas univariadas

En primer lugar, con el comando table, vamos a obtener una sencilla tabla de frecuencias absolutas del grado de interés por la política (P1) de la muestra de la encuesta postelectoral de 2019 del CIS.

table(datasetconetiquetas$P1)
## 
##    Mucho Bastante     Poco     Nada     N.C. 
##      590     1896     2050     1389       18

Sin embargo, los valores absolutos por sí solos aportan poco y suelen ser fuente de errores de interpretación. La forma más común de presentar este tipo de datos es con frecuencias relativas. En R, añadiendo prop.table antes de table podemos calcular la proporción que representa cada categoría sobre el total.

prop.table(table(datasetconetiquetas$P1))
## 
##       Mucho    Bastante        Poco        Nada        N.C. 
## 0.099276460 0.319030793 0.344943631 0.233720343 0.003028773

Si queremos expresar la tabla de frecuencias relativas en porcentajes hay que multiplicar lo anterior por 100. Así, podremos ver que el 34.49% de los encuestados están poco interesados en la política, mientras que el 31.9% lo están bastante, el 23.37% nada y el 9.97% mucho.

prop.table(table(datasetconetiquetas$P1))*100
## 
##      Mucho   Bastante       Poco       Nada       N.C. 
##  9.9276460 31.9030793 34.4943631 23.3720343  0.3028773

Para redondear la tabla anterior, habría que aplicar la función round, que incluye el número de dígitos a los que hacerlo.

round(prop.table(table(datasetconetiquetas$P1))*100, digits = 1)
## 
##    Mucho Bastante     Poco     Nada     N.C. 
##      9.9     31.9     34.5     23.4      0.3

Ahora queremos agrupar estas categorías y ver la proporción de interesados y no interesados en política. Para ello tenemos que recodificar 1 y 2 como interesados y 3 y 4 como no interesados. Como paso previo hemos filtrado los casos que no contestaron a la P1 mediante el comando filter (que explicaré en la siguiente entrega). En la tabla siguiente se ve la proporción de cada uno de estos grupos sobre el total de la muestra: los interesados representan el 0.41 sobre 1 y los no interesados, el 0.58.

subset <- datasetconetiquetas %>% 
              filter(P1 != "N.C.")
library(car)

subset$P1 <- as.numeric(subset$P1)
subset$P1.r <- recode(subset$P1, "1=1; 2=1; 3=2; 4=2")

subset$P1.r <- as.factor(subset$P1.r)
levels(subset$P1.r) <- c("Interesados", "No interesados")

prop.table(table(subset$P1.r))
## 
##    Interesados No interesados 
##      0.4197698      0.5802302

También se pueden calcular estadísticos como la media o la mediana con la función summarise, de Tidyverse (que veremos en mayor profundidad en el próximo post). Para no tener en cuenta los casos perdidos, antes de calcular la media y la mediana es necesario filtrar para quedarnos sólo con los casos donde la P1 sea menor que 9.

dataset %>%
  filter(P1 < 9) %>%
  summarise(media = mean(P1), mediana = median(P1))
## # A tibble: 1 x 2
##   media mediana
## 1  2.72       3

Con ello obtenemos que la media ponderada de interés en la política es de 2.72, mientras que la mediana es 3 (sin decimales, ya que se trata de una variable cualitativa ordinal).

Tablas bivariadas

Ya hemos visto cómo explorar una sola variable. Ahora mostraremos cómo hacer cruces entre dos. Para hacer una tabla de contingencia con frecuencias absolutas de la P1 (interés por la política) y la P2 (interés por la campaña electoral) volvemos a usar table, aunque esta vez incluyendo el par de variables en cuestión.

table(datasetconetiquetas$P1, datasetconetiquetas$P2) 
##           
##            Con mucho interés Con bastante interés Con poco interés
##   Mucho                  342                  184               52
##   Bastante               323                 1217              305
##   Poco                    60                  445             1264
##   Nada                    15                   80              391
##   N.C.                     2                    4                6
##           
##            Con ningún interés N.S. N.C.
##   Mucho                    11    1    0
##   Bastante                 46    1    4
##   Poco                    275    3    3
##   Nada                    898    4    1
##   N.C.                      1    0    5

Así vemos, por ejemplo, que 1264 encuestados tienen poco interés en política y en la campaña electoral o que 342 tienen mucho interés tanto en política como en la campaña.

Para mostrar ahora las frecuencias relativas sin los que no contestan reaprovecharemos el dataset subset creado en el apartado anterior pero añadiendo los respectivos «no sabe» y «no contesta» de la P2. Al igual que para las frecuencias relativas de una variable, el comando a utilizar es prop.table, y round si queremos redondear, especificando el número de decimales resultantes.

round(prop.table(table(subset$P1, subset$P2)) * 100, digits = 2)
##    
##              Con mucho interés Con bastante interés Con poco interés
##   Mucho              5.79                 3.11             0.88
##   Bastante           5.47                20.60             5.16
##   Poco               1.02                 7.53            21.39
##   Nada               0.25                 1.35             6.62
##    
##              Con ningún interés
##   Mucho             0.19
##   Bastante          0.78
##   Poco              4.65
##   Nada             15.20

Con la librería descr y su comando crosstab podemos hacer tablas de contingencia similares a las de SPSS de forma muy sencilla. En este caso calcularemos el porcentaje sobre el total. Cambiando el parámetro prop.t por prop.r y prop.c se mostraría la proporción por fila y por columna, respectivamente. Con el paquete xtable se le pueden dar diferentes formatos a las tablas para mejorar la visualización. En la tabla resultante aparecen condensadas las dos tablas anteriores, aunque con este paquete también se podrían añadir otros estadísticos.

#install.packages("descr")
library(descr)

levels(subset$P2) <- c("Mucho", "Bastante", "Poco", "Ninguno", "N.S.", "N.C.")
crosstab(subset$P1, subset$P2, prop.t = TRUE, plot = FALSE)
##    Cell Contents 
## |-------------------------|
## |                   Count | 
## |           Total Percent | 
## |-------------------------|
## 
## =======================================================
##              subset$P2
## subset$P1    Mucho   Bastante    Poco   Ninguno   Total
## -------------------------------------------------------
## Mucho          342        184      52        11     589 
##               5.8%       3.1%    0.9%      0.2%        
## -------------------------------------------------------
## Bastante       323       1217     305        46    1891 
##               5.5%      20.6%    5.2%      0.8%        
## -------------------------------------------------------
## Poco            60        445    1264       275    2044 
##               1.0%       7.5%   21.4%      4.7%        
## -------------------------------------------------------
## Ninguno         15         80     391       898    1384 
##               0.3%       1.4%    6.6%     15.2%        
## -------------------------------------------------------
## Total          740       1926    2012      1230    5908 
## =======================================================

Intervalos de confianza y prueba t de Student

Las técnicas de investigación social cuantitativas tienen problemas para acceder a datos del total de la población. Por ello, a través de la encuesta se busca acceder a un conjunto de entrevistados representativo del total de la población denominado muestra. De los estadísticos de muestras representativas se pueden inferir parámetros poblacionales. El big data está paliando parcialmente esta situación, porque las compañías pueden acceder a los datos que generan sus dispositivos conectados al Internet de las cosas. Por ejemplo, Polar o Garmin probablemente tendrán una gran base con datos de relojes deportivos con GPS.

Una operación estadística de inferencia básica es la estimación de intervalos de confianza dadas una media, una desviación típica y un nivel de confianza. El parámetro poblacional es desconocido, pero con el intervalo de confianza nos aproximamos probabilísticamente a su valor asumiendo que la muestra es representativa. Con el paquete rmisc podemos, por ejemplo, calcular un intervalo de confianza con un nivel de confianza del 95% a partir de la autoubicación ideológica de la muestra. Antes de calcular el intervalo hemos filtrado para quedarnos solo con los casos que no son perdidos.

#install.packages("Rmisc")
library(Rmisc)

subset <- dataset %>%
            filter(dataset$P32 < 97)

CI(subset$P32, ci = 0.95)
##    upper     mean    lower 
## 4.578137 4.522615 4.467093

Asumiendo que la muestra es representativa de la población, esto signfica que la autoubicación ideológica de la población estará entre 4,46 y 4,57, con un 95% de probabilidad.

Otra de las bases de la estadística inferencial es el contraste de hipótesis, que se puede hacer mediante el test t de Student. Si supiésemos que el parámetro poblacional de la autoubicación ideológica es 5, podríamos hacer la prueba y ver si existen diferencias estadísticamente significativas con el valor obtenido en la muestra.

t.test(subset$P32, mu = 5)
## 
##  One Sample t-test
## 
## data:  subset$P32
## t = -16.856, df = 5062, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 5
## 95 percent confidence interval:
##  4.467093 4.578137
## sample estimates:
## mean of x 
##  4.522615

En este caso observamos que el p valor es muy bajo, por lo que existen diferencias estadísticamente significativas entre el valor obtenido en la muestra y el hipotético parámetro poblacional de 5, en un nivel de confianza del 95%. Por tanto, la muestra, bajo el supuesto de que es representativa, no estaría tomada de una población donde la media de autoubicación ideológica fuese de 5 con una alta probabilidad.

En este post he sintetizado lo más básico que se puede hacer a nivel estadístico con R, pero cabe señalar una vez más que sus posibilidades son mucho mayores. Con una búsqueda en Google o en Stackoverflow se puede obtener mucha información acerca de cómo aplicar técnicas más sofisticadas como las de clasificación o las de predicción. También hay webs recomendables para ello, como r-statistics.co o el Github de Joaquín Amat.