Instale los que sean necesarios desde un CRAN
library(foreign) # Para importar datos desde el SPSS
library(descr) # Para hacer tablas de distribución de frecuencias
library(ggplot2) # Para gráficos ggplot
Utilizaremos la base de datos integrada del Barómetro de las Américas del proyecto LAPOP, la cual se descarga de: http://www.LapopSurveys.org
La fuente para citar los datos es:
Agradecemos al Latin American Public Opinion Project (LAPOP) y sus principales auspiciadores (the United States Agency for International Development, the Inter-American Development Bank, and Vanderbilt University) por permitir el acceso a sus datos.
Descargue el “Merged dataset” de las encuestas LAPOP 2004-2012 y grábelo en su directorio de trabajo con el nombre “lapop04_12”.
#lapop <- as.data.frame(read.spss("lapop04_12.sav"))
save(lapop, file="lapop.rda") # grabar el archivo en formato R
head(names(lapop), 42) # para ver la lista de las primeras 40 variables del dataframe lapop
## [1] "year" "pais" "idnum" "weight1500"
## [5] "estratopri" "upm" "prov" "municipio_06"
## [9] "municipio08" "municipio10" "cluster" "ur"
## [13] "tamano" "idiomaq" "q1" "ls3"
## [17] "a4" "a1" "a2" "a3"
## [21] "a4i" "soct1" "soct2" "soct3"
## [25] "resp6" "idio1" "idio2" "idio3"
## [29] "idio4" "cp1" "cp2" "cp4a"
## [33] "cp4" "np1" "np1a" "np1b"
## [37] "np1c" "np2" "muni10" "sgl1"
## [41] "sgl2" "lgl2"
Si se quiere ver la lista completa de variables usar el comando : names(lapop)
Usando el comando “table”:
table(lapop$b1) # ditribución de frecuencias absolutas
##
## 1 Nada 2 3 4 5 6 7 Mucho DK NR
## 18379 14105 25208 32566 28381 12811 10249 8343 1161
## N/A
## 138
prop.table(table(lapop$b1))*100 # distribución de frecuencias relativas en porcentajes
##
## 1 Nada 2 3 4 5 6
## 12.14409843 9.32001242 16.65642489 21.51829313 18.75301472 8.46498966
## 7 Mucho DK NR N/A
## 6.77212388 5.51271632 0.76714175 0.09118481
Usando el comando “freq” del paquete (descr):
freq(lapop$b1) # con gráfico de barras
## lapop$b1
## Frequency Percent
## 1 Nada 18379 12.14410
## 2 14105 9.32001
## 3 25208 16.65642
## 4 32566 21.51829
## 5 28381 18.75301
## 6 12811 8.46499
## 7 Mucho 10249 6.77212
## DK 8343 5.51272
## NR 1161 0.76714
## N/A 138 0.09118
## Total 151341 100.00000
freq(lapop$b1, plot=FALSE) # sin gráfico de barras
## lapop$b1
## Frequency Percent
## 1 Nada 18379 12.14410
## 2 14105 9.32001
## 3 25208 16.65642
## 4 32566 21.51829
## 5 28381 18.75301
## 6 12811 8.46499
## 7 Mucho 10249 6.77212
## DK 8343 5.51272
## NR 1161 0.76714
## N/A 138 0.09118
## Total 151341 100.00000
freq(ordered(lapop$b1), plot=F) # con columna de frecuencias acumuladas
## ordered(lapop$b1)
## Frequency Percent Cum Percent
## 1 Nada 18379 12.14410 12.14
## 2 14105 9.32001 21.46
## 3 25208 16.65642 38.12
## 4 32566 21.51829 59.64
## 5 28381 18.75301 78.39
## 6 12811 8.46499 86.86
## 7 Mucho 10249 6.77212 93.63
## DK 8343 5.51272 99.14
## NR 1161 0.76714 99.91
## N/A 138 0.09118 100.00
## Total 151341 100.00000
Convertimos las variables que componen el índice de factores a vectores numéricos:
b1.r <- as.numeric(lapop$b1)
table(b1.r) # para ver cómo queda
## b1.r
## 1 2 3 4 5 6 7 8 9 10
## 18379 14105 25208 32566 28381 12811 10249 8343 1161 138
b2.r <- as.numeric(lapop$b2)
b3.r <- as.numeric(lapop$b3)
b4.r <- as.numeric(lapop$b4)
b6.r <- as.numeric(lapop$b6)
#Marcamos los DK, NR y N/A como valores perdidos
b1.r[b1.r > 7] <- NA
b2.r[b2.r > 7] <- NA
b3.r[b3.r > 7] <- NA
b4.r[b4.r > 7] <- NA
b6.r[b6.r > 7] <- NA
table(b1.r) # para ver cómo queda
## b1.r
## 1 2 3 4 5 6 7
## 18379 14105 25208 32566 28381 12811 10249
Calculamos el índice:
lapop$asp <- (((b1.r+b2.r+b3.r+b4.r+b6.r)-5)/30)*100
Usando tablas de distribución de frecuencias:
freq(ordered(lapop$asp), plot=F) # incluye las frecuencias acumuladas; excluye el gráfico de barras
## ordered(lapop$asp)
## Frequency Percent Valid Percent Cum Percent
## 0 2821 1.8640 2.1098 2.110
## 3.33333333333333 865 0.5716 0.6469 2.757
## 6.66666666666667 1263 0.8345 0.9446 3.701
## 10 1619 1.0698 1.2109 4.912
## 13.3333333333333 1993 1.3169 1.4906 6.403
## 16.6666666666667 2406 1.5898 1.7995 8.202
## 20 3398 2.2453 2.5414 10.744
## 23.3333333333333 2977 1.9671 2.2265 12.970
## 26.6666666666667 3708 2.4501 2.7732 15.743
## 30 4140 2.7355 3.0963 18.840
## 33.3333333333333 5219 3.4485 3.9033 22.743
## 36.6666666666667 5264 3.4782 3.9370 26.680
## 40 6156 4.0676 4.6041 31.284
## 43.3333333333333 6463 4.2705 4.8337 36.118
## 46.6666666666667 6960 4.5989 5.2054 41.323
## 50 8055 5.3224 6.0244 47.348
## 53.3333333333333 7609 5.0277 5.6908 53.038
## 56.6666666666667 7428 4.9081 5.5554 58.594
## 60 7865 5.1969 5.8823 64.476
## 63.3333333333333 7138 4.7165 5.3385 69.815
## 66.6666666666667 7315 4.8335 5.4709 75.286
## 70 6215 4.1066 4.6482 79.934
## 73.3333333333333 5631 3.7207 4.2114 84.145
## 76.6666666666667 4705 3.1089 3.5189 87.664
## 80 4503 2.9754 3.3678 91.032
## 83.3333333333333 3328 2.1990 2.4890 93.521
## 86.6666666666667 2608 1.7233 1.9505 95.471
## 90 2034 1.3440 1.5212 96.993
## 93.3333333333333 1537 1.0156 1.1495 98.142
## 96.6666666666667 842 0.5564 0.6297 98.772
## 100 1642 1.0850 1.2281 100.000
## NA's 17634 11.6518
## Total 151341 100.0000 100.0000
Usando un histograma del paquete de gráficos básicos:
hist(lapop$asp)
Usando un histograma del paquete lapop, e intervalos de amplitud de 10 puntos para las barras
ggplot(lapop, aes(asp)) + geom_histogram(binwidth=10) + xlab("Índice de Apoyo al Sistema Político") +
ylab("Frecuencias") + ggtitle("Histograma del Índice de Apoyo al Sistema Político")
Colombia a través de los años:
lap.col <- subset(lapop, pais=="Colombia") # subconjunto de datos para Colombia
# Histograma para ASP en Colombia a través de los años
ggplot(lap.col, aes(asp)) + geom_histogram(binwidth=10) + facet_wrap(~year) +
xlab("Índice de Apoyo al Sistema Político") + ylab("Frecuencia de casos") +
ggtitle("Colombia 2004-2012: Histograma del Indice\n de Apoyo al Sistema Político")
Perú y Colombia el 2008
lap.peco08 <- subset(lapop, (pais=="Perú" | pais=="Colombia") & year=="2008")
ggplot(lap.peco08, aes(asp)) + geom_histogram(binwidth=10) + facet_grid(pais~.) +
xlab("Índice de Apoyo al Sistema Político") + ylab("Frecuencia de casos") +
ggtitle("Perú y Colombia 2008: Histograma del Indice\n de Apoyo al Sistema Político")
load("lapop.rda")
table(lapop$vic1ext)
##
## Sí No DK NR N/A
## 26076 124579 571 100 15
library(car) # paquete car para usar el comando "recode"
lapop$vic1ext.r <- recode(lapop$vic1ext, "'DK'=NA; 'NR'=NA; 'N/A'=NA") # marcar los missing values
table(lapop$vic1ext.r)
##
## No Sí
## 124579 26076
lapop.2 <- subset(lapop, (pais=="Perú" | pais == "Colombia") & year == "2012")
table(lapop.2$pais)
##
## México Guatemala El Salvador
## 0 0 0
## Honduras Nicaragua Costa Rica
## 0 0 0
## Panamá Colombia Ecuador
## 0 1512 0
## Bolivia Perú Paraguay
## 0 1500 0
## Chile Uruguay Brasil
## 0 0 0
## Venezuela Argentina República Dominicana
## 0 0 0
## Haití Jamaica Guyana
## 0 0 0
## Trinidad & Tobago Belice Surinam
## 0 0 0
## Estados Unidos Canadá DK
## 0 0 0
## NR N/A
## 0 0
# Volviendo a convertir la variable pais en factor quitamos las etiquetas vacías en la nueva base de datos:
lapop.2$pais <- factor(lapop.2$pais)
table(lapop.2$pais)
##
## Colombia Perú
## 1512 1500
prop.table(table(lapop.2$pais, lapop.2$vic1ext.r), 1)*100
##
## No Sí
## Colombia 78.95433 21.04567
## Perú 71.93570 28.06430
Guardamos la tabla en un objeto:
tabla1 <- prop.table(table(lapop.2$pais, lapop.2$vic1ext.r), 1)*100
Convertimos la tabla en un data frame para poder hacer el gráfico usando ggplot
tabla1 <- as.data.frame(tabla1)
tabla1
## Var1 Var2 Freq
## 1 Colombia No 78.95433
## 2 Perú No 71.93570
## 3 Colombia Sí 21.04567
## 4 Perú Sí 28.06430
Primero cargamos los paquetes que vamos a usar:
library(ggplot2)
library(scales)
Gráfico de barras apiladas, con colores azul y rojo:
grafico1a <- ggplot(tabla1, aes(Var1, Freq, fill=Var2)) +
geom_bar(stat="identity") +
xlab("País") + ylab("% de casos") + labs(fill="Víctima") +
ggtitle("Perú y Colombia 2012: % de personas que han sido\n víctimas de un acto de delincuencial en los últimos 12 meses") +
scale_fill_manual(values=c("red", "blue")) + theme_bw()
grafico1a
Gráfico de barras paralelas con tonos de gris:
grafico1b <- ggplot(tabla1, aes(Var1, Freq, fill=Var2)) +
geom_bar(stat="identity", position=position_dodge()) +
xlab("País") + ylab("% de casos") + labs(fill="Víctima") +
ggtitle("Perú y Colombia 2012: % de personas que han sido\n víctimas de un acto de delincuencial en los últimos 12 meses") +
scale_fill_manual(values=c("#CCCCCC", "#666666")) + theme_bw()
grafico1b
Si queremos grabar los gráficos en formato png:
png("grafico1a.png")
grafico1a
dev.off()
## pdf
## 2
png("grafico1b.png")
grafico1b
dev.off()
## pdf
## 2
data <- subset(lapop, year=="2010")
tabla2 <- prop.table(table(data$pais, data$vic1ext.r),1)*100
tabla2
##
## No Sí
## México 74.071703 25.928297
## Guatemala 76.691226 23.308774
## El Salvador 75.806452 24.193548
## Honduras 86.020151 13.979849
## Nicaragua 80.831709 19.168291
## Costa Rica 80.977897 19.022103
## Panamá 88.692810 11.307190
## Colombia 79.521277 20.478723
## Ecuador 75.534045 24.465955
## Bolivia
## Perú 68.933333 31.066667
## Paraguay 81.757656 18.242344
## Chile
## Uruguay 79.052702 20.947298
## Brasil 82.711039 17.288961
## Venezuela
## Argentina
## República Dominicana 83.466667 16.533333
## Haití 78.981265 21.018735
## Jamaica 89.880160 10.119840
## Guyana 91.003911 8.996089
## Trinidad & Tobago
## Belice 88.168449 11.831551
## Surinam
## Estados Unidos
## Canadá
## DK
## NR
## N/A
Se convierte la tabla en data frame, se seleccionan los datos del % de personas que han sido víctimas de un crímen y se eliminan los registros vacíos:
tab.df <- as.data.frame(tabla2)
tab.df
## Var1 Var2 Freq
## 1 México No 74.071703
## 2 Guatemala No 76.691226
## 3 El Salvador No 75.806452
## 4 Honduras No 86.020151
## 5 Nicaragua No 80.831709
## 6 Costa Rica No 80.977897
## 7 Panamá No 88.692810
## 8 Colombia No 79.521277
## 9 Ecuador No 75.534045
## 10 Bolivia No NaN
## 11 Perú No 68.933333
## 12 Paraguay No 81.757656
## 13 Chile No NaN
## 14 Uruguay No 79.052702
## 15 Brasil No 82.711039
## 16 Venezuela No NaN
## 17 Argentina No NaN
## 18 República Dominicana No 83.466667
## 19 Haití No 78.981265
## 20 Jamaica No 89.880160
## 21 Guyana No 91.003911
## 22 Trinidad & Tobago No NaN
## 23 Belice No 88.168449
## 24 Surinam No NaN
## 25 Estados Unidos No NaN
## 26 Canadá No NaN
## 27 DK No NaN
## 28 NR No NaN
## 29 N/A No NaN
## 30 México Sí 25.928297
## 31 Guatemala Sí 23.308774
## 32 El Salvador Sí 24.193548
## 33 Honduras Sí 13.979849
## 34 Nicaragua Sí 19.168291
## 35 Costa Rica Sí 19.022103
## 36 Panamá Sí 11.307190
## 37 Colombia Sí 20.478723
## 38 Ecuador Sí 24.465955
## 39 Bolivia Sí NaN
## 40 Perú Sí 31.066667
## 41 Paraguay Sí 18.242344
## 42 Chile Sí NaN
## 43 Uruguay Sí 20.947298
## 44 Brasil Sí 17.288961
## 45 Venezuela Sí NaN
## 46 Argentina Sí NaN
## 47 República Dominicana Sí 16.533333
## 48 Haití Sí 21.018735
## 49 Jamaica Sí 10.119840
## 50 Guyana Sí 8.996089
## 51 Trinidad & Tobago Sí NaN
## 52 Belice Sí 11.831551
## 53 Surinam Sí NaN
## 54 Estados Unidos Sí NaN
## 55 Canadá Sí NaN
## 56 DK Sí NaN
## 57 NR Sí NaN
## 58 N/A Sí NaN
tab.df.1 <- na.omit(subset(tab.df, Var2=="Sí"))
tab.df.1
## Var1 Var2 Freq
## 30 México Sí 25.928297
## 31 Guatemala Sí 23.308774
## 32 El Salvador Sí 24.193548
## 33 Honduras Sí 13.979849
## 34 Nicaragua Sí 19.168291
## 35 Costa Rica Sí 19.022103
## 36 Panamá Sí 11.307190
## 37 Colombia Sí 20.478723
## 38 Ecuador Sí 24.465955
## 40 Perú Sí 31.066667
## 41 Paraguay Sí 18.242344
## 43 Uruguay Sí 20.947298
## 44 Brasil Sí 17.288961
## 47 República Dominicana Sí 16.533333
## 48 Haití Sí 21.018735
## 49 Jamaica Sí 10.119840
## 50 Guyana Sí 8.996089
## 52 Belice Sí 11.831551
Un gráfico de barras:
grafico2a <- ggplot(tab.df.1, aes(x=reorder(Var1, Freq), y=Freq)) +
geom_bar(stat="identity", fill="#336666") + ylim(0, 35) +
xlab(" ") + ylab("% de personas") +
ggtitle("Barómetro de las Américas 2010: % de personas\n que fueron víctimas de un crímen en\n los últimos 12 meses") + coord_flip() + theme_bw()
grafico2a
La misma información en un gráfico de puntos (Cleveland Dot Plot)
grafico2b <- ggplot(tab.df.1, aes(x=reorder(Var1, Freq), y=Freq)) +
geom_point(size=3) + ylim(0, 35) +
xlab(" ") + ylab("% de personas") +
ggtitle("Barómetro de las Américas 2010: % de personas\n que fueron víctimas de un crímen en\n los últimos 12 meses") + coord_flip() + theme_bw()
grafico2b
Para grabar los gráficos:
png("grafico2a.png")
grafico2a
dev.off()
## pdf
## 2
png("grafico2b.png")
grafico2b
dev.off()
## pdf
## 2
Si quiere información sobre gráficos en R usando ggplot2, recomendamos revisar:
Sobre algunos parámetros gráficos, recomendamos revisar:
Si quiere información acerca de los “Dot plot” le recomendamos revisar los siguientes recursos: