Práctica 7(8) - Continuación de bivariado

AE
08/04/19

Cargando ambiente anterior

¡Recuerda poner el directorio!

setwd("~/hdd/Dropbox/FCPyS-2019-ii/ACuanti/Prácticas")

Vamos a trabajar con un ambiente. De la clase anterior que hicimos nuestra variable de región, hemos guardado un ambiente. Vamos a abrirlo con el comando "load".

Esto es útil cuando ya hemos importado bases y no queremos volver a hacerlo, o bien, hemos modificado nuestra base. Si nuestro ambiente está en nuestro directorio, sólo ponemos el nombre de éste. Si no, habría que poner toda la ruta.

load("EnvironmentP6.RData")

Nota que es un archivo con extensión .RData.

Vamos a trabajar con la variable de índice de confianza, pero además su situación de ingreso además del sexo.

library(sjlabelled)
addmargins(table(as_label(mex2017$q10e)))
## 
##         Increased Remained the same         Decreased               Sum 
##               307               702               533              1542

Gráficos de comparación cuanti y cuali

Los gráficos de comparaciones de cajas y distribuciones son muy útiles. Nos permiten ver cómo una variable cuantitativa se comporta entre la población dividida entre los grupos.

Vamos a volver a usar nuestro paquete ggplot2

library(ggplot2)

Vamos a usar la función qplot, otra vez.

Univariado

q<-qplot(index_conf, data=mex2017, geom="density", 
   main="Confianza en las instituciones", xlab="Índice", 
   ylab="Density")
q

Bivariado

Podemos comparar la distribución incluyendo en la opción "fill=" y poner la variable que separa a nuestro grupos.

q<-qplot(index_conf, data=mex2017, geom="density", fill=factor(q1), alpha=I(.5), 
   main="Confianza en las instituciones", xlab="Índice", 
   ylab="Density")
q

Para poder editar la transparencia de nuestro relleno podemos usar la opción alpha y ponerle un valor menor a 1.

q<-qplot(index_conf, data=mex2017, geom="density", fill=factor(q10e), alpha=I(.5), 
   main="Confianza en las instituciones", xlab="Índice", 
   ylab="Density")
q

Podemos comparar la distribución incluyendo en la opción "fill" el nombre la de variable que tenemos de grupo. A veces lo mejor es incluirla como un factor, para que nos tome las etiquetas

q<-qplot(index_conf, data=mex2017, geom="histogram", fill=factor(q10e), alpha=I(.5), 
   main="Confianza en las instituciones", xlab="Índice", 
   ylab="Frecuencia")
q
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Análisis descriptivo

Un truco para hacer el análisis descriptivo es generar una subbase con las variables que vamos analizar

mydata<- mex2017[, c("index_conf", "q1","ed", "q10e")]
tail(mydata)
## # A tibble: 6 x 4
##   index_conf         q1        ed                  q10e
##        <dbl>  <dbl+lbl> <dbl+lbl>             <dbl+lbl>
## 1       1.86 2 [Female]        10 2 [Remained the same]
## 2       4.71 2 [Female]         9 3 [Decreased]        
## 3       4.21 1 [Male]           5 3 [Decreased]        
## 4       3.86 1 [Male]           9 1 [Increased]        
## 5       2.93 2 [Female]        14 3 [Decreased]        
## 6       3.79 1 [Male]          16 2 [Remained the same]

Si queremos obtener las medias de estas variables, usamos la función sapply. Esto nos permite repetir la función para todo el data frame Excluyendo missing values

sapply(mydata, mean, na.rm=TRUE)
## index_conf         q1         ed       q10e 
##   3.647610   1.495841   9.379910   2.146563

Además de media (mean) tenemos las siguientes opciones: mean, sd, var, min, max, median, range, and quantile.

Para obtener de una sola vez las funciones mean,median,25th and 75th quartiles,min,max, usamos la función "summary"

summary(mydata)
##    index_conf          q1              ed             q10e      
##  Min.   :0.000   Min.   :1.000   Min.   : 0.00   Min.   :1.000  
##  1st Qu.:2.714   1st Qu.:1.000   1st Qu.: 6.00   1st Qu.:2.000  
##  Median :3.643   Median :1.000   Median : 9.00   Median :2.000  
##  Mean   :3.648   Mean   :1.496   Mean   : 9.38   Mean   :2.147  
##  3rd Qu.:4.500   3rd Qu.:2.000   3rd Qu.:12.00   3rd Qu.:3.000  
##  Max.   :7.000   Max.   :2.000   Max.   :18.00   Max.   :3.000  
##                                  NA's   :10      NA's   :21
summary(mydata[mydata$q1==1,])
##    index_conf          q1          ed              q10e      
##  Min.   :0.000   Min.   :1   Min.   : 0.000   Min.   :1.000  
##  1st Qu.:2.714   1st Qu.:1   1st Qu.: 6.000   1st Qu.:2.000  
##  Median :3.643   Median :1   Median : 9.000   Median :2.000  
##  Mean   :3.656   Mean   :1   Mean   : 9.549   Mean   :2.072  
##  3rd Qu.:4.500   3rd Qu.:1   3rd Qu.:12.000   3rd Qu.:3.000  
##  Max.   :6.857   Max.   :1   Max.   :18.000   Max.   :3.000  
##                              NA's   :3        NA's   :5
summary(mydata[mydata$q1==2,])
##    index_conf           q1          ed              q10e      
##  Min.   :0.6429   Min.   :2   Min.   : 0.000   Min.   :1.000  
##  1st Qu.:2.6429   1st Qu.:2   1st Qu.: 6.000   1st Qu.:2.000  
##  Median :3.6429   Median :2   Median : 9.000   Median :2.000  
##  Mean   :3.6391   Mean   :2   Mean   : 9.207   Mean   :2.224  
##  3rd Qu.:4.5714   3rd Qu.:2   3rd Qu.:12.000   3rd Qu.:3.000  
##  Max.   :7.0000   Max.   :2   Max.   :18.000   Max.   :3.000  
##                               NA's   :7        NA's   :16

Tapply, se parece a sapply, nos permite hacer una función en un subconjunto que se deriva de un vector. Por ejemplo, a continuación podemos pedirle al programa que nos haga un summary del ingreso, tomando en cuenta un vector de dactor

tapply(mex2017$index_conf, mex2017$q10e, summary)
## $`1`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   3.000   3.857   3.856   4.679   6.857 
## 
## $`2`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.5714  2.7857  3.7143  3.7361  4.5714  7.0000 
## 
## $`3`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.7857  2.5000  3.3571  3.4485  4.3571  7.0000
tapply(mex2017$index_conf, mex2017$q1, summary)
## $`1`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   2.714   3.643   3.656   4.500   6.857 
## 
## $`2`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6429  2.6429  3.6429  3.6391  4.5714  7.0000
tapply(mex2017$index_conf, mex2017$q10e, mean, na.rm=T)
##        1        2        3 
## 3.855980 3.736060 3.448539

Usando datos expandidos

Un elemento importante, sobre todo cuando estamos usando una encuesta es que podemos establecer los valores poblacionales. Para ello, los descriptivos se presentan con los datos de la población y no de la muestra. Esto se hace expandiendo los datos muestrales según el peso o factor de espansión.

En el caso de la enigh este es factor cambia de acuerdo de los módulos "wt"

Para esto usaremos la librería "questionr"

install.packages("questionr", repos = "http://cran.us.r-project.org", dependencies = TRUE)
## Installing package into '/home/aniux/R/x86_64-pc-linux-gnu-library/3.5'
## (as 'lib' is unspecified)
library(questionr)

Para usar nuestro factor de expansión primero tenemos que verificar qué tipo de valor es en nuestro objeto.

class(mex2017$wt)
## [1] "numeric"

Si no es numérico, hay que transformarlo a numérico:

#mex2017$wt<-as.numeric(mex2017$wt)

Este paquete tiene la función wdt.mean, calcula las medias tomando en cuenta los pesos.

    wtd.mean(mex2017$index_conf, weights = mex2017$wt, na.rm = TRUE)
## [1] 3.64761
#También podemos usar el valor con el comando weighted mean
    weighted.mean(x = mex2017$index_conf, w = mex2017$wt, na.rm = TRUE)
## [1] 3.64761

Para variables cualitativas podemos hacer tablas con los factores de expansión

    wtd.table(mex2017$q10e, weights = mex2017$wt)
##   1   2   3 
## 307 702 533

Para una tabla cruzada

    wtd.table(mex2017$q10e,mex2017$q1, weights = mex2017$wt)
##     1   2
## 1 186 121
## 2 355 347
## 3 242 291

Mi primera función

Unos de los elementos más poderosos de R es hacer nuestra propias funciones. Y cuando trabajamos bases de datos a veces hacemos un procedimiento que lo queremos repetir. Tal vez para una base de datos, tal vez para una variable, tal vez para grupos de casos.

Para ello haremos una función sencilla. Para sumarle un valor un 1

mi_funcion<-function(x) {
    x<-x+1
    x
}

mi_funcion(5)
## [1] 6

Qué tal hoy una una función donde podamos establecer qué valor sumamos

mi_funcion<-function(x,a) {
    x<-x+a
    x
}

mi_funcion(5,2)
## [1] 7

Mi función para expandir medias

expandir<- function(x){
  weighted.mean(x, w = mex2017$wt)
}