Para este ejercicio trabajaremos con la base de datos del Barómetro de las Américas, del Latin American Public Opinion Project (LAPOP), ubicado en la Universidad de Vanderbilt.
LAPOP es una de las principales fuentes de información sobre cultura política en las Américas. El compomente central del proyecto son encuestas bienales desde el 2004 en casi todos los países del hemisferio.
Los datos con los que vamos a trabajar deben citarse de la siguiente manera:
Fuente: El Barómetro de las Américas por el Proyecto de Opinión Pública de América Latina (LAPOP), www.LapopSurveys.org.
Agradecemos al proyecto de Opinión Pública de América Latina (LAPOP) y a sus principales donantes (la Agencia de los Estados Unidos para el Desarrollo Internacional, el Programa de las Naciones Unidas para el Desarrollo, el Banco Interamericano de Desarrollo y Vanderbilt University) por poner a disposición los datos.
Para acceder a los datos es necesario ir al siguiente enlace:
http://www.vanderbilt.edu/lapop-espanol/acceso-gratuito.php
Ahí, entrar a la opción de “acceso gratuito”, luego seleccionar “free access” y aceptar los términos de uso. Una vez hecho eso podremos ver las bases de datos por año y por país. En este ejercicio trabajaremos con los “Merged Datasets”, que integra todas las bases de datos de todos los países entre el 2004 y el 2012. Debemos descargar el archivo en versión SPSS y el “Core Questionnaire” en español. El proceso puede ir tomando tiempo ya que es un archivo comprimido (ZIP) de casi 40Mb. Al descomprimirlo en nuestro directorio de trabajo, tendremos una base de datos en SPSS de 451Mb. Se sugiere cambiar el nombre de la base de datos a “lapop_04_12,sav”.
Para poder realizar los procedimientos que se muestran en este talles, usted deberá instalar los siguientes paquetes del R. Si no los tiene en su computadora asegúrese de descargarlos desde algún CRAN:
library(foreign) # Para importar datos
library(ggplot2) # Para hacer gráficos tipo Ggplot
library(Rmisc) # Para poder usar la funcion summarySE
## Loading required package: lattice
## Loading required package: plyr
library(descr) # Para poder usar la función crosstab y compmeans
Para el paquete “descr”, se puede ver el manual en:
Para importar los datos del SPSS al R debemos cargar el paquete “foreign” y usar la siguiente sintaxis:
library(foreign)
lapop <- as.data.frame(read.spss("lapop_04_12.sav"))
El proceso tomará algún tiempo ya que el archivo es bastante grande. Recuerde que el R distingue mayúsculas de minúsculas y cualquier error de tipeo impedirá que el comando se ejecute adecuadamente.
El “Índice de Apoyo al Sistema Político” (de ahora en adelante ASP), evalúa el grado en que los ciudadanos de un país otorgan legitimidad a las instituciones y al sistema político en su conjunto. El índice se calcula sobre la base de las respuestas a 5 preguntas (revise el cuestionario):
En cada pregunta el entrevistado debe responder usando una escala de 1 a 7, donde 1 = “Nada” y 7 = “Mucho”.
El índice ASP resume estos cinco indicadores y representa el apoyo al sistema político en una escala de 0 a 100. Para ello será necesario recodificar y agregar los valores de las variables de la siguiente manera:
\(ASP=([(\sum_{i=i}^{n}I_{i}) - 5]/30)*100\)
Donde: I = las variables del índice.
Primero veamos cómo se presentan los valores de una variable específica:
str(lapop$b1)
## Factor w/ 10 levels "1 Nada","2","3",..: 10 3 4 2 10 6 4 4 2 2 ...
table(lapop$b1)
##
## 1 Nada 2 3 4 5 6 7 Mucho DK NR
## 18379 14105 25208 32566 28381 12811 10249 8343 1161
## N/A
## 138
La variable b1 está representada en la base de datos como un factor. Para poder sumarla a las demás es necesario convertirla en un vector numérico y excluir los valores perdidos (DK, NR y N/A):
lapop$b1.r <- as.numeric(lapop$b1)
lapop$b1.r[lapop$b1.r > 7] <- NA
table(lapop$b1.r)
##
## 1 2 3 4 5 6 7
## 18379 14105 25208 32566 28381 12811 10249
Luego se continua con las demás variables:
lapop$b2.r <- as.numeric(lapop$b2)
lapop$b3.r <- as.numeric(lapop$b3)
lapop$b4.r <- as.numeric(lapop$b4)
lapop$b6.r <- as.numeric(lapop$b6)
lapop$b2.r[lapop$b2.r > 7] <- NA
lapop$b3.r[lapop$b3.r > 7] <- NA
lapop$b4.r[lapop$b4.r > 7] <- NA
lapop$b6.r[lapop$b6.r > 7] <- NA
lapop$asp <- (((lapop$b1.r+lapop$b2.r+lapop$b3.r+lapop$b4.r+lapop$b6.r)-5)/30)*100
hist(lapop$asp)
# Para ver cuántos missing values tiene el índice:
miss.asp <- is.na(lapop$asp)
t1 <- table(miss.asp)
t1
## miss.asp
## FALSE TRUE
## 133707 17634
prop.table(t1)*100
## miss.asp
## FALSE TRUE
## 88.34817 11.65183
Seleccionemos un país y un año para ver más de cerca cómo es el apoyo al sistema político en ese país. En este caso, Perú 2012:
lapop.pe12 <- subset(lapop, pais=="Perú" & year=="2012")
Usaremos el paquete ggplot2, que produce gráficos de alta calidad:
library(ggplot2)
hist1 <- ggplot(lapop.pe12, aes(x=asp)) + geom_histogram() +
xlab("Índice de Apoyo al Sistema político") +
ylab("Número de entrevistados") +
ggtitle("Perú 2012: Apoyo al Sistema Político")
hist1
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
Exportamos el gráfico a un archivo externo (jpg)
jpeg("histograma1.jpg")
hist1
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
dev.off()
## pdf
## 2
Para más detalles sobre cómo guardar gráficos de R en archivos externos para incrustarnos en un documento (word, por ejemplo), ver:
Podemos ver cómo está distribuido el ASP según tipos de localidades, para ello usaremos un gráfico de cajas:
table(lapop.pe12$tamano)
##
## Capital nacional (área metropolitana)
## 504
## Ciudad grande
## 336
## Ciudad mediana
## 168
## Ciudad pequeña
## 144
## Área rural
## 348
## DK
## 0
## NR
## 0
## N/A
## 0
lapop.pe12$tamano <- factor(lapop.pe12$tamano) # para eliminar las etiquetas vacías
caja1 <- ggplot(lapop.pe12, aes(x=tamano, y=asp)) + geom_boxplot() +
xlab("Tamaño de localidad") + ylab("Índice de Apoyo al Sistema Político") +
ggtitle("Perú 2012: Índice de Apoyo al Sistema Político,\n según tamaño de localidad") +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5))
caja1
## Warning: Removed 93 rows containing non-finite values (stat_boxplot).
Podemos invertir el gráfico de cajas con la opción coord_flip() y obtener el siguiente resultado:
caja1 <- ggplot(lapop.pe12, aes(x=tamano, y=asp)) + geom_boxplot() +
xlab("Tamaño de localidad") + ylab("Índice de Apoyo al Sistema Político") +
ggtitle("Perú 2012: Índice de Apoyo al Sistema Político,\n según tamaño de localidad") +
coord_flip()
caja1
## Warning: Removed 93 rows containing non-finite values (stat_boxplot).
Comparemos el índice de apoyo al sistema político según eficacia percibida del gobierno en el combate a la pobreza (pregunta n1: “¿Hasta qué punto diría que el gobierno actual combate la pobreza?”, 1= Nada; 7 = Mucho). Requiere paquete “Rmisc”
library(Rmisc)
table(lapop.pe12$n1)
##
## 1 Nada 2 3 4 5 6 7 Mucho DK NR
## 96 170 331 434 296 116 36 17 4
## N/A
## 0
efic.tab <- summarySE(lapop.pe12, measurevar="asp", groupvars="n1", na.rm=T)
efic.tab
## n1 N asp sd se ci
## 1 1 Nada 86 37.67442 22.09942 2.3830415 4.738125
## 2 2 158 39.89451 18.32096 1.4575374 2.878912
## 3 3 306 44.72767 15.54880 0.8888660 1.749086
## 4 4 413 51.11380 14.93774 0.7350383 1.444893
## 5 5 286 56.02564 17.47002 1.0330241 2.033325
## 6 6 113 58.52507 17.02553 1.6016271 3.173419
## 7 7 Mucho 31 61.93548 24.62721 4.4231772 9.033333
## 8 DK 10 39.66667 21.79874 6.8933677 15.593881
## 9 NR 4 70.00000 25.09242 12.5462109 39.927642
# Excluimos las dos últimas filas
efic.tab <- efic.tab[-(8:9),]
efic.tab
## n1 N asp sd se ci
## 1 1 Nada 86 37.67442 22.09942 2.3830415 4.738125
## 2 2 158 39.89451 18.32096 1.4575374 2.878912
## 3 3 306 44.72767 15.54880 0.8888660 1.749086
## 4 4 413 51.11380 14.93774 0.7350383 1.444893
## 5 5 286 56.02564 17.47002 1.0330241 2.033325
## 6 6 113 58.52507 17.02553 1.6016271 3.173419
## 7 7 Mucho 31 61.93548 24.62721 4.4231772 9.033333
Generamos el gráfico de medias con barras de error:
barra.err1 <- ggplot(efic.tab, aes(x=n1, y=asp)) + geom_point() + ylim(0, 100) +
geom_errorbar(aes(ymin=asp-ci, ymax=asp+ci), width=0.2) +
ylab("Índice de apoyo al sistema político") +
xlab("¿Hasta qué punto diría que el gobierno combate la pobreza") +
ggtitle("Perú 2012: Intervalo de confianza al 95% de la media del\n Índice de apoyo al sistema político, según eficacia percibida del gobierno\n en el combate a la pobreza?")
barra.err1
Generamos una tabla de medias, con sus respectivos errores estándar e intervalos de confianza por país y año de la encuesta:
asp.pais<- summarySE(lapop, measurevar="asp", groupvars=c("pais", "year"), na.rm=T)
asp.pais
## pais year N asp sd se ci
## 1 México 2004 1362 57.73128 20.70637 0.5610680 1.1006519
## 2 México 2006 1357 60.81552 20.10395 0.5457472 1.0706005
## 3 México 2008 1336 58.11876 22.81235 0.6241182 1.2243591
## 4 México 2010 1370 56.35036 21.18586 0.5723818 1.1228405
## 5 México 2012 1391 55.53559 22.14765 0.5938326 1.1649049
## 6 Guatemala 2004 1279 48.91843 20.11451 0.5624374 1.1034020
## 7 Guatemala 2006 1269 52.27213 20.61943 0.5788232 1.1355566
## 8 Guatemala 2008 1179 48.58072 23.97931 0.6983606 1.3701694
## 9 Guatemala 2010 1242 49.60279 21.46075 0.6089534 1.1946919
## 10 Guatemala 2012 1313 52.14268 19.17494 0.5291780 1.0381274
## 11 El Salvador 2004 1390 59.10312 21.07300 0.5652219 1.1087808
## 12 El Salvador 2006 1565 55.12886 21.85828 0.5525337 1.0837848
## 13 El Salvador 2008 1474 51.67345 23.00967 0.5993239 1.1756192
## 14 El Salvador 2010 1516 58.76429 18.92251 0.4859920 0.9532884
## 15 El Salvador 2012 1236 56.05448 21.99810 0.6257141 1.2275802
## 16 Honduras 2004 1256 50.93153 23.75560 0.6703030 1.3150381
## 17 Honduras 2006 1434 55.35100 19.60899 0.5178223 1.0157710
## 18 Honduras 2008 1255 46.66932 19.20560 0.5421333 1.0635883
## 19 Honduras 2010 1494 60.37706 16.69185 0.4318463 0.8470899
## 20 Honduras 2012 1517 41.10965 20.92848 0.5373347 1.0539981
## 21 Nicaragua 2004 1123 50.04749 22.10272 0.6595623 1.2941143
## 22 Nicaragua 2006 1579 45.00739 23.32620 0.5870201 1.1514214
## 23 Nicaragua 2008 1285 47.84436 23.15344 0.6458980 1.2671312
## 24 Nicaragua 2010 1334 51.51174 22.76514 0.6232931 1.2227423
## 25 Nicaragua 2012 1531 60.57914 23.42059 0.5985636 1.1740919
## 26 Costa Rica 2004 1407 67.41057 19.37704 0.5165833 1.0133570
## 27 Costa Rica 2006 1433 63.78460 20.24787 0.5348799 1.0492321
## 28 Costa Rica 2008 1338 63.29347 20.31453 0.5553653 1.0894823
## 29 Costa Rica 2010 1354 62.63417 21.68640 0.5893566 1.1561520
## 30 Costa Rica 2012 1336 55.35429 20.97834 0.5739419 1.1259262
## 31 Panamá 2004 1513 52.02908 21.80737 0.5606396 1.0997136
## 32 Panamá 2006 1412 46.94523 20.92968 0.5569871 1.0926119
## 33 Panamá 2008 1422 49.02250 21.50065 0.5701666 1.1184586
## 34 Panamá 2010 1420 60.49765 18.28107 0.4851291 0.9516473
## 35 Panamá 2012 1460 44.28311 22.66252 0.5931052 1.1634300
## 36 Colombia 2004 1326 56.73957 20.53424 0.5639062 1.1062464
## 37 Colombia 2006 1340 56.65423 20.63609 0.5637351 1.1059001
## 38 Colombia 2008 1355 60.85609 20.71324 0.5627020 1.1038624
## 39 Colombia 2010 1322 60.39586 19.07578 0.5246464 1.0292310
## 40 Colombia 2012 1338 55.33632 20.38214 0.5572136 1.0931081
## 41 Ecuador 2004 2732 42.21571 20.55229 0.3932058 0.7710109
## 42 Ecuador 2006 2663 37.60170 21.51975 0.4170151 0.8177063
## 43 Ecuador 2008 2648 44.44864 20.58392 0.4000085 0.7843608
## 44 Ecuador 2010 2614 50.29967 19.55014 0.3823817 0.7498017
## 45 Ecuador 2012 1203 52.38293 21.52514 0.6206019 1.2175834
## 46 Bolivia 2004 2807 45.92804 19.20143 0.3624201 0.7106369
## 47 Bolivia 2006 2541 52.03594 18.96283 0.3761845 0.7376596
## 48 Bolivia 2008 2584 51.99045 17.70961 0.3483876 0.6831473
## 49 Perú 2006 1364 44.00538 19.55183 0.5293955 1.0385183
## 50 Perú 2008 1398 44.17024 19.94801 0.5335142 1.0465754
## 51 Perú 2010 1374 46.68122 19.09627 0.5151755 1.0106164
## 52 Perú 2012 1407 49.44800 18.22805 0.4859518 0.9532686
## 53 Paraguay 2006 1017 38.80367 25.59186 0.8024931 1.5747336
## 54 Paraguay 2008 1070 29.18380 23.01734 0.7036605 1.3807126
## 55 Paraguay 2010 1235 45.67611 20.56906 0.5853032 1.1482995
## 56 Paraguay 2012 1302 46.65899 22.05882 0.6113315 1.1993034
## 57 Chile 2006 1450 53.02759 21.82334 0.5731089 1.1242118
## 58 Chile 2008 1438 54.24664 22.06919 0.5819784 1.1416183
## 59 Uruguay 2006 1070 64.53271 20.96281 0.6408519 1.2574703
## 60 Uruguay 2008 1340 60.56716 22.20281 0.6065347 1.1898616
## 61 Uruguay 2010 1324 68.15458 19.91019 0.5471814 1.0734378
## 62 Uruguay 2012 1333 59.39485 21.40737 0.5863383 1.1502471
## 63 Brasil 2006 1117 43.86153 24.32173 0.7277261 1.4278655
## 64 Brasil 2008 1140 43.79532 22.04723 0.6529826 1.2811839
## 65 Brasil 2010 2176 49.43321 23.34757 0.5005094 0.9815266
## 66 Brasil 2012 1411 45.37680 22.78531 0.6065847 1.1899056
## 67 Venezuela 2006 1365 56.99634 25.22619 0.6827872 1.3394269
## 68 Venezuela 2008 1279 48.97837 26.06151 0.7287261 1.4296309
## 69 Argentina 2008 1171 46.64674 22.01333 0.6432906 1.2621321
## 70 República Dominicana 2006 1387 57.22903 21.92268 0.5886476 1.1547365
## 71 República Dominicana 2008 1289 56.98733 23.16414 0.6451932 1.2657449
## 72 República Dominicana 2010 1355 53.59902 22.85997 0.6210206 1.2182671
## 73 República Dominicana 2012 1407 48.25397 22.69515 0.6050427 1.1868837
## 74 Haití 2006 1440 42.04398 23.30826 0.6142266 1.2048755
## 75 Haití 2008 1387 40.10574 19.77560 0.5309962 1.0416430
## 76 Haití 2010 1569 33.36308 16.02327 0.4045197 0.7934565
## 77 Haití 2012 1755 45.07502 18.83666 0.4496405 0.8818877
## 78 Jamaica 2006 1210 48.38017 21.88781 0.6292302 1.2345043
## 79 Jamaica 2008 1258 52.15686 21.28160 0.6000174 1.1771460
## 80 Jamaica 2010 1286 48.71436 21.52642 0.6002766 1.1776297
## 81 Jamaica 2012 1356 53.85202 20.53930 0.5577708 1.0941880
## 82 Guyana 2006 1269 52.76858 23.76618 0.6671579 1.3088549
## 83 Guyana 2008 2239 56.42847 22.21126 0.4694033 0.9205115
## 84 Guyana 2010 1335 54.67915 21.89760 0.5993161 1.1757048
## 85 Guyana 2012 1395 58.45878 20.43891 0.5472308 1.0734847
## 86 Belice 2008 1035 58.76651 26.75342 0.8315897 1.6317960
## 87 Belice 2010 1302 53.56375 21.53789 0.5968945 1.1709812
## 88 Belice 2012 1426 61.81159 19.97929 0.5290787 1.0378567
## 89 Estados Unidos 2006 561 66.70232 18.82666 0.7948623 1.5612758
## 90 Estados Unidos 2008 1494 54.41990 21.33560 0.5519878 1.0827540
## 91 Canadá 2006 568 69.33685 19.29206 0.8094767 1.5899390
## 92 Canadá 2008 1948 64.99316 20.24545 0.4587045 0.8996036
Hacemos el gráfico para el año 2012
asp.al12 <- subset(asp.pais, year=="2012")
barra.err2 <- ggplot(asp.al12, aes(x=reorder(pais, asp), y=asp)) + geom_point() +
geom_errorbar(aes(ymin=asp-ci, ymax=asp+ci), width=0.2) +
ylab("Índice de apoyo al sistema político") + xlab("") +
ggtitle("LAPOP 2012: Intervalo de confianza al 95% de la media del\n Índice de apoyo al sistema político, según país") + coord_flip()
barra.err2
Podemos automatizar el proceso para todos los años usando una función con “loop” o bucle:
year2 <- c("2004", "2006", "2008", "2010", "2012")
for (i in year2){
data <- subset(asp.pais, year==i)
barra.err2 <- ggplot(data, aes(x=reorder(pais, asp), y=asp)) + geom_point() +
geom_errorbar(aes(ymin=asp-ci, ymax=asp+ci), width=0.2) +
ylab("Índice de apoyo al sistema político") + xlab("") +
ggtitle(paste("LAPOP ", i,": Intervalo de confianza al 95% de la media del\n Índice de apoyo al sistema político, según país")) + coord_flip()
print(barra.err2)
}
En la encuesta de LAPOP la variable VIC1EXT contiene los datos de las respuestas a la pregunta “¿Ha sido usted víctima de algún acto de delincuencia en los últimos 12 meses?”. Hagamos un gráfico que compare las respuestas positivas entre los países que fueron encuestados el 2012.
lapop12 <- subset(lapop, year=="2012")
Reconvertimos como factor la variable país para que no aparezcan los países que no fueron incluidos en la base de datos del 2012:
lapop12$pais <- factor(lapop12$pais)
Pedimos la tabla y la grabamos en un objeto “t1”
t1 <- table(lapop12$pais, lapop12$vic1ext)
t1
##
## Sí No DK NR N/A
## México 360 1197 2 1 0
## Guatemala 313 1193 1 2 0
## El Salvador 260 1230 6 1 0
## Honduras 321 1393 12 2 0
## Nicaragua 226 1459 1 0 0
## Costa Rica 261 1231 5 1 0
## Panamá 108 1510 1 1 0
## Colombia 318 1193 1 0 0
## Ecuador 422 1078 0 0 0
## Perú 419 1074 2 5 0
## Paraguay 230 1278 2 0 0
## Uruguay 344 1168 0 0 0
## Brasil 246 1253 1 0 0
## República Dominicana 288 1223 1 0 0
## Haití 359 1463 5 9 0
## Jamaica 127 1371 1 1 0
## Guyana 122 1404 2 1 0
## Belice 166 1343 3 0 0
Eliminamos las columnas de las frecuencias de valores perdidos
t2 <- t1[, -c(3:5)]
t2
##
## Sí No
## México 360 1197
## Guatemala 313 1193
## El Salvador 260 1230
## Honduras 321 1393
## Nicaragua 226 1459
## Costa Rica 261 1231
## Panamá 108 1510
## Colombia 318 1193
## Ecuador 422 1078
## Perú 419 1074
## Paraguay 230 1278
## Uruguay 344 1168
## Brasil 246 1253
## República Dominicana 288 1223
## Haití 359 1463
## Jamaica 127 1371
## Guyana 122 1404
## Belice 166 1343
Convertimos la tabla resultante en un objeto tipo “data frame” y añadimos a ese data frame las variables con las cuales vamos a trabajar:
t3 <- as.data.frame(t2)
t3$total <- t3$Sí + t3$No # Total de casos
t3$pc.si <- t3$Sí/t3$total*100 # % de Sí
t3$err.st <- sqrt((t3$pc.si*(100-t3$pc.si))/t3$total) # Error estándar de la proporción
t3$ic <- t3$err.st*2 # IC al 95%
t3$pais <- row.names(t3) # Vector con nombres de países
t3
## Sí No total pc.si err.st ic
## México 360 1197 1557 23.121387 1.0684776 2.136955
## Guatemala 313 1193 1506 20.783533 1.0455744 2.091149
## El Salvador 260 1230 1490 17.449664 0.9832407 1.966481
## Honduras 321 1393 1714 18.728121 0.9423492 1.884698
## Nicaragua 226 1459 1685 13.412463 0.8301986 1.660397
## Costa Rica 261 1231 1492 17.493298 0.9835491 1.967098
## Panamá 108 1510 1618 6.674907 0.6204868 1.240974
## Colombia 318 1193 1511 21.045665 1.0486658 2.097332
## Ecuador 422 1078 1500 28.133333 1.1609906 2.321981
## Perú 419 1074 1493 28.064300 1.1628386 2.325677
## Paraguay 230 1278 1508 15.251989 0.9258217 1.851643
## Uruguay 344 1168 1512 22.751323 1.0781345 2.156269
## Brasil 246 1253 1499 16.410941 0.9566226 1.913245
## República Dominicana 288 1223 1511 19.060225 1.0104452 2.020890
## Haití 359 1463 1822 19.703622 0.9318518 1.863704
## Jamaica 127 1371 1498 8.477971 0.7197023 1.439405
## Guyana 122 1404 1526 7.994758 0.6942752 1.388550
## Belice 166 1343 1509 11.000663 0.8054864 1.610973
## pais
## México México
## Guatemala Guatemala
## El Salvador El Salvador
## Honduras Honduras
## Nicaragua Nicaragua
## Costa Rica Costa Rica
## Panamá Panamá
## Colombia Colombia
## Ecuador Ecuador
## Perú Perú
## Paraguay Paraguay
## Uruguay Uruguay
## Brasil Brasil
## República Dominicana República Dominicana
## Haití Haití
## Jamaica Jamaica
## Guyana Guyana
## Belice Belice
graf.vict <- ggplot(t3, aes(x=reorder(pais, pc.si), y=pc.si)) +
geom_bar(stat="identity", fill="grey") + ylim(0, 35) +
geom_errorbar(aes(ymin=pc.si-ic, ymax=pc.si+ic), width=0.2) +
xlab("") + ylab("% de personas") +
ggtitle("LAPOP 2012: % de Personas que declaran haber sido\n víctimas de algún acto de delincuencia en\n los últimos 12 meses (IC al 95%)") +
coord_flip()
graf.vict
En ocasiones, las bases de datos con las que trabajamos tienen factores de ponderación asociados con el diseño muestral.
Con la base de datos de LAPOP es posible producir estadísticos descriptivos “hemisféricos”, es decir para todos el hemisferio Americano, por ejemplo para evaluar el nivel “promedio” de victimización o de apoyo al sitema político en el hemisferio.
En este tipo de análisis, se asume que todos los países tienen el mismo peso, a pesar que en cada país el tamaño de la muestra puede haber variado debido a diversas consideraciones. Para ello, el proyecto LAPOP ha incorporado en la base de datos un factor de ponderación (variable “weight1500”), que fija a 1500 (como tamaño de muestra) el peso de cada país incluido en el estudio.
El en R se puede trabajar con factores de ponderación de diversas maneras. En modelos multivariables, como análisis de regresión, las funciones correspondientes del R permiten incorporar una variable de “weight”. Para el caso de distribuciones de frecuencias de variables categóricas (simples o cruzadas) contamos con otros mecanismos. Algunos de ellos están incorporados en funciones que forman parte del paquete “descr”. Veamos un ejemplo:
Distribución de entrevistados por país, por año, sin ponderar
lapop$year <- factor(lapop$year)
table(lapop$pais, lapop$year)
##
## 2004 2006 2008 2010 2012
## México 1556 1560 1560 1562 1560
## Guatemala 1708 1498 1538 1504 1509
## El Salvador 1589 1729 1549 1550 1497
## Honduras 1500 1585 1522 1596 1728
## Nicaragua 1430 1762 1540 1540 1686
## Costa Rica 1500 1500 1500 1500 1498
## Panamá 1639 1536 1536 1536 1620
## Colombia 1479 1491 1503 1506 1512
## Ecuador 3000 2925 3000 3000 1500
## Bolivia 3073 3008 3003 0 0
## Perú 0 1500 1500 1500 1500
## Paraguay 0 1165 1166 1502 1510
## Chile 0 1517 1527 0 0
## Uruguay 0 1200 1500 1500 1512
## Brasil 0 1214 1497 2482 1500
## Venezuela 0 1510 1500 0 0
## Argentina 0 0 1486 0 0
## República Dominicana 0 1516 1507 1500 1512
## Haití 0 1625 1536 1752 1836
## Jamaica 0 1595 1499 1504 1500
## Guyana 0 1555 2514 1540 1529
## Trinidad & Tobago 0 0 0 0 0
## Belice 0 0 1552 1504 1512
## Surinam 0 0 0 0 0
## Estados Unidos 0 609 1500 0 0
## Canadá 0 601 2032 0 0
## DK 0 0 0 0 0
## NR 0 0 0 0 0
## N/A 0 0 0 0 0
Distribución de entrevistados por país, por año, usando el factor de ponderación y la función “crosstab” del paquete “descr”
library(descr)
crosstab(lapop$pais, lapop$year, weight=lapop$weight1500, plot=F)
## Cell Contents
## |-------------------------|
## | Count |
## |-------------------------|
##
## ======================================================================
## lapop$year
## lapop$pais 2004 2006 2008 2010 2012 Total
## ----------------------------------------------------------------------
## México 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Guatemala 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## El Salvador 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Honduras 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Nicaragua 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Costa Rica 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Panamá 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Colombia 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Ecuador 1500 1500 1500 1500 1500 7500
## ----------------------------------------------------------------------
## Bolivia 1500 1500 1500 0 0 4500
## ----------------------------------------------------------------------
## Perú 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Paraguay 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Chile 0 1500 1500 0 0 3000
## ----------------------------------------------------------------------
## Uruguay 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Brasil 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Venezuela 0 1500 1500 0 0 3000
## ----------------------------------------------------------------------
## Argentina 0 0 1500 0 0 1500
## ----------------------------------------------------------------------
## República Dominicana 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Haití 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Jamaica 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Guyana 0 1500 1500 1500 1500 6000
## ----------------------------------------------------------------------
## Trinidad & Tobago 0 0 0 0 0 0
## ----------------------------------------------------------------------
## Belice 0 0 1500 1500 1500 4500
## ----------------------------------------------------------------------
## Surinam 0 0 0 0 0 0
## ----------------------------------------------------------------------
## Estados Unidos 0 1500 1500 0 0 3000
## ----------------------------------------------------------------------
## Canadá 0 1500 1500 0 0 3000
## ----------------------------------------------------------------------
## DK 0 0 0 0 0 0
## ----------------------------------------------------------------------
## NR 0 0 0 0 0 0
## ----------------------------------------------------------------------
## N/A 0 0 0 0 0 0
## ----------------------------------------------------------------------
## Total 15000 33000 36000 27000 27000 138000
## ======================================================================
Otra posibilidad para obtener el mismo resultado es usar la función “xtabs” del paquete básico “stats”. En este ejemplo usamos la función “round” para redondear los datos a la unidad.
round(xtabs(weight1500 ~ pais+year, data=lapop, drop.unused.levels=T), 0)
## year
## pais 2004 2006 2008 2010 2012
## México 1500 1500 1500 1500 1500
## Guatemala 1500 1500 1500 1500 1500
## El Salvador 1500 1500 1500 1500 1500
## Honduras 1500 1500 1500 1500 1500
## Nicaragua 1500 1500 1500 1500 1500
## Costa Rica 1500 1500 1500 1500 1500
## Panamá 1500 1500 1500 1500 1500
## Colombia 1500 1500 1500 1500 1500
## Ecuador 1500 1500 1500 1500 1500
## Bolivia 1500 1500 1500 0 0
## Perú 0 1500 1500 1500 1500
## Paraguay 0 1500 1500 1500 1500
## Chile 0 1500 1500 0 0
## Uruguay 0 1500 1500 1500 1500
## Brasil 0 1500 1500 1500 1500
## Venezuela 0 1500 1500 0 0
## Argentina 0 0 1500 0 0
## República Dominicana 0 1500 1500 1500 1500
## Haití 0 1500 1500 1500 1500
## Jamaica 0 1500 1500 1500 1500
## Guyana 0 1500 1500 1500 1500
## Belice 0 0 1500 1500 1500
## Estados Unidos 0 1500 1500 0 0
## Canadá 0 1500 1500 0 0
Hagamos una distribución de frecuencias del nivel de victimización (vic1ext) para el hemisferio por año de encuesta. Primero, preparemos un poco los datos…
lapop$vict.r <- as.numeric(lapop$vic1ext)
table(lapop$vict.r)
##
## 1 2 3 4 5
## 26076 124579 571 100 15
lapop$vict.r[lapop$vict.r > 2] <- NA
lapop$vict.r <- factor(lapop$vict.r)
levels(lapop$vict.r) <- c("SI", "NO")
prop.table(table(lapop$vict.r, lapop$year), 2)*100
##
## 2004 2006 2008 2010 2012
## SI 16.61967 16.85406 16.60881 19.01535 17.49490
## NO 83.38033 83.14594 83.39119 80.98465 82.50510
Usando función “crosstab” en paquete “descr”
crosstab(lapop$vict.r, lapop$year, weight=lapop$weight1500, prop.c=T, plot=F)
## Cell Contents
## |-------------------------|
## | Count |
## | Column Percent |
## |-------------------------|
##
## ===================================================================
## lapop$year
## lapop$vict.r 2004 2006 2008 2010 2012 Total
## -------------------------------------------------------------------
## SI 2462 5522 6013 5073 4733 23803
## 16.445 16.836 16.803 18.859 17.571
## -------------------------------------------------------------------
## NO 12509 27277 29772 21826 22203 113587
## 83.555 83.164 83.197 81.141 82.429
## -------------------------------------------------------------------
## Total 14971 32799 35785 26899 26936 137390
## 10.897 23.873 26.046 19.579 19.606
## ===================================================================
Usando xtabs
prop.table(xtabs(weight1500 ~ vict.r+year, data=lapop), 2)*100
## year
## vict.r 2004 2006 2008 2010 2012
## SI 16.44780 16.83605 16.80243 18.85931 17.57026
## NO 83.55220 83.16395 83.19757 81.14069 82.42974
Decidan ustedes cuál les gusta más…
Si quieren pueden exportar las tablas a un formato HTML que luego puede ser abierto desde el excel para editar las tablas (otra opción es convertirlas en LaTeX, pero esa es otra historia…):
library(xtable) # requiere paquete "xtable"
# Grabamos las tablas en sendos objetos:
tabla1 <- prop.table(xtabs(weight1500 ~ vict.r+year, data=lapop), 2)*100
tabla2 <- crosstab(lapop$vict.r, lapop$year, weight=lapop$weight1500, prop.c=T, plot=F)
# Exportamos las tablas hacia archivos html que pueden abrirse desde el Excel (o desde cualquier navegador internet)
print(xtable(tabla1), type="html", file="tabla1.html")
print(xtable(tabla2), type="html", file="tabla2.html")
Podemos usar la función summarySE para obtener la media de de ASP por año:
library(Rmisc)
summarySE(lapop, measurevar="asp", groupvars="year", na.rm=T)
## year N asp sd se ci
## 1 2004 16195 51.65668 21.98518 0.1727586 0.3386259
## 2 2006 30411 51.49409 23.11390 0.1325433 0.2597905
## 3 2008 35362 51.72643 23.00027 0.1223107 0.2397328
## 4 2010 26622 53.24782 21.80106 0.1336156 0.2618937
## 5 2012 25117 52.11649 22.00210 0.1388290 0.2721130
El problema en este caso es que los datos no están ponderados. Si queremos usar el factor de ponderación, podemos emplear la función “compmeans” del paquete “descr”:
library(descr)
compmeans(lapop$asp, lapop$year, lapop$weight1500, plot=FALSE)
## Mean value of "lapop$asp" according to "lapop$year"
## Mean N Std. Dev.
## 2004 52.97458 13084 22.17687
## 2006 52.96437 29509 23.35483
## 2008 51.33239 31342 23.39466
## 2010 53.60166 23935 21.84776
## 2012 52.24418 24183 21.96704
## Total 52.52867 122052 22.69394
Con esto podemos:
library(descr)
tab.asp <- as.data.frame(compmeans(lapop$asp, lapop$year, lapop$weight1500, plot=FALSE))
varnames <- c("media", "n", "sd")
colnames(tab.asp) <- varnames
tab.asp$year <- row.names(tab.asp)
tab.asp$err.st <- tab.asp$sd/sqrt(tab.asp$n)
tab.asp$ci <- tab.asp$err.st*2
tab.asp <- tab.asp[-6, ]
tab.asp
## media n sd year err.st ci
## 2004 52.97458 13084 22.17687 2004 0.1938786 0.3877572
## 2006 52.96437 29509 23.35483 2006 0.1359563 0.2719126
## 2008 51.33239 31342 23.39466 2008 0.1321458 0.2642917
## 2010 53.60166 23935 21.84776 2010 0.1412181 0.2824361
## 2012 52.24418 24183 21.96704 2012 0.1412591 0.2825182
ggplot(tab.asp, aes(x=year, y=media)) + geom_point() +
geom_errorbar(aes(ymin=media-ci, ymax=media+ci), width=0.2) +
ylab("Índice de Apoyo al Sistema Político") + xlab("Año de la encuesta") +
ylim(45, 60) +
ggtitle("LAPOP 2004-2012: Apoyo al Sistema Político según año de encuesta\n Intervalo de confianza al 95%")