Juan Carlos Castillo - Septiembre 2017 jc-castillo.com
Desde un punto de vista operativo, las variables de nivel dos se pueden clasificar en dos tipos:
Para los ejemplos vamos a trabajar con la base de datos de ISSP 2009 (www.issp.org), modulo desigualdad económica (datos originales: ZA5400_v4-0-0.dta), y luego con la base del Quality of Government (http://qog.pol.gu.se/)
# Librerías
pacman::p_load(haven,descr,sjmisc,dplyr,sjPlot, ggplot2)
# Data ISSP (original)
issp2009=read_dta("ZA5400_v4-0-0.dta") # establecer antes directorio de trabajo con setwd
names(issp2009)
## [1] "V1" "V2" "DOI" "V3" "V4" "V5"
## [7] "C_ALPHAN" "V6" "V7" "V8" "V9" "V10"
## [13] "V11" "V12" "V13" "V14" "V15" "V16"
## [19] "V17" "V18" "V19" "V20" "V21" "V22"
## [25] "V23" "V24" "V25" "V26" "V27" "V28"
## [31] "V29" "V30" "V31" "V32" "V33" "V34"
## [37] "V35" "V36" "V37" "V38" "V39" "V40"
## [43] "V41" "V42" "V43" "V44" "V45" "V46"
## [49] "V47" "V48" "V49" "V50" "V51" "V52"
## [55] "V53" "V54" "V55" "V56" "V57" "V58"
## [61] "V59" "V60" "V61" "V62" "V63" "V64"
## [67] "V65" "V66" "V67" "V68" "V69" "V70"
## [73] "V71" "V72" "V73" "V74" "V75" "V73_TR"
## [79] "V74_TR" "V75_TR" "V76" "V77" "V78" "SEX"
## [85] "AGE" "MARITAL" "COHAB" "EDUCYRS" "DEGREE" "AR_DEGR"
## [91] "AT_DEGR" "AU_DEGR" "BE_DEGR" "BG_DEGR" "CH_DEGR" "CL_DEGR"
## [97] "CN_DEGR" "CY_DEGR" "CZ_DEGR" "DE_DEGR" "DK_DEGR" "EE_DEGR"
## [103] "ES_DEGR" "FI_DEGR" "FR_DEGR" "GB_DEGR" "HR_DEGR" "HU_DEGR"
## [109] "IL_DEGR" "IS_DEGR" "IT_DEGR" "JP_DEGR" "KR_DEGR" "LT_DEGR"
## [115] "LV_DEGR" "NO_DEGR" "NZ_DEGR" "PH_DEGR" "PL_DEGR" "PT_DEGR"
## [121] "RU_DEGR" "SE_DEGR" "SI_DEGR" "SK_DEGR" "TR_DEGR" "TW_DEGR"
## [127] "UA_DEGR" "US_DEGR" "VE_DEGR" "ZA_DEGR" "WRKST" "WRKHRS"
## [133] "ISCO88" "WRKTYPE" "NEMPLOY" "WRKSUP" "UNION" "SPWRKST"
## [139] "SPISCO88" "SPWRKTYP" "AR_RINC" "AT_RINC" "AU_RINC" "BE_RINC"
## [145] "BG_RINC" "CH_RINC" "CL_RINC" "CN_RINC" "CY_RINC" "CZ_RINC"
## [151] "DE_RINC" "DK_RINC" "EE_RINC" "ES_RINC" "FI_RINC" "FR_RINC"
## [157] "GB_RINC" "HR_RINC" "HU_RINC" "IL_RINC" "IS_RINC" "IT_RINC"
## [163] "JP_RINC" "KR_RINC" "LT_RINC" "LV_RINC" "NO_RINC" "NZ_RINC"
## [169] "PH_RINC" "PL_RINC" "PT_RINC" "RU_RINC" "SE_RINC" "SI_RINC"
## [175] "SK_RINC" "TR_RINC" "TW_RINC" "UA_RINC" "US_RINC" "VE_RINC"
## [181] "ZA_RINC" "AR_INC" "AT_INC" "AU_INC" "BE_INC" "BG_INC"
## [187] "CH_INC" "CL_INC" "CN_INC" "CY_INC" "CZ_INC" "DE_INC"
## [193] "DK_INC" "EE_INC" "ES_INC" "FI_INC" "FR_INC" "GB_INC"
## [199] "HR_INC" "HU_INC" "IL_INC" "IS_INC" "IT_INC" "JP_INC"
## [205] "KR_INC" "LT_INC" "LV_INC" "NO_INC" "NZ_INC" "PH_INC"
## [211] "PL_INC" "PT_INC" "RU_INC" "SE_INC" "SI_INC" "SK_INC"
## [217] "TR_INC" "TW_INC" "UA_INC" "US_INC" "VE_INC" "ZA_INC"
## [223] "HOMPOP" "HHCYCLE" "PARTY_LR" "AR_PRTY" "AT_PRTY" "AU_PRTY"
## [229] "BE_PRTY" "BG_PRTY" "CH_PRTY" "CL_PRTY" "CN_PRTY" "CY_PRTY"
## [235] "CZ_PRTY" "DE_PRTY" "DK_PRTY" "EE_PRTY" "ES_PRTY" "FI_PRTY"
## [241] "FR_PRTY" "GB_PRTY" "HR_PRTY" "HU_PRTY" "IL_PRTY" "IS_PRTY"
## [247] "IT_PRTY" "JP_PRTY" "KR_PRTY" "LT_PRTY" "LV_PRTY" "NO_PRTY"
## [253] "NZ_PRTY" "PH_PRTY" "PL_PRTY" "PT_PRTY" "RU_PRTY" "SE_PRTY"
## [259] "SI_PRTY" "SK_PRTY" "TR_PRTY" "TW_PRTY" "UA_PRTY" "US_PRTY"
## [265] "VE_PRTY" "ZA_PRTY" "VOTE_LE" "RELIG" "RELIGGRP" "ATTEND"
## [271] "TOPBOT" "AR_REG" "AT_REG" "AU_REG" "BE_REG" "BG_REG"
## [277] "CH_REG" "CL_REG" "CN_REG" "CY_REG" "CZ_REG" "DE_REG"
## [283] "DK_REG" "EE_REG" "ES_REG" "FI_REG" "FR_REG" "GB_REG"
## [289] "HR_REG" "HU_REG" "IL_REG" "IS_REG" "IT_REG" "JP_REG"
## [295] "KR_REG" "LT_REG" "LV_REG" "NO_REG" "NZ_REG" "PH_REG"
## [301] "PL_REG" "PT_REG" "RU_REG" "SE_REG" "SI_REG" "SK_REG"
## [307] "TR_REG" "TW_REG" "UA_REG" "US_REG" "VE_REG" "ZA_REG"
## [313] "AR_SIZE" "AT_SIZE" "AU_SIZE" "BE_SIZE" "BG_SIZE" "CH_SIZE"
## [319] "CL_SIZE" "CN_SIZE" "CY_SIZE" "CZ_SIZE" "DE_SIZE" "DK_SIZE"
## [325] "EE_SIZE" "ES_SIZE" "FI_SIZE" "FR_SIZE" "GB_SIZE" "HR_SIZE"
## [331] "HU_SIZE" "IL_SIZE" "IT_SIZE" "JP_SIZE" "KR_SIZE" "LT_SIZE"
## [337] "LV_SIZE" "NO_SIZE" "NZ_SIZE" "PH_SIZE" "PL_SIZE" "PT_SIZE"
## [343] "RU_SIZE" "SE_SIZE" "SI_SIZE" "SK_SIZE" "TR_SIZE" "TW_SIZE"
## [349] "UA_SIZE" "US_SIZE" "VE_SIZE" "ZA_SIZE" "URBRURAL" "ETHNIC"
## [355] "MODE" "SUBSCASE" "WEIGHT"
names(issp2009) <- tolower(names(issp2009)) # cambia a minúsculas
Algunos ajustes preliminares a los datos:
Primero vamos a seleccionar algunas variables de la base de datos (para detalles, ver libro de códigos):
issp2009r=issp2009 %>% select(v5,v10,sex,age) # dplyr
Y ahora recodificaciones y limpieza de perdidos
# v10: Esfuerzo
issp2009r$effort=issp2009r$v10
freq(issp2009r$effort) # freq es de descr
## Q1e Getting ahead: How important is hard work?
## Frequency Percent
## 1 17432 31.1169
## 2 24403 43.5605
## 3 10568 18.8644
## 4 2370 4.2306
## 5 539 0.9621
## 8 387 0.6908
## 9 322 0.5748
## Total 56021 100.0000
freq(to_label(issp2009r$effort)) # to_label de sjmisc
## Q1e Getting ahead: How important is hard work?
## Frequency Percent
## Essential 17432 31.1169
## Very important 24403 43.5605
## Fairly important 10568 18.8644
## Not very important 2370 4.2306
## Not important at all 539 0.9621
## Cant choose 387 0.6908
## NA 322 0.5748
## Total 56021 100.0000
issp2009r$effort=set_na(issp2009r$effort,na = c(8,9))
issp2009r$effort=rec(issp2009r$effort, rec = "rev") # Reverse code, sjmisc
freq(to_label(issp2009r$effort)) # ok.
## Q1e Getting ahead: How important is hard work?
## Frequency Percent Valid Percent
## Not important at all 539 0.9621 0.9745
## Not very important 2370 4.2306 4.2848
## Fairly important 10568 18.8644 19.1062
## Very important 24403 43.5605 44.1188
## Essential 17432 31.1169 31.5158
## NA's 709 1.2656
## Total 56021 100.0000 100.0000
freq(issp2009r$effort) # ok.
## Q1e Getting ahead: How important is hard work?
## Frequency Percent Valid Percent
## 1 539 0.9621 0.9745
## 2 2370 4.2306 4.2848
## 3 10568 18.8644 19.1062
## 4 24403 43.5605 44.1188
## 5 17432 31.1169 31.5158
## NA's 709 1.2656
## Total 56021 100.0000 100.0000
# Sex
freq(issp2009r$sex);freq(to_label(issp2009r$sex)) # freq es de descr
## R: Sex
## Frequency Percent
## 1 25184 44.95457
## 2 30792 54.96510
## 9 45 0.08033
## Total 56021 100.00000
## R: Sex
## Frequency Percent
## Male 25184 44.95457
## Female 30792 54.96510
## NA, refused 45 0.08033
## Total 56021 100.00000
issp2009r$sex=rec(issp2009r$sex, rec="1=0 [Male];2=1[Female]; 9=NA")
# Age
freq(issp2009r$age)
## R: Age
## Frequency Percent
## 15 6 1.071e-02
## 16 92 1.642e-01
## 17 131 2.338e-01
## 18 838 1.496e+00
## 19 895 1.598e+00
## 20 911 1.626e+00
## 21 861 1.537e+00
## 22 861 1.537e+00
## 23 830 1.482e+00
## 24 887 1.583e+00
## 25 877 1.565e+00
## 26 901 1.608e+00
## 27 923 1.648e+00
## 28 941 1.680e+00
## 29 959 1.712e+00
## 30 1016 1.814e+00
## 31 887 1.583e+00
## 32 1039 1.855e+00
## 33 951 1.698e+00
## 34 975 1.740e+00
## 35 1085 1.937e+00
## 36 1033 1.844e+00
## 37 1004 1.792e+00
## 38 1060 1.892e+00
## 39 1056 1.885e+00
## 40 1122 2.003e+00
## 41 970 1.731e+00
## 42 1089 1.944e+00
## 43 1069 1.908e+00
## 44 1021 1.823e+00
## 45 1095 1.955e+00
## 46 973 1.737e+00
## 47 1042 1.860e+00
## 48 1071 1.912e+00
## 49 1117 1.994e+00
## 50 1104 1.971e+00
## 51 984 1.756e+00
## 52 1012 1.806e+00
## 53 1007 1.798e+00
## 54 937 1.673e+00
## 55 986 1.760e+00
## 56 1008 1.799e+00
## 57 969 1.730e+00
## 58 915 1.633e+00
## 59 968 1.728e+00
## 60 1079 1.926e+00
## 61 905 1.615e+00
## 62 934 1.667e+00
## 63 814 1.453e+00
## 64 774 1.382e+00
## 65 807 1.441e+00
## 66 742 1.325e+00
## 67 738 1.317e+00
## 68 679 1.212e+00
## 69 663 1.183e+00
## 70 712 1.271e+00
## 71 540 9.639e-01
## 72 578 1.032e+00
## 73 516 9.211e-01
## 74 516 9.211e-01
## 75 471 8.408e-01
## 76 406 7.247e-01
## 77 360 6.426e-01
## 78 350 6.248e-01
## 79 307 5.480e-01
## 80 324 5.784e-01
## 81 222 3.963e-01
## 82 223 3.981e-01
## 83 157 2.803e-01
## 84 144 2.570e-01
## 85 121 2.160e-01
## 86 85 1.517e-01
## 87 63 1.125e-01
## 88 48 8.568e-02
## 89 57 1.017e-01
## 90 24 4.284e-02
## 91 8 1.428e-02
## 92 8 1.428e-02
## 93 8 1.428e-02
## 94 6 1.071e-02
## 95 4 7.140e-03
## 97 5 8.925e-03
## 98 7 1.250e-02
## 99 138 2.463e-01
## Total 56021 1.000e+02
issp2009r$age=set_na(issp2009r$age, na=c(99))
En este caso se habla también de datos “agregados” o “colapsados”. Para agregar, utilizaremos primero una función simple para hacerlo en base al promedio
Por ejemplo, agregar a la base de datos el promedio de edad por país (v5)
issp2009r = issp2009r %>% group_by(v5) %>% mutate(meanage = mean(age, na.rm = TRUE))
# Otros posibles agregados:
# Desviación estándar
issp2009r = issp2009r %>% group_by(v5) %>% mutate(sdage = sd(age, na.rm = TRUE))
# Tamaño
issp2009r = issp2009r %>% group_by(v5) %>% mutate(count = length(v5))
# Visualizar datos en tabla
issp2009r %>% group_by(Country=to_label(v5)) %>% summarise("Mean Age"=mean(meanage), "SD Age"=mean(sdage), N=mean(count)) %>% print(n = nrow(.))
## # A tibble: 41 x 4
## Country `Mean Age` `SD Age` N
## <fctr> <dbl> <dbl> <dbl>
## 1 AR-Argentina 46.67696 17.48260 1133
## 2 AU-Australia 52.53437 16.77629 1525
## 3 AT-Austria 45.06477 17.08093 1019
## 4 BE-Belgium 48.88430 17.63474 1115
## 5 BG-Bulgaria 49.12638 17.24295 1000
## 6 CL-Chile 46.56146 17.63539 1505
## 7 CN-China 43.01661 14.12625 3010
## 8 TW-Taiwan 44.81293 16.59189 2026
## 9 HR-Croatia 45.70833 17.56166 1201
## 10 CY-Cyprus 42.62400 15.41487 1000
## 11 CZ-Czech Republic 46.78803 16.78173 1205
## 12 DK-Denmark 50.20817 16.95529 1518
## 13 EE-Estonia 50.94428 18.76131 1005
## 14 FI-Finland 47.61889 16.46157 880
## 15 FR-France 55.06425 15.66263 2817
## 16 DE-Germany 49.55115 17.89945 1395
## 17 HU-Hungary 46.16931 15.92985 1010
## 18 IS-Iceland 46.05597 17.34253 947
## 19 IL-Israel 43.45118 17.53211 1193
## 20 IT-Italy 48.32986 17.05597 1084
## 21 JP-Japan 49.22145 17.58666 1296
## 22 KR-South Korea 43.50534 15.24948 1599
## 23 LV-Latvia 44.36109 16.95700 1069
## 24 LT-Lithuania 51.47937 18.44074 1023
## 25 NZ-New Zealand 50.57589 17.00656 935
## 26 NO-Norway 48.00000 15.22970 1246
## 27 PH-Philippines 42.48000 16.09696 1200
## 28 PL-Poland 45.95487 17.10345 1263
## 29 PT-Portugal 49.37500 18.11283 1000
## 30 RU-Russia 46.83344 18.41932 1603
## 31 SK-Slovakia 46.26603 16.33037 1159
## 32 SI-Slovenia 46.65540 17.82134 1065
## 33 ZA-South Africa 39.33222 15.67957 3305
## 34 ES-Spain 47.09383 17.89235 1215
## 35 SE-Sweden 48.45734 16.34343 1137
## 36 CH-Switzerland 50.06509 17.66004 1229
## 37 TR-Turkey 41.19066 15.47256 1569
## 38 UA-Ukraine 48.16352 17.65118 2012
## 39 GB-Great Britain and/or United Kingdom 50.13375 17.19835 958
## 40 US-United States 49.52659 17.07174 1581
## 41 VE-Venezuela 36.78535 15.05744 969
# Exploración gráfica
bar_age=ggplot(issp2009r, aes(reorder(to_label(v5), -meanage),meanage))
bar_age + geom_bar(stat = "summary") +
coord_flip() +
theme(axis.text=element_text(size=5),
axis.title=element_text(size=10,face="bold")) +
labs(x=" ", y="Age ")
## No summary function supplied, defaulting to `mean_se()
box_age= ggplot(issp2009r, aes(reorder(to_label(v5), -meanage),age))
box_age + geom_boxplot() +
coord_flip() +
theme(axis.text=element_text(size=5),
axis.title=element_text(size=10,face="bold")) +
labs(x=" ", y="Age ")
## Don't know how to automatically pick scale for object of type labelled. Defaulting to continuous.
## Warning: Removed 138 rows containing non-finite values (stat_boxplot).
Para esto usaremos la base del Quality of Government Indicators (QoG). La base es algo pesada, bajar directamente del sitio original: http://www.qogdata.pol.gu.se/data/qog_std_ts_jan17.dta
qog=read_stata("/media/ntfs/Dropbox/proyectos y papers compartidos/Meritocracy and preferences/meritocracy_pref_international/data/qog/qog_std_ts_jan17.dta")
dim(qog) # tenemos 2070 variables para 14981 filas (países/años)
## [1] 14981 2070
qog %>% group_by(cname) %>% summarise() # 211 países
## # A tibble: 211 x 1
## cname
## <chr>
## 1 Afghanistan
## 2 Albania
## 3 Algeria
## 4 Andorra
## 5 Angola
## 6 Antigua and Barbuda
## 7 Argentina
## 8 Armenia
## 9 Australia
## 10 Austria
## # ... with 201 more rows
qog %>% group_by(year) %>% summarise() # 71 años países
## # A tibble: 71 x 1
## year
## <dbl>
## 1 1946
## 2 1947
## 3 1948
## 4 1949
## 5 1950
## 6 1951
## 7 1952
## 8 1953
## 9 1954
## 10 1955
## # ... with 61 more rows
211*71 # número de filas
## [1] 14981
# Extract 2009 data
qog2009=qog %>% filter(year==2009) %>% select(wdi_gini,cname)
qog2009 %>% group_by(cname) %>% na.omit() %>% summarise_all(mean)
## # A tibble: 74 x 2
## cname wdi_gini
## <chr> <dbl>
## 1 Argentina 45.27
## 2 Armenia 29.58
## 3 Austria 31.50
## 4 Belarus 27.69
## 5 Belgium 28.70
## 6 Bolivia 49.65
## 7 Botswana 60.46
## 8 Brazil 53.87
## 9 Bulgaria 33.82
## 10 Burkina Faso 39.76
## # ... with 64 more rows
names(qog2009)
## [1] "wdi_gini" "cname"
El procedimiento ahora corresponde a un “merge”, que como sabemos requiere un vector (variable) que identifique de la misma manera en ambas bases de datos a los casos presentes, en este caso países.
En general no es fácil que en ambas bases de datos exista una columna que identifique de la misma manera a las unidades de nivel 2. Por ejemplo, si son países, puede que estos se identifiquen por un código diferente, o que sus nombres en algunos casos se escriban distinto (ej: con/sin acento, distintos idiomas,etc). Si este es el caso, la opción más básica es la “manual”, es decir, generar una variable en alguna de las bases de datos a combinar que posea valores idénticos a los de la otra base de datos.
Por ejemplo, en la base ISSP la variable de identificación de país es v5, que posee un código y un valor:
issp2009r %>% group_by("Country"=to_label(v5)) %>% summarise("Country code"=mean(v5))
## # A tibble: 41 x 2
## Country `Country code`
## <fctr> <dbl>
## 1 AR-Argentina 32
## 2 AU-Australia 36
## 3 AT-Austria 40
## 4 BE-Belgium 56
## 5 BG-Bulgaria 100
## 6 CL-Chile 152
## 7 CN-China 156
## 8 TW-Taiwan 158
## 9 HR-Croatia 191
## 10 CY-Cyprus 196
## # ... with 31 more rows
En base a esto, se puede generar una variable en la base qog con estos mismos códigos para los países:
str(qog2009$cname)
## atomic [1:211] Afghanistan Albania Algeria Andorra ...
## - attr(*, "label")= chr "Country Name"
## - attr(*, "format.stata")= chr "%29s"
qog2009 %>% group_by(cname)
## # A tibble: 211 x 2
## # Groups: cname [211]
## wdi_gini cname
## <dbl> <chr>
## 1 NA Afghanistan
## 2 NA Albania
## 3 NA Algeria
## 4 NA Andorra
## 5 NA Angola
## 6 NA Antigua and Barbuda
## 7 NA Azerbaijan
## 8 45.27 Argentina
## 9 NA Australia
## 10 31.50 Austria
## # ... with 201 more rows
# Generar variable para merge igual a la de ISSP
qog2009$v5=qog2009$cname
# Y ahora recodificar de acuerdo a ISSP
qog2009$v5=rec(qog2009$cname, rec="Argentina=32;Australia=36") # ... y así para todos
qog2009 %>% group_by(v5) %>% select(v5,cname) %>% slice(1:10)
## # A tibble: 12 x 2
## # Groups: v5 [3]
## v5 cname
## <dbl> <chr>
## 1 32 Argentina
## 2 36 Australia
## 3 NA Afghanistan
## 4 NA Albania
## 5 NA Algeria
## 6 NA Andorra
## 7 NA Angola
## 8 NA Antigua and Barbuda
## 9 NA Azerbaijan
## 10 NA Austria
## 11 NA Bahamas
## 12 NA Bahrain
Luego, cuando la variable esté lista, se puede hacer el merge. Pero antes de mostrar el procedimiento de merge, veamos otra posibilidad que nos ahorra la recodificación al trabajar con países, que es mediante la librería “countrycode”, diseñada específicamente para estos casos. Para utilizarla, se requiere tener claro los formatos de las variables de input y de output. En este caso, el input es la variable que viene en la base de datos (nombre de los países en qog2009),y queremos el output con los códigos en que vienen los países en ISSP (v5).
La base ISSP (ver codebook) sigue el estandar ISO-3166 para los códigos y labels de los países, que es uno de los formatos tradicionales para codificar países. Este entonces es el output que queremos generar en la base qog2009 para luego realizar el merge.
pacman::p_load(countrycode)
qog2009$v5=countrycode(qog2009$cname, 'country.name','iso3n') # iso3n es ISO-3,para detalles ver documentación librería ?countrycode
## Warning in countrycode(qog2009$cname, "country.name", "iso3n"): Some values were not matched unambiguously: Germany, East, Germany, West, Korea, North, Micronesia, Serbia and Montenegro, Tibet, Yemen, North, Yugoslavia
## Warning in countrycode(qog2009$cname, "country.name", "iso3n"): Some strings were matched more than once, and therefore set to <NA> in the result: Germany, West,280,276
qog2009 %>% group_by(v5) %>% select(v5,cname) %>% slice(1:10)
## # A tibble: 211 x 2
## # Groups: v5 [195]
## v5 cname
## <int> <chr>
## 1 4 Afghanistan
## 2 8 Albania
## 3 12 Algeria
## 4 20 Andorra
## 5 24 Angola
## 6 28 Antigua and Barbuda
## 7 31 Azerbaijan
## 8 32 Argentina
## 9 36 Australia
## 10 40 Austria
## # ... with 201 more rows
(Se generan algunos warnings por países no transformados, tener en cuenta por si luego falta información).
Ahora que tenemos una variable identica para los países en ambas bases de datos, es posible realizar el merge de ambas bases:
data_tot <- merge(issp2009r,qog2009,by=c("v5"))
# Para ver el resultado
data_tot %>% group_by("Country"=cname) %>% summarise("Country code"=mean(v5),"Gini"=mean(wdi_gini))
## # A tibble: 44 x 3
## Country `Country code` Gini
## <chr> <dbl> <dbl>
## 1 Argentina 32 45.27
## 2 Australia 36 NA
## 3 Austria 40 31.50
## 4 Belgium 56 28.70
## 5 Bulgaria 100 33.82
## 6 Chile 152 52.00
## 7 China 156 NA
## 8 Croatia 191 33.18
## 9 Cyprus (-1974) 196 NA
## 10 Cyprus (1975-) 196 32.11
## # ... with 34 more rows
Atención: vemos que hay missings para algunos países en la variable Gini, probablemente porque para ese año no hay información del indicador, eventualmente se puede recurrir a otras fuentes de información para completar.
Vamos a considerar la variable de esfuerzo (issp) según desigualdad (qog).
names(data_tot)
## [1] "v5" "v10" "sex" "age" "effort" "meanage"
## [7] "sdage" "count" "wdi_gini" "cname"
dat_scat=data_tot %>% group_by(v5) %>% select(wdi_gini,effort) %>% na.omit() %>% summarise_all(mean)
## Adding missing grouping variables: `v5`
names(dat_scat)
## [1] "v5" "wdi_gini" "effort"
sjp.scatter(dat_scat$wdi_gini, dat_scat$effort,
dot.labels = to_label(dat_scat$v5),
fit.line = TRUE,
show.ci = TRUE
)