AE
4/3/2019
Hoy volveremos a nuestra base de LAPOP, así que la importamos desde su formato de stata (.dta), desde nuestro directorio de trabajo
setwd("~/Dropbox/FCPyS-2019-ii/ACuanti/Prácticas")Importamos la base
library(haven)
mex2017 <- read_dta("275973272Mexico LAPOP AmericasBarometer 2017 V1.0_W.dta")Vamos a revisar la primera pregunta, que habla sobre satisfacción con la vida
table(mex2017$ls3)##
## 1 2 3 4
## 670 709 120 48
Recordemos que podemos usar la librería sjlabelled
library(sjlabelled)## Warning: package 'sjlabelled' was built under R version 3.5.2
##
## Attaching package: 'sjlabelled'
## The following objects are masked from 'package:haven':
##
## as_factor, read_sas, read_spss, read_stata, write_sas,
## zap_labels
table(as_label(mex2017$ls3))##
## Very Satisfied Somewhat Satisfied Somewhat Dissatisfied
## 670 709 120
## Very Dissatisfied
## 48
Este resultado lo podemos asignar a un objeto nuevo
freq.ls3<-table(as_label(mex2017$ls3))El tenerlo como un objeto nos sirve sobre todo porque podemos aplicarle funciones a esta tabla de frecuencias, las funciones más importantes que podemos aplicar son las gráficas
plot(freq.ls3) # el gráfico más sencillo barplot(freq.ls3) # gráficos de barrapie(freq.ls3) # gráfico de pastelOjo con los gráficos de pastel, hay polémica https://blog.funnel.io/why-we-dont-use-pie-charts-and-some-tips-on-better-data-visualizations https://www.youtube.com/watch?v=axx_MYb8-SI http://speakingppt.com/index.php/2013/03/18/why-tufte-is-flat-out-wrong-about-pie-charts/
Vamos a modificar ligeramente los colores
barplot(freq.ls3, col=gray(0:4/4)) # gráficos de barra con escala de grises de oscuro a claros, (8 categorías)barplot(freq.ls3, col=gray(4:0/4)) # gráficos de barra con escala de grises de claro a oscurosbarplot(freq.ls3, col=rainbow(4)) # gráfico de barras () ponemos el número de categoríasbarplot(freq.ls3, col=heat.colors(4)) # gráfico de barras () ponemos el número de categoríasTambién podemos hacer nuestro propio vector de colores, para la paleta de nombres de colores que usa R, revisar http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
my_colors1<-c("lightblue","lightblue1", "lightblue2", "lightblue3")
my_colors2<-c("mediumorchid","mediumorchid1", "mediumorchid2", "mediumorchid3")
barplot(freq.ls3, col=my_colors1) # gráficos de barra con colores personalizados 1barplot(freq.ls3, col=my_colors2) # gráficos de barra con colores personalizados 2Para poner título
barplot(freq.ls3, col=gray.colors(4))
title(main = list("Nivel de satisfacción", font = 4))# border :
barplot(freq.ls3, border = "dark blue", col=my_colors2, legend = rownames(freq.ls3))Para hacer las barras horizontales le ponemos la opción "horiz=TRUE"
barplot(freq.ls3, border = "dark blue", col=my_colors2, legend = rownames(freq.ls3), horiz=TRUE )prop.table(freq.ls3)##
## Very Satisfied Somewhat Satisfied Somewhat Dissatisfied
## 0.43309632 0.45830640 0.07756949
## Very Dissatisfied
## 0.03102780
prop.ls3<-prop.table(freq.ls3) # Podemos agregarlo a un objeto
addmargins(prop.ls3) # Para que nos dé el total##
## Very Satisfied Somewhat Satisfied Somewhat Dissatisfied
## 0.43309632 0.45830640 0.07756949
## Very Dissatisfied Sum
## 0.03102780 1.00000000
Este objeto también lo podemos gráficar
barplot(prop.ls3)Los gráficos de ggplot asumen que obtenemos los datos de un dataframe. Por lo que los objetos como tabla tienen que ser transformados a dataframes
ggfreq.ls3<-as.data.frame(freq.ls3)Una vez tenemos esto, ya podemos aplicar nuestro paquete ggplot
library(ggplot2)
g<-ggplot(data=ggfreq.ls3, aes(x=Var1, y=Freq)) +
geom_bar(stat="identity")
gIgual hacemos un objeto con las frecuencias de una tabla, pero en este caso será una tabla bivariada. Vamos a utilizar otra variable
freq.ls3_soct2<-table(as_label(mex2017$ls3), as_label(mex2017$soct2))
freq.ls3_soct2##
## Better Same Worse
## Very Satisfied 14 121 529
## Somewhat Satisfied 15 91 593
## Somewhat Dissatisfied 2 15 99
## Very Dissatisfied 1 6 39
Con este objeto vamos a graficar.
Para barras apiladas
barplot(freq.ls3_soct2, main="Satisfacción de la vida y percepción económica",
col=heat.colors(4),
legend = rownames(freq.ls3_soct2))Para barras agrupadas Para estos gráficos usamos el mismo código, pero le activamos la opción "beside"
barplot(freq.ls3_soct2, main="Satisfacción de la vida y percepción económica",
col=heat.colors(4),
legend = rownames(freq.ls3_soct2),
beside=TRUE )Para las barras apiladas es útil que lo veamos en términos de proporciones y por tanto vamos a revisar los porcentajes
Para eso usamos "prop.table", pero hoy especificamos opciones la opción 1, es para que nos dé las proporciones por fila la opción 2, es para que nos dé las proporciones por columna Sin opción, da la proporción para el total de observaciones
prop.ls3_soct2<-prop.table(freq.ls3_soct2,2)
prop.ls3_soct2##
## Better Same Worse
## Very Satisfied 0.43750000 0.51931330 0.41984127
## Somewhat Satisfied 0.46875000 0.39055794 0.47063492
## Somewhat Dissatisfied 0.06250000 0.06437768 0.07857143
## Very Dissatisfied 0.03125000 0.02575107 0.03095238
barplot(prop.ls3_soct2, main="Satisfacción de la vida y percepción económica",
col=heat.colors(4),
legend = rownames(prop.ls3_soct2))Nuevamente, lo primero que tenemos que hacer es pasar nuestros objetos de frecuencia a dataframes
ggfreq.ls3_soct2<-as.data.frame(freq.ls3_soct2)Los gráficos bivariados los podemos establecer con la columna fill para que tengamos diferentes colores en una misma barra
g2<-ggplot(data=ggfreq.ls3_soct2, aes(x=Var1, y=Freq, fill=Var2)) +
geom_bar(stat="identity")
g2Igual que con las funciones "base", tenemos que especificar si queremos que no sea apilada
g3<-ggplot(data=ggfreq.ls3_soct2, aes(x=Var1, y=Freq, fill=Var2)) +
geom_bar(stat="identity", position=position_dodge())
g3