Práctica 4

AE
4/3/2019

Continuación análisis univariado

Variables nominales

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

ls3

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 barra

pie(freq.ls3) # gráfico de pastel

Ojo 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 oscuros

barplot(freq.ls3, col=rainbow(4)) # gráfico de barras () ponemos el número de categorías

barplot(freq.ls3, col=heat.colors(4)) # gráfico de barras () ponemos el número de categorías

Tambié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 1

barplot(freq.ls3, col=my_colors2) # gráficos de barra con colores personalizados 2

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

Porcentajes

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)

¿ggplot?

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

Gráficos bivariados

Igual hacemos un objeto con las frecuencias de una tabla, pero en este caso será una tabla bivariada. Vamos a utilizar otra variable soct2

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

Gráficos de barra

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

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

¿ggplot?

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

Igual 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