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)
DDdata
.Si visualitzem DDdata
obtenim el següent resultat:
iso2c | standardized_country | country | year | democracy | un_continent_name |
---|---|---|---|---|---|
AF | Afghanistan | Afghanistan | 1946 | 0 | Asia |
AL | Albania | Albania | 1946 | 0 | Europe |
AR | Argentina | Argentina | 1946 | 1 | Americas |
AU | Australia | Australia | 1946 | 1 | Oceania |
AT | Austria | Austria | 1946 | 1 | Europe |
BE | Belgium | Belgium | 1946 | 1 | Europe |
BT | Bhutan | Bhutan | 1946 | 0 | Asia |
BO | Bolivia | Bolivia | 1946 | 0 | Americas |
BR | Brazil | Brazil | 1946 | 1 | Americas |
BG | Bulgaria | Bulgaria | 1946 | 0 | Europe |
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:
- Vot a l’ONU: A partir de
un_roll_calls
iun_votes
hem creat el marc de dadesun_year_mean
, on obtenim la mitjana de vots a favor de cada país per any. Si la variablemean
é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))
year | country | country_code | mean |
---|---|---|---|
1946 | Afghanistan | AF | 0.4117647 |
1946 | Argentina | AR | 0.6976744 |
1946 | Australia | AU | 0.5581395 |
1946 | Belarus | BY | 0.4418605 |
1946 | Belgium | BE | 0.6046512 |
1946 | Bolivia (Plurinational State of) | BO | 0.6976744 |
1946 | Brazil | BR | 0.6046512 |
1946 | Canada | CA | 0.6428571 |
1946 | Chile | CL | 0.6046512 |
1946 | Colombia | CO | 0.3095238 |
- Democràcia: Unim el marc de dades
un_year_mean
amb el marc de dadesDDdata
, on ja tenim la variabledemocracy
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
.
country | country_code | year | mean | democracy | continent |
---|---|---|---|---|---|
Afghanistan | AF | 1946 | 0.4117647 | No democracy | Asia |
Argentina | AR | 1946 | 0.6976744 | Democracy | Americas |
Australia | AU | 1946 | 0.5581395 | Democracy | Oceania |
Belgium | BE | 1946 | 0.6046512 | Democracy | Europe |
Bolivia (Plurinational State of) | BO | 1946 | 0.6976744 | No democracy | Americas |
Brazil | BR | 1946 | 0.6046512 | Democracy | Americas |
Canada | CA | 1946 | 0.6428571 | Democracy | Americas |
Chile | CL | 1946 | 0.6046512 | Democracy | Americas |
Colombia | CO | 1946 | 0.3095238 | Democracy | Americas |
Costa Rica | CR | 1946 | 0.6388889 | Democracy | Americas |
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:
- 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?
- Quanta diferència hi ha entre una mitjana i l’altra des d’un punt de vista estadístic?
- 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