SEMANA 24 AGOSTO

Paquetes utilizados en la clase.

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

Cargar datos desde el SPSS

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:

  • The AmericasBarometer by the Latin American Public Opinion Project (LAPOP), www.LapopSurveys.org.

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)

Una distribución de frecuencias

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

Crear el índice de apoyo al sistema político

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

Describimos el índice de Apoyo al Sistema Político

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")

Seleccionamos un grupo de casos para analizar

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")

SEMANA 01 DE SEPTIEMBRE

Datos

load("lapop.rda")

Gráfico para una variable categórica: Barras

Paso 1: Primero una tabla de la variable victimización (vic1ext)

table(lapop$vic1ext)
## 
##     Sí     No     DK     NR    N/A 
##  26076 124579    571    100     15

Paso 2: Quitamos los valores perdidos

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

Paso 3: Comparemos dos casos: Perú y Colombia, 2012

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

Paso 3: Pidamos la tabla de porcentajes de victimización por país

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

Paso 4: Generamos el gráfico en ggplot

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

Gráfico de barras de victimización por países

Paso 1: Seleccionamos un año

data <- subset(lapop, year=="2010")

Paso 2: Generamos la tabla

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

Paso 3: Convertimos la tabla en data frame

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

Paso 4: Generamos el gráfico

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

Ejercicios

  • Haga un gráfico de barras de la variable victimización para el Perú 2010, por género
  • Haga un gráfico donde compare el % de personas que son víctimas por género, en el Perú de 2010 y 2012
  • Haga los gráficos de barras de victimización por países similares al del 2010, pero para los otros años de la encuesta.
  • Usando los datos de la encuesta del 2012, haga un gráfico tipo “Cleveland Dot Plot” (similar al gráfico2b) por países para el % de personas que creen que para poder capturar delincuentes en ocasiones las autoridades pueden actuar al margen de la ley (variable “aoj8” del cuestionario y la base de datos).

Recursos adicionales

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: