Se trabajará con los datos de la EMV de Perú
load("wvs_peru.rdata")
Vamos a trabajar con las siguientes 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
Se hará el gráfico a solo para la encuesta del 2012 (oledad 2010-2014)
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
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
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
png("gtabla1.png")
plot(grafico1)
dev.off()
## quartz_off_screen
## 2
Para más opciones ver: http://www.cookbook-r.com/Graphs/
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
Realizar los siguientes gráficos:
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).
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).
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).
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
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
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
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
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