Relació entre numèrica i categòrica

Aquests són tots els paquets que necessitarem, entre ells el paquet unvotes (Voeten 2017):

#recordeu que els paquets han d'estar prèviament instal·lats 
library(unvotes)
library(dplyr)
library(tidyr)
library(readr)
library(ggplot2)
library(stringr)
library(readxl)
library(countrycode)

En aquesta secció ens interessa la base de dades Democracy Dataset (DD) (Cheibub, Gandhi, and Vreeland 2010), que es pot descarregar des d’un arxiu Excel que podeu trobar a la pàgina web de José Antonio Cheibub. Hem creat el marc de dades DData, que conté la variable democracy. Aquesta variable pren el valor 1 quan és democràcia i 0 quan no ho és.

download.file("https://uofi.box.com/shared/static/d27425539c9d662a7041.xls", "dd.xls")
DDdata <- read_xls("dd.xls") %>%
  filter(year > 1945) %>%
  mutate(iso2c = countrycode(uncode, "un", "iso2c")) %>%
  select(iso2c, country = ctryname, year, democracy, un_continent_name)

AVÍS!: Si teniu problemes amb la funció anterior, descarregueu manualment l’arxiu, ubiqueu-lo en el vostre directori de treball amb el nom dd.xls i prosseguiu amb el codi per a crear la funció DDdata.

Si visualitzem DDdata obtenim el següent resultat:

iso2cstandardized_countrycountryyeardemocracyun_continent_name
AFAfghanistanAfghanistan19460Asia
ALAlbaniaAlbania19460Europe
ARArgentinaArgentina19461Americas
AUAustraliaAustralia19461Oceania
ATAustriaAustria19461Europe
BEBelgiumBelgium19461Europe
BTBhutanBhutan19460Asia
BOBoliviaBolivia19460Americas
BRBrazilBrazil19461Americas
BGBulgariaBulgaria19460Europe

Diferència de mitjanes

Quan vulguem mirar l’associació entre una variable independent categòrica i una dependent numèrica utilitzarem la diferència de mitjanes. La idea al darrere d’aquest procediment és simple: agafem dues distribucions numèriques i ens preguntem: tenen la mateixa mitjana o no? En el nostre exemple, la pregunta que ens farem és: les democràcies votaven diferent que les no democràcies el 1946? Necessitarem dades del vot a l’ONU i també informació sobre si el país és o no una democràcia:

  1. Vot a l’ONU: A partir de un_roll_calls i un_votes hem creat el marc de dades un_year_mean, on obtenim la mitjana de vots a favor de cada país per any. Si la variable mean és propera a 1 significa que el país va votar a favor la majoria de les vegades. Sí és propera a 0 significa que va votar principalment en contra.
un_year_mean <- un_roll_calls %>%
  separate(date, "year", extra = "drop") %>%
  inner_join(un_votes) %>%
  mutate(year = as.numeric(year), 
         vote = if_else(vote == "yes", 1, 0)) %>%
  group_by(year, country, country_code) %>%
  summarize(mean = mean(vote))
yearcountrycountry_codemean
1946AfghanistanAF0.4117647
1946ArgentinaAR0.6976744
1946AustraliaAU0.5581395
1946BelarusBY0.4418605
1946BelgiumBE0.6046512
1946Bolivia (Plurinational State of)BO0.6976744
1946BrazilBR0.6046512
1946CanadaCA0.6428571
1946ChileCL0.6046512
1946ColombiaCO0.3095238
  1. Democràcia: Unim el marc de dades un_year_mean amb el marc de dades DDdata, on ja tenim la variable democracy dicotomitzada. La passarem a vector de caràcter, que tingui les categories Democracy o No Democracy.
un_dd_year <- un_year_mean %>%
  inner_join(DDdata, by = c("country_code" = "iso2c", "year" = "year")) %>%
  select(country = country.x, country_code, year, mean, democracy,
         continent = un_continent_name) %>%
  mutate(democracy = if_else(democracy == 1, "Democracy", "No democracy"))

Fixem-nos amb el nou marc de dades un_dd_year. Hi tenim:

  • La variable categòrica independent democracy.
  • La variable numèrica dependent mean.
countrycountry_codeyearmeandemocracycontinent
AfghanistanAF19460.4117647No democracyAsia
ArgentinaAR19460.6976744DemocracyAmericas
AustraliaAU19460.5581395DemocracyOceania
BelgiumBE19460.6046512DemocracyEurope
Bolivia (Plurinational State of)BO19460.6976744No democracyAmericas
BrazilBR19460.6046512DemocracyAmericas
CanadaCA19460.6428571DemocracyAmericas
ChileCL19460.6046512DemocracyAmericas
ColombiaCO19460.3095238DemocracyAmericas
Costa RicaCR19460.6388889DemocracyAmericas

Visualitzar

Hi ha diverses maneres de visualitzar una diferència de mitjanes. Podem, per exemple, utilitzar un diagrama de barres (geom_col()) en el qual l’alçada de les barres representi la mitjana de cada categoria. Una altra manera és amb un punt que representi la mitjana de cada grup i una barra horitzontal que representi l’interval de confiança. Hi hem afegit les observacions al darrere amb un geom_jitter() que representa les observacions colorejades per continent.

un_dd_year %>%
  filter(year == 1946) %>% #filtrem per 1946
  ggplot(aes(x = democracy, y = mean)) +
  geom_jitter(aes(col = continent), alpha = 0.8, width = 0.25) + #les observacions 
  stat_summary(fun.data = mean_se,
               fun.args = list(mult = 1.96), 
               size = 0.45,
               col = "red") + #punt i interval de confiança
  scale_color_brewer(type = "qual", palette = 6) +
  theme_classic()

Quantificar

En la diferència de mitjanes podem fer-nos tres preguntes:

  1. Hi ha diferència en la mitjana de la variable dependent segons les categories de la variable independent des d’un punt de vista estadísitc?
  2. Quanta diferència hi ha entre una mitjana i l’altra des d’un punt de vista estadístic?
  3. Quina és la correlació entre les dues variables?

Podem respondre a les dues preguntes amb el t.test(). En primer lloc, filtrem per 1946 i dicotomitzem amb 1 i 0 la variable categòrica (necessari per poder fer el test).

un_dd_year_1946 <- un_dd_year %>%
  filter(year == 1946) %>%
  mutate(democracy = if_else(democracy == "Democracy", 1, 0))

t.test(un_dd_year_1946$mean, un_dd_year_1946$democracy)
## 
##  Welch Two Sample t-test
## 
## data:  un_dd_year_1946$mean and un_dd_year_1946$democracy
## t = 0.23618, df = 49.996, p-value = 0.8143
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.1319858  0.1671619
## sample estimates:
## mean of x mean of y 
## 0.5920561 0.5744681

El p-valor, molt superior a 0.05, ens respon a la primera pregunta: no hi ha diferència. A la segona pregunta trobem resposta en els nombres -0.1319858 i 0.1671619: ens indiquen l’interval en què estimem amb un 95% de confiança que es mourà la diferència de mitjanes.

Finalment, podem saber la correlació entre les dues variables amb la funció cor():

cor(un_dd_year_1946$mean, un_dd_year_1946$democracy)
## [1] 0.1303807

Referències

Cheibub, José Antonio, Jennifer Gandhi, and James Raymond Vreeland. 2010. Democracy and Dictatorship Revisited.” Public Choice 143 (2-1): 67–101.
Voeten, Erik. 2017. Data and Analyses of Voting in the UN General Assembly.” In Routledge Handbook of International Organization, edited by Bob Reinalda. London: Routledge.
Previous
Next