Les dades més complexes però alhora més refinades que es poden trobar en relació al contacte entre països fan referència al comerç bilateral que s’estableix entre ells. En aquest sentit, Gleditsch (2002Gleditsch, Kristian Skrede. 2002. “Expanded Trade and Gdp Data.” Journal of Conflict Resolution 46 (5). Sage Publications Thousand Oaks: 712–24.) elabora una primera proposta metodològica centrada a resoldre el problema de falta de registres en segons quins països. Darrerament, aquesta proposta s’ha vist en certa manera superada per Barbieri, Keshk, and Pollins (2009Barbieri, Katherine, Omar MG Keshk, and Brian M Pollins. 2009. “Trading Data: Evaluating Our Assumptions and Coding Rules.” Conflict Management and Peace Science 26 (5). Sage Publications Sage UK: London, England: 471–91.), que té un abast més general.
Preparar les dades per a què R
les pugui manipular no és pas complicat, tot i que el següent fragment d’instruccions sembli enrevessat. Però pensa que en quatre línies escasses estas realitzant, de manera automatitzada, la descàrrega d’un arxiu comprimit des d’una URL, la descompressió d’un arxiu contingut en el .zip
inicial, la lectura per part d’R
de la matriu de dades com si es tractés d’una taula i la creació d’un objecte que pugui ser processat posteriorment.
Per obtenir les dades cal fer servir la funció read.table()
, que permet llegir arxius separats per comes (o tabulacions, o punt-i-coma). No obstant això, com que l’arxiu està comprimit, abans cal descarregar-lo per tenir-lo en memòria d’R
. La penúltima última línia ens dóna el nom de les variables i l’última el nombre d’observacions i de variables.
tmp <- tempfile()
download.file("http://www.correlatesofwar.org/data-sets/bilateral-trade/cow_trade_4.0/at_download/file",
tmp, method = "libcurl", mode = "wb")
file <- unzip(tmp, files = "COW_Trade_4.0/Dyadic_COW_4.0.csv")
trade <- read.table(file, header = TRUE, sep = ",", na = "-9", fill = TRUE)
names(trade)
## [1] "ccode1" "ccode2" "year"
## [4] "importer1" "importer2" "flow1"
## [7] "flow2" "smoothflow1" "smoothflow2"
## [10] "smoothtotrade" "spike1" "spike2"
## [13] "dip1" "dip2" "trdspike"
## [16] "tradedip" "bel_lux_alt_flow1" "bel_lux_alt_flow2"
## [19] "china_alt_flow1" "china_alt_flow2" "source1"
## [22] "source2" "version"
dim(trade)
## [1] 826893 23
Per tal de simplificar la gestió de l’exemple concret, farem servir només dades de pocs països. Especifiquem una llista de països candidats i després enviem l’objecte trade
original a una canonada que primer redueix el nombre de casos a aquells que són dels països candidats (funció filter()
) i després es queda només amb 5 variables (funció select()
), per acabar reanomenant la columna del comerç total (rename()
):
candidats <- c("United States of America", "France",
"Spain", "United Kingdom", "Italy",
"Argentina", "Mexico")
trade.candidats <- trade %>%
filter(importer1 %in% candidats & importer2 %in% candidats) %>%
select(year, importer1, importer2, smoothtotrade) %>%
rename(trade = smoothtotrade)
dim(trade.candidats)
## [1] 2894 4
Com que les dades només són unidireccionals (només hi ha una parella \(A-B\), però no la mateixa parella \(B-A\)), cal repetir-les per tal de poder trobar totes les possibles combinacions. Aquest és un cas específic d’aquesta matriu de dades, que no es troba en forma de xarxa, però en altres casos aquest pas no és necessari:
trade.candidats.repeticio <- trade.candidats %>%
select(importer1 = importer2, importer2 = importer1, year, trade)
trade.candidats <- bind_rows(trade.candidats, trade.candidats.repeticio) %>%
unique()
La Figura total de les importacions des del primer Estat candidat (en aquest cas, els Estats Units) en relació amb la resta de països es pot obtenir amb les següents instruccions:
imp.candidat.1 <- filter(trade.candidats, importer1 == candidats[1])
ggplot(imp.candidat.1, aes(x = year, y = trade, color = importer2)) +
geom_line()
També de manera simple podem obtenir quina és la proporció que cada país representa sobre el total d’importacions dels Estats Units, assumint que només la resta dels quatre Estats conformen el total de socis comercials. En aquest cas, hem d’agrupar les dades per anys i calcular-ne la proporció que cada país representa sobre el total anual. En aquest cas, però, en lloc d’obtenir un resum anual (com hem fet fins ara amb la funció summarize()
, el que fem és obtenir un valor per a cada any i parella d’importacions / exportacions (amb la funció mutate()
), de manera que la proporció és el valor d’un país concret smoothflow1
dividit per la suma dels demés països en aquell any concret (sum(smoothflow1)
), ja que hem agrupat per any.
imp.prop <- imp.candidat.1 %>%
group_by(year) %>%
mutate(prop.imp = trade / sum(trade))
Figure 4.2: Evolució del flux d’importacions des dels Estats Units, en proporció.
ggplot(imp.prop, aes(x = year, y = prop.imp, color = importer2)) +
geom_line()
Una altra manera de visualitzar dades de matrius complexes és a través de figures de mosaic. En aquest cas, però, s’ha de sacrificar la dimensió temporal (l’any), per tal de guanyar la dimensió de relació diàdica (un a un, amb tots els membres del grup)12 Fixa’t que falten valors a l’eix de importer1
, ja que les dades no estan repetides, i el que són importacions en aquest cas per Espanya estan calculades com exportacions des d’altres països. Però gestionar això requereix més complexitat, fora de l’abast i el propòsit d’aquests materials docents.
trade.candidats.2010 <- filter(trade.candidats, year == 2010)
ggplot(trade.candidats.2010,
aes(x = importer1, y = importer2)) +
geom_tile(aes(fill = trade))
Finalment, les matrius diàdiques també es poden mostrar amb figures de xarxa. En aquest cas, cada unitat d’anàlisi és un node que té un punt a l’espai, i les relacions s’expressen a través de línies que connecten les unitats. La mida de les línies sol respectar la proporció o el flux total d’intercanvi.
library(network)
trade.candidats.2010.t <- reshape2::acast(trade.candidats.2010,
importer1 ~ importer2, value.var = "trade", fill = 0)
trade.candidats.2010.t.n <- (trade.candidats.2010.t /
max(trade.candidats.2010.t, na.rm = TRUE)) + 0.001
xarxa <- network(trade.candidats.2010.t.n, matrix.type = "adjacency",
ignore.eval = FALSE, names.eval = "trade")
Un cop calculat l’objecte de relacions binàries, només cal passar-lo a la funció ggnet2()
de la llibreria GGally
, que és la que s’encarrega de la visualització:
library(GGally)
ggnet2(xarxa, label = TRUE, edge.size = "trade")