Carga de datos

Se trabajará con los datos de la EMV de Perú

load("wvs_peru.rdata")

Variables

Vamos a trabajar con las siguientes variables:

Acondicionar las variables

Vamos a acondicional las variables para el análisis: recodificando y/o etiquetando los valores; asignando los Missing Values (NA)

# Sexo del entrevistado

table(wvs.peru$X001)
## 
##    1    2 
## 2673 2749
wvs.peru$sex <- as.factor(wvs.peru$X001)
levels(wvs.peru$sex) <- c("Masculino", "Femenino")

table(wvs.peru$sex)
## 
## Masculino  Femenino 
##      2673      2749
# Grupos de edad

table(wvs.peru$X003R2)
## 
##    1    2    3 
## 2086 2248 1088
wvs.peru$gedad <- as.factor(wvs.peru$X003R2)
levels(wvs.peru$gedad) <- c("15 a 29", "30 a 49", "50 a más")

table(wvs.peru$gedad)
## 
##  15 a 29  30 a 49 50 a más 
##     2086     2248     1088
# Importancia de la religión

table(wvs.peru$A006)
## 
##   -2   -1    1    2    3    4 
##   22   47 2775 1585  830  163
wvs.peru$a006r <- wvs.peru$A006
wvs.peru$a006r[wvs.peru$a006r < 0] <- NA
wvs.peru$a006r <- factor(wvs.peru$a006r)
levels(wvs.peru$a006r) <- c("Muy importante", "Algo importante", 
                            "Poco importante", "Nada importante")
table(wvs.peru$a006r)
## 
##  Muy importante Algo importante Poco importante Nada importante 
##            2775            1585             830             163
# Satisfacción con la vida

table(wvs.peru$A170)
## 
##  -2  -1   1   2   3   4   5   6   7   8   9  10 
##  12  33 166 109 210 299 901 684 871 832 378 927
wvs.peru$a170r <- wvs.peru$A170
wvs.peru$a170r[wvs.peru$a170r < 0] <- NA
table(wvs.peru$a170r)
## 
##   1   2   3   4   5   6   7   8   9  10 
## 166 109 210 299 901 684 871 832 378 927
# Escala izquierda - derecha

table(wvs.peru$E033)
## 
##   -2   -1    1    2    3    4    5    6    7    8    9   10 
##  406  586  248  126  219  284 1586  692  418  320  120  417
wvs.peru$e033r <- wvs.peru$E033
wvs.peru$e033r[wvs.peru$e033r < 0] <- NA
table(wvs.peru$e033r)
## 
##    1    2    3    4    5    6    7    8    9   10 
##  248  126  219  284 1586  692  418  320  120  417
# Importancia de dios en la vida

table(wvs.peru$F063)
## 
##   -2   -1    1    2    3    4    5    6    7    8    9   10 
##   18   25   69   29   49   44  149  157  293  474  573 3542
wvs.peru$f063r <- wvs.peru$F063
wvs.peru$f063r[wvs.peru$f063r < 0] <- NA
table(wvs.peru$f063r)
## 
##    1    2    3    4    5    6    7    8    9   10 
##   69   29   49   44  149  157  293  474  573 3542

Gráfico de Barras Simple

Variable: Importancia de la Religión

Se hará el gráfico a solo para la encuesta del 2012 (oledad 2010-2014)

Paso 1: Crear una tabla de porcentajes

wvs.12 <- subset(wvs.peru, oleada=="2010-2014")

tabla1 <- prop.table(table(wvs.12$a006r)) *100
tabla1
## 
##  Muy importante Algo importante Poco importante Nada importante 
##       50.460251       30.711297       15.983264        2.845188

Paso 2: Generar un data frame

Se genera un data frame con la tabla de porcentajes para poder hacer el gráfico usando el paquete ggplot2

tabla1.g <- as.data.frame(tabla1) 
tabla1.g
##              Var1      Freq
## 1  Muy importante 50.460251
## 2 Algo importante 30.711297
## 3 Poco importante 15.983264
## 4 Nada importante  2.845188

Paso 3: Gráfico en ggplot

library(ggplot2)

grafico1 <- ggplot(tabla1.g, aes(x=Var1, y=Freq)) +         # capa1: Datos
  geom_bar(stat="identity") +                               # capa2: Forma
  xlab("Nivel de Importancia") + ylab("% entrevistados") +  # capas 3 y 4: títulos
  ggtitle("Importancia de Dios en la Vida del Entrevistado") +
  theme_bw()                                                 # Tema: blanco y negro
  
grafico1

Paso 4: Grabar el gráfico en file

png("gtabla1.png")
plot(grafico1)
dev.off()
## quartz_off_screen 
##                 2

Para más opciones ver: http://www.cookbook-r.com/Graphs/

Gráfico de barras agrupadas

Para el 2012: Importancia de Dios según Sexo del Entrevistado

Paso 1:

tabla2 <- prop.table(table(wvs.12$a006r, wvs.12$sex), 2)*100
tabla2
##                  
##                   Masculino  Femenino
##   Muy importante  44.500000 56.470588
##   Algo importante 30.166667 31.260504
##   Poco importante 21.500000 10.420168
##   Nada importante  3.833333  1.848739

Paso 2:

g.tabla2 <- as.data.frame(tabla2)
g.tabla2
##              Var1      Var2      Freq
## 1  Muy importante Masculino 44.500000
## 2 Algo importante Masculino 30.166667
## 3 Poco importante Masculino 21.500000
## 4 Nada importante Masculino  3.833333
## 5  Muy importante  Femenino 56.470588
## 6 Algo importante  Femenino 31.260504
## 7 Poco importante  Femenino 10.420168
## 8 Nada importante  Femenino  1.848739

Paso 3:

grafico2 <- ggplot(g.tabla2, aes(x=Var1, y=Freq, fill=Var2)) +
  geom_bar(stat="identity", position = position_dodge()) +
  xlab("Nivel de Importancia") + ylab("% de entrevistados") +
  ggtitle("Importancia de Dios según\n Sexo del Entrevistado") +
  scale_fill_discrete(name="Sexo")

grafico2

# Podemos rotar el gráfico para que se vea mejor las etiquetas:

grafico2 + coord_flip()

# Sino, Podemos cambiar el tamaño de la letra...

grafico2 + theme(axis.text.x = element_text(size = 8))

# También podemos cambiar los colores de las barras usando una paleta de colores

grafico2 + theme_bw() + theme(axis.text.x = element_text(size = 8)) +
  scale_fill_brewer(name="Sexo", palette="Greys") 
## Scale for 'fill' is already present. Adding another scale for 'fill',
## which will replace the existing scale.

# Cambio de colores usando colores específicos

grafico2 + theme_bw() + theme(axis.text.x = element_text(size = 8)) +
  scale_fill_manual(name="Sexo", values = c("#999999", "#333333")) 
## Scale for 'fill' is already present. Adding another scale for 'fill',
## which will replace the existing scale.

# Una vez escogido el gráfico que queremos lo grabamos:

grafico2.1 <- grafico2 + theme_bw() + theme(axis.text.x = element_text(size = 8)) +
  scale_fill_manual(name="Sexo", values = c("#999999", "#333333"))
## Scale for 'fill' is already present. Adding another scale for 'fill',
## which will replace the existing scale.
grafico2.1

png("gtabla2.png")
plot(grafico2.1)
dev.off()
## quartz_off_screen 
##                 2

Ejercicios:

Realizar los siguientes gráficos:

  • Importancia de la religión según grupos de edad (para el 2012)
  • Importancia de la religión según oleadas de la encuesta

Histograma: Para variables cuantitativas

Para satisfacción con la vida (2012)

hist1 <- ggplot(wvs.12, aes(a170r)) + geom_histogram(binwidth = 1) +
  scale_x_continuous(breaks=1:10) + xlab("Nivel de Satisfacción") +
  ylab("Número de casos") + 
  ggtitle("Histograma de Nivel de Satisfacción con la Vida") +
  theme_bw()

hist1 
## Warning: Removed 4 rows containing non-finite values (stat_bin).

Para importancia de Dios

hist2 <- ggplot(wvs.12, aes(f063r)) + geom_histogram(binwidth = 1) +
  scale_x_continuous(breaks=1:10) + xlab("Nivel de Importancia") +
  ylab("Número de casos") + 
  ggtitle("Histograma de Importancia de Dios en la Vida") +
  theme_bw()

hist2
## Warning: Removed 3 rows containing non-finite values (stat_bin).

Para Escala Izquierda - Derecha

hist3 <- ggplot(wvs.12, aes(e033r)) + geom_histogram(binwidth = 1) +
  scale_x_continuous(breaks=1:10) + xlab("Izq. - Der.") +
  ylab("Número de casos") + 
  ggtitle("Histograma de Escala Izquierda - Derecha") +
  theme_bw()

hist3
## Warning: Removed 173 rows containing non-finite values (stat_bin).

Grabamos los histogramas

png("hist1.png")
plot(hist1)
## Warning: Removed 4 rows containing non-finite values (stat_bin).
dev.off()
## quartz_off_screen 
##                 2
png("hist2.png")
plot(hist2)
## Warning: Removed 3 rows containing non-finite values (stat_bin).
dev.off()
## quartz_off_screen 
##                 2
png("hist2.png")
plot(hist2)
## Warning: Removed 3 rows containing non-finite values (stat_bin).
dev.off()
## quartz_off_screen 
##                 2

Estadísticos Descriptivos

Tendencia Central: Mediana y Media

Para una variable en un año:

median(wvs.12$a170r, na.rm=T)
## [1] 7
median(wvs.12$f063r, na.rm=T)
## [1] 10
median(wvs.12$e033r, na.rm=T)
## [1] 5
mean(wvs.12$a170r, na.rm=T)
## [1] 7.134328
mean(wvs.12$f063r, na.rm=T)
## [1] 8.913007
mean(wvs.12$e033r, na.rm=T)
## [1] 5.523626

Para una variable en diferentes oleadas:

Usando el comando summaryBy

library(doBy)

summaryBy(a170r~oleada, data = wvs.peru,
          FUN = function(x) {c(Mediana = median(x, na.rm=T), 
                               Media = mean(x, na.rm=T))})
##      oleada a170r.Mediana a170r.Media
## 1 1995-1998             6    6.361881
## 2 1999-2004             7    6.440268
## 3 2005-2009             7    7.024832
## 4 2010-2014             7    7.134328

Graficamos los resultados:

Media de satisfacción con la vida, según oleada de la WVS

# Primero creamos un data frame con los estadísticos

sat.vid <- summaryBy(a170r~oleada, data = wvs.peru,
          FUN = function(x) {c(Mediana = median(x, na.rm=T), 
                               Media = mean(x, na.rm=T))})
sat.vid
##      oleada a170r.Mediana a170r.Media
## 1 1995-1998             6    6.361881
## 2 1999-2004             7    6.440268
## 3 2005-2009             7    7.024832
## 4 2010-2014             7    7.134328
# Cambiamos los nombres de las columnas
colnames(sat.vid) <- c("Oleada", "Mediana", "Media")
sat.vid
##      Oleada Mediana    Media
## 1 1995-1998       6 6.361881
## 2 1999-2004       7 6.440268
## 3 2005-2009       7 7.024832
## 4 2010-2014       7 7.134328
# Gráfico en ggplot

grafico.p1 <- ggplot(sat.vid, aes(x=Oleada, y=Media)) + geom_point() +
  ylim(3,9) + ylab("Satisfacción con la vida") +
  ggtitle("Nivel promedio de satisfacción con la vida\n según oleada de la WVS en Perú") + theme_bw()
  
grafico.p1

Dispersión: Desviación estándar

Para un año:

sd(wvs.12$a170r, na.rm=T)
## [1] 2.184487
sd(wvs.12$f063r, na.rm=T)
## [1] 1.855891
sd(wvs.12$e033r, na.rm=T)
## [1] 2.165603

Agrupado por año, para una variable:

Satisfacción con la vida

sat.vid <- summaryBy(a170r~oleada, data = wvs.peru,
          FUN = function(x) {c(Mediana = median(x, na.rm=T), 
                               Media = mean(x, na.rm=T),
                               Desv.Est = sd(x, na.rm=T))})
sat.vid
##      oleada a170r.Mediana a170r.Media a170r.Desv.Est
## 1 1995-1998             6    6.361881       2.434181
## 2 1999-2004             7    6.440268       2.396155
## 3 2005-2009             7    7.024832       2.229613
## 4 2010-2014             7    7.134328       2.184487

Importancia de Dios

imp.dios <- summaryBy(f063r~oleada, data = wvs.peru,
          FUN = function(x) {c(Mediana = median(x, na.rm=T), 
                               Media = mean(x, na.rm=T),
                               Desv.Est = sd(x, na.rm=T))})
imp.dios
##      oleada f063r.Mediana f063r.Media f063r.Desv.Est
## 1 1995-1998            10    9.017529       1.793107
## 2 1999-2004            10    9.175839       1.732231
## 3 2005-2009            10    8.978437       1.865199
## 4 2010-2014            10    8.913007       1.855891

Izquierda - Derecha

izder <- summaryBy(e033r~oleada, data = wvs.peru,
          FUN = function(x) {c(Mediana = median(x, na.rm=T), 
                               Media = mean(x, na.rm=T),
                               Desv.Est = sd(x, na.rm=T))})
izder
##      oleada e033r.Mediana e033r.Media e033r.Desv.Est
## 1 1995-1998             5    5.812046       2.033754
## 2 1999-2004             5    5.689708       2.339489
## 3 2005-2009             5    5.654255       2.282443
## 4 2010-2014             5    5.523626       2.165603

Percentiles

Cuartiles

summary(wvs.12$a170r)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   6.000   7.000   7.134   9.000  10.000       4
summary(wvs.12$f063r)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   8.000  10.000   8.913  10.000  10.000       3
summary(wvs.12$e033r)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   5.000   5.000   5.524   7.000  10.000     173

Deciles: usando el comando quantile

quantile(wvs.12$a170r, probs = seq(0, 1, .1 ), na.rm=T)
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    1    5    5    6    7    7    8    8   10   10   10

Quintiles: usando el comando quantile

quantile(wvs.12$a170r, probs = seq(0, 1, .2 ), na.rm=T)
##   0%  20%  40%  60%  80% 100% 
##    1    5    7    8   10   10

Percentiles para edad:

quantile(wvs.12$X003, probs = c(.25, .75, seq(0,1, .1)), na.rm=T)
##  25%  75%   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##   25   50   18   20   23   28   32   37   42   47   54   64   88

Gráfico de Cajas

boxp1 <- ggplot(wvs.peru, aes(x=oleada, y=a170r)) + geom_boxplot() +
  theme_bw() + scale_y_continuous(breaks=(1:10)) + 
  ylab("Nivel de Satisfacción con la Vida") +
  xlab("Oleada") +
  ggtitle("Nivel de Satisfacción con la Vida según\n oleada de la WVS")

boxp1
## Warning: Removed 45 rows containing non-finite values (stat_boxplot).

boxp2 <- ggplot(wvs.peru, aes(x=oleada, y=e033r)) + geom_boxplot() +
  theme_bw() + scale_y_continuous(breaks=(1:10)) + 
  ylab("Escala Izquierda - Derecha") +
  xlab("Oleada") +
  ggtitle("Escala Izquierda - Derecha según\n oleada de la WVS")

boxp2
## Warning: Removed 992 rows containing non-finite values (stat_boxplot).

boxp3 <- ggplot(wvs.peru, aes(x=oleada, y=f063r)) + geom_boxplot() +
  theme_bw() + scale_y_continuous(breaks=(1:10)) + 
  ylab("Importancia de Dios") +
  xlab("Oleada") +
  ggtitle("Importancia de Dios según\n oleada de la WVS")

boxp3
## Warning: Removed 43 rows containing non-finite values (stat_boxplot).

boxp4 <- ggplot(wvs.peru, aes(x=gedad, y=a170r)) + geom_boxplot() +
  facet_wrap(~oleada) +
  theme_bw() + scale_y_continuous(breaks=(1:10)) + 
  ylab("Nivel de Satisfacción") +
  xlab("Oleada") +
  ggtitle("Nivel de Satisfacción con la Vida según\n oleada de la WVS")

boxp4
## Warning: Removed 45 rows containing non-finite values (stat_boxplot).

png("box-%d.png")
plot(boxp1)
## Warning: Removed 45 rows containing non-finite values (stat_boxplot).
plot(boxp2)
## Warning: Removed 992 rows containing non-finite values (stat_boxplot).
plot(boxp3)
## Warning: Removed 43 rows containing non-finite values (stat_boxplot).
plot(boxp4)
## Warning: Removed 45 rows containing non-finite values (stat_boxplot).
dev.off()
## quartz_off_screen 
##                 2