Variables nominales

Normalmente los datos para el análisis de variables categóricas se describen en tablas de contingencia. estas muestran los valores observados de las combinaciones sobre los posibles resultados para las dos variables.

Los totales de las filas y las columnas son las distribuciones marginales, mientras que si calculamos el porcentaje de casos, por fila o columna, serían las distribuciones condicionales. Si calculamos el porcentaje con respecto a todo el total, estaríamos hablando de la probabilidad conjunta.

Las medidas de asociación para variables nominales no dependen de un orden particular de las categorías.

La medida más utilizada para este tipo de variables es la chi-cuadrada.

La prueba de hipótesis de independencia se basa en el estadístico X2 para una tabla de contingencia de ixj.

Preguntarnos si existe una asociación entre dos variables categóricas es preguntarnos si las categorías dentro de una variable difieren en cuanto a la probabilidad condicional en la otra variable.

Por ello: dos variables categóricas son estadísticamente independientes si la probabilidad condicional en la variable respuesta es la misma. Por el contrario, son dependientes si la probabilidad condicional es diferente.

Para la prueba de hipótesis, vamos a tener como hipótesis nula: las variables son independientes y como hipótesis alternativa: las variables no son independientes.

La prueba de significancia compara las frecuencias observadas (el valor dentro de cada celda) con las frecuencias esperadas. Por lo que x2= sumatoria de (fo-fe)^2/fe. Donde fe es (rowtot)*(coltot)/n

Para muestras relativamente grandes, la distribución muestral de X2 se denomina: distribución de probabilidad de la chi cuadrada. Son tres sus propiedades:

  1. Se concentra en la parte positiva: el estadístico no puede ser negativo. El mínimo valor de X2 será 0.
  2. Está sesgada a la derecha.
  3. La forma de la distribución va a depender de los grados de libertad= (r-1)(c-1)

Cálculo a mano

Paquetes

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.5 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.2      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(haven)
library(janitor)
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(DescTools)
library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## 
## The following objects are masked from 'package:DescTools':
## 
##     %nin%, Label, Mean, Quantile
## 
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## 
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2

Abrimos base de datos.

base <- read.csv("C:/Users/molar/Dropbox/2023_Trabajos/FLACSO/Datos/TENBIARE.csv")

Analizaremos la relación entre pertenecer a un partido, movimiento u organización política o social y el tamaño de localidad.

Primero hacemos una variable dummy para el tamaño de localidad.

base <- base %>% 
  mutate(urbano= ifelse(TLOC<4, 1, 0))
table(base$urbano) #1 es urbano, 0 es rural
## 
##     0     1 
##  7353 23813

Luego verificamos que la variable de participación no tenga valores perdidos.

table(base$PG1_1) #1 es sí, 2 es no
## 
##     1     2 
##  1065 30101

Paso 1. Hacemos la tabla de contigencia para calcular las frecuencias observadas

table(base$urbano, base$PG1_1)
##    
##         1     2
##   0   329  7024
##   1   736 23077

Paso 2. Obtenemos probabilidad marginal de la columna (probabilidad de participar)

base %>% 
  tabyl(urbano, PG1_1) %>% 
  adorn_totals(c("row", "col"))
##  urbano    1     2 Total
##       0  329  7024  7353
##       1  736 23077 23813
##   Total 1065 30101 31166
prob_particip <- 1065/31166
prob_noparticip <- 30101/31166

Paso 3. Obtenemos valores esperados (probabilidad de participar, sin importar el tamaño de la localidad)

prob01 <- 7353*prob_particip
prob11 <- 23813*prob_particip
prob02 <- 7353*prob_noparticip
prob12 <- 23813*prob_noparticip

Paso 4. Calculamos el chi-cuadrado

x_2 <- (((329-prob01)^2)/prob01)+ (((736-prob11)^2)/prob11)+ (((7024-prob02)^2)/prob02)+
  (((23077-prob12)^2)/prob12)

Paso 5. Grados de libertad

gl <- (2-1)*(2-1)

Vemos en la tabla que a un grado de libertad, con 0.05 de significancia, el valor de tablas es 3.8415. Nuestro chi calculado es mayor por lo que rechazamos la hipótesis nula de que son independientes.

Forma rápida

chisq.test(base$urbano, base$PG1_1, correct=F)
## 
##  Pearson's Chi-squared test
## 
## data:  base$urbano and base$PG1_1
## X-squared = 32.588, df = 1, p-value = 1.139e-08

Variables ordinales

Las variables ordinales pueden tener dos tipos de asociaciones entre x,y. Pueden ser asociaciones positivas o negativas. Las asociaciones positivas son cuando las unidades de análisis tienen tanto un alto valor en x como en y. Las asociaciones negativas son cuando las unidades de análisis tienen altos valores en una variable y bajos en otra.

Las medidas de asociación para variables ordinales, se basan en la información por pares de observaciones. Un par es concordante si tienes un valor alto en una variable y alto en la otra. Un par es discordante si tienes un valor alto y bajo. Los pares concordantes dan evidencia de asociación positiva y los pares discordantes, asociación negativa.

(Ver Agresti, pag 248)

Una diferencia positiva ocurre cuando C-D y C>D. Muestras grandes van a tener muchos pares por lo que estandarizamos la diferencia para que sea más fácil de interpretar. Esto resulta en un estadístico llamado Gamma.

gamma=(C-D)/C+D

Propiedades 1. Los valores de gamma van entre -1 y 1 2. El signo de gamma dice si la relación es positiva o negativa. 3. Entre más grande el valor de gamma es más alta la asociación. 4. Excluye los pares donde hay empate.

Haremos una relación entre haber tenido menos, similar o más oportunidades de educación que sus padres y tener actualmente una menor, mediana o mayor satisfación con su vida.

Primero modificamos las variables

base <- base %>% 
  mutate(satis=
        case_when(
          PA1==0 & PA1<=3 ~ 1,
          PA1>3 & PA1<=6 ~ 2,
          PA1>6 & PA1<=10 ~ 3))

table(base$satis)
## 
##     1     2     3 
##   191  3225 27254
base <- base %>% 
  mutate(educa=
        case_when(
          PI3==1 ~ 3,
          PI3==2 ~ 2,
          PI3==3 ~ 1))

table(base$educa)
## 
##     1     2     3 
##  2125  7431 21610

Hacemos la prueba

tabla<- table(base$educa, base$satis)
GoodmanKruskalGamma(tabla, conf.level=0.95)
##     gamma    lwr.ci    upr.ci 
## 0.2045502 0.1721337 0.2369666

Las medidas de asociación entre variables ordinales comparten las propiedades de estar entre -1 y 1, el signo muestra si es positiva o negativa. Las variables son independientes si el resultado es 0. Y la asociación es más grande si tenemos un valor muy grande del estadístico.

El estadístico Tau de Kendall es una forma estandarizada del coeficiente gamma. Identifica los pares concordantes y discordantes de dos variables, calcula los totales y se hace el cociente.

Tau-a y Tau-b: son una extensión de Gamma y puede alcanzar los valores de -1 a 1, pero solamente para tablas cuyo número de filas es igual al número de columnas. Tau-b se ajusta a los empates.

Kendall_tau_a = (P - Q) / (n * (n - 1) / 2)

Kendall_tau_b = (P - Q) / sqrt ( (P + Q + Y0) * (P + Q + X0) )

https://statologos.com/kendalls-tau/ https://stackoverflow.com/questions/2557863/measures-of-association-in-r-kendalls-tau-b-and-tau-c

Ejemplo

KendallTauA(tabla, direction="row", conf.level=0.95)
##      tau_a     lwr.ci     upr.ci 
## 0.02025008 0.02003099 0.02046916
KendallTauA(tabla, direction="column", conf.level=0.95)
##      tau_a     lwr.ci     upr.ci 
## 0.02025008 0.02003099 0.02046916
KendallTauB(tabla, conf.level=0.95)
##      tau_b     lwr.ci     upr.ci 
## 0.06721245 0.05544012 0.07898479

Tau-c: se utiliza para tablas que cuyas filas y columnas difieren.

tab <- as.table(rbind(c(26,26,23,18,9),c(6,7,9,14,23)))
StuartTauC(tab, conf.level=0.95)
##      tauc    lwr.ci    upr.ci 
## 0.4110953 0.2546754 0.5675151

El coeficiente Rho de Spearman se emplea para comparar dos conjuntos de rangos ordenados o dos grupos con los rangos ordenados.

El coeficiente de Spearman es el mismo que el de Pearson, pero aplicado luego de construir rangos para las variables.

La fórmula es 1- 6 * sumatoria de la diferencia al cuadrardo/n3-n

Construyamos un rango para la variable de satisfacción con su nivel de vida (socioeconómico).

base <- base %>% 
  mutate(socio=
        case_when(
          PA3_01==0 & PA3_01<=3 ~ 1,
          PA3_01>3 & PA3_01<=6 ~ 2,
          PA3_01>6 & PA3_01<=10 ~ 3))
cor.test(base$satis, base$socio, method = "spearman")
## Warning in cor.test.default(base$satis, base$socio, method = "spearman"): Cannot
## compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  base$satis and base$socio
## S = 2.9151e+12, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.3156311

La diferencia es que el Gamma se emplea para identificar la relación entre 2 variables cuando al menos 1 es ordinal. Spearman y Kendall se utilizan cuando ambas son ordinales o de escala intervalar.

Variables cuantitativas

Para las variables cuantitativas, podemos calcular el coeficiente de correlación de Pearson.

El coeficiente de correlación es una medida de asociación lineal entre dos variables. A diferencia de la covarianza, la correlación no depende de la escala de medida entre las variables.

El coeficiente siempre va desde -1 hasta 1. Además, si es 0, quiere decir que no hay relación lineal.

Vamos a abrir la base de datos de Vdem (2022).

base <- read.csv("C:/Users/molar/Dropbox/2023_Trabajos/FLACSO/Datos/V-Dem-CY-Full+Others-v12.csv")

Vamos a quedarnos únicamente con los datos de 2021.

base_modif <- base %>% 
  filter(year==2021)

La base de datos tiene información sobre diversas características de los países.

Antes de hacer una correlación, podemos hacer un gráfico de dispersión.

Lo haremos entre el nivel de educación y el nivel de democracia.

base_modif %>%                                                         
  ggplot(aes(x=e_peaveduc,y=v2x_polyarchy))+    # las dos variables que queremos ver.
  geom_point(color="midnightblue")+             # diagrama de dispersión, puntos de color azul
  xlab("Nivel de escolaridad")+        # nombre del eje x
  ylab("Nivel de democracia")+ # nombre del eje y
  theme_light() 
## Warning: Removed 42 rows containing missing values (geom_point).

Repetimos el mismo diagrama, pero ahora que cada punto está coloreado a partir de la variable e_regionpol. Antes, vamos a crear una variable que sea 1, para América Latina y 0 para los demás países.

base_modif <- base_modif %>% 
  mutate(latam=case_when(e_regionpol==1 ~ "Otros países", 
                         e_regionpol==2 ~ "América Latina",
                         e_regionpol>2 & e_regionpol <=10 ~ "Otros países"))

Vemos si quedó bien

table(base_modif$e_regionpol)
## 
##  1  2  3  4  5  6  7  8  9 10 
## 30 20 21 51 24  6 10  8  4  5
table(base_modif$latam)
## 
## América Latina   Otros países 
##             20            159

Graficamos.

base_modif %>%
  ggplot(aes(x=e_peaveduc,
             y=v2x_polyarchy,
             color=as.factor(latam)))+ # Aquí decimos que el color debe ir de acuerdo a la variable as.factor(latam)
  geom_point()+
  scale_color_manual(name="Región",   # Nombre de la leyenda
                     labels=c("América Latina","Otros países"),     # etiquetas de la leyenda
                     values=c("darkorange","mediumseagreen"))+  # par de colores que queremos usar
  xlab("Nivel de escolaridad")+
  ylab("Índice de democracia")+
  theme_classic()+
  theme(legend.position="bottom")      
## Warning: Removed 42 rows containing missing values (geom_point).

Le podemos agregar la línea con “geom_smooth”.

base_modif %>%
  ggplot(aes(x=e_peaveduc,
             y=v2x_polyarchy,
             color=as.factor(latam)))+ # Aquí decimos que el color debe ir de acuerdo a la variable as.factor(latam)
  geom_point()+
  geom_smooth(method="lm")+
  scale_color_manual(name="Región",   # Nombre de la leyenda
                     labels=c("América Latina","Otros países"),     # etiquetas de la leyenda
                     values=c("darkorange","mediumseagreen"))+  # par de colores que queremos usar
  xlab("Nivel de escolaridad")+
  ylab("Índice de democracia")+
  theme_classic()+
  theme(legend.position="bottom")   
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 42 rows containing non-finite values (stat_smooth).
## Warning: Removed 42 rows containing missing values (geom_point).

Ahora, vamos a calcular la correlación.

subset1 <- base_modif %>%
  select(e_peaveduc, v2x_polyarchy) 

Hacemos la correlación

corMatrix1 <- round(cor(subset1, method = "pearson", use= "pairwise.complete.obs"), 2)
corMatrix1
##               e_peaveduc v2x_polyarchy
## e_peaveduc          1.00          0.56
## v2x_polyarchy       0.56          1.00

Otra forma de verlo

subset1 %>%
  ggpairs()
## Warning: Removed 42 rows containing non-finite values (stat_density).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 42 rows containing missing values
## Warning: Removed 42 rows containing missing values (geom_point).

Hacemos la prueba de hipótesis

cor.test(subset1$e_peaveduc, subset1$v2x_polyarchy, 
         alternative =c("two.sided"), 
         method = c("pearson"), use= c("pairwise.complete.obs"))
## 
##  Pearson's product-moment correlation
## 
## data:  subset1$e_peaveduc and subset1$v2x_polyarchy
## t = 7.8805, df = 135, p-value = 9.68e-13
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.4345086 0.6663068
## sample estimates:
##       cor 
## 0.5613186