AE
08/04/19
¡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
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")
qBivariado
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")
qPara 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")
qPodemos 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`.
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
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
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)
}