---
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
`r opts_chunk$set(message=FALSE,comment="",size='small')`
```{r, echo = FALSE}
#install.packages(devtools)
#library(devtools)
#install_github('slidify', 'ramnathv')
#install_github('slidifyLibraries', 'ramnathv')
#install_version("stringr", version="0.6.2", type = "source")
#Cambiar el directorio: setwd("/Users/josezea/jfzeac")
library(slidify)
library(slidifyLibraries)
options(rpubs.upload.method = "internal")
publish(title = 'clase1419', 'index.html', host = 'rpubs')
#publish(user = "jfzeac", repo = "prueba")
```
<div align="center">
<img src = "candane.png" width = "900", height = "480" />
</div>
<br>
## Curso de Análisis de datos con R
</br>
<h3>Instructor:</h3>
<h2> José Fernando Zea</h2>
<li><h4>Msc en Estad??stica</h4></li>
<li><h4>Docente Universidad Nacional</h4></li>
<li><h4>Estudiante Phd en Estadistica (UNAL)</h4></li>
Descargar estas dos tablas:
Cargar sjPlot, haven, ggplot2
--- .cover #Cover
## Preparación
- Descargar estas dos tablas:
- <a href="https://www.dropbox.com/s/5odvss7s6iz3voq/saber2014II.sav?dl=0">https://www.dropbox.com/s/5odvss7s6iz3voq/saber2014II.sav?dl=0</a>
- <a href="https://www.dropbox.com/s/h47ig09optv46rm/EMB2011.RData?dl=0">https://www.dropbox.com/s/h47ig09optv46rm/EMB2011.RData?dl=0</a>
- <a href="https://www.dropbox.com/s/ta6sube2f652b1d/MultoproR.Rdata?dl=0">https://www.dropbox.com/s/ta6sube2f652b1d/MultoproR.Rdata?dl=0</a>
- Cargar sjPlot, haven, ggplot2
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
sjp.frq(saber_2014II$JORNADA,title = "Frec. abs.")
#Gráfico de frecuencias
a <- sjp.frq(saber_2014II$JORNADA,title = "Pruebas Saber 2014 I", geom.colors = "darkred",
axisTitle.y = "Frecuencias absolutas" )
---
## Análisis univariado de variables categóricas (gráfico de barras):
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, eval=FALSE}
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, eval=FALSE}
sjp.frq(saber_2014II$JORNADA,title = "Frec. abs.")
```
```{r, eval=T, results='hide', fig.height=4}
#Gráfico de frecuencias
a <- sjp.frq(saber_2014II$JORNADA,title = "Pruebas Saber 2014 I", geom.colors = "darkred",
axisTitle.y = "Frecuencias absolutas" )
```
#Gráfico de frecuencias
a <- sjp.frq(saber_2014II$JORNADA,title = "Pruebas Saber 2014 I",
axisTitle.y = "Frecuencias absolutas", coord.flip = TRUE,
labelPos = "inside", sort.frq = "desc")
Más detalles de esta función: http://www.strengejacke.de/sjPlot/sjt.frq/
Puede extraerse la tabla con la que se genera el gráfico:
a$mydf
---
## Análisis univariado de variables categóricas: gráfico de barras (cont):
- Se puede rotar el gráfico:
```{r, eval=T, results='hide', fig.height=5}
#Gráfico de frecuencias
a <- sjp.frq(saber_2014II$JORNADA,title = "Pruebas Saber 2014 I",
axisTitle.y = "Frecuencias absolutas", coord.flip = TRUE,
labelPos = "inside", sort.frq = "desc")
```
- Más detalles de esta función: <a href="http://www.strengejacke.de/sjPlot/sjt.frq/">http://www.strengejacke.de/sjPlot/sjt.frq/</a>
- Puede extraerse la tabla con la que se genera el gráfico:
```{r, eval=FALSE}
a$mydf
```
a$mydf
var frq prz valid cumperc lower.ci upper.ci
1 1 5550 46.63 46.63 46.63 2692 2874
2 2 2783 23.38 23.38 70.01 5443 5657
3 3 1567 13.16 13.16 83.17 1495 1639
4 4 1060 8.91 8.91 92.08 999 1121
5 5 943 7.92 7.92 100.00 885 1001
#Tabla de frecuencias
sjt.frq(saber_2014II$JORNADA)
sjt.frq(saber_2014II$JORNADA, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
Se muestra en la siguiente diapositiva la salida
---
## Análisis univariado de variables categóricas: tablas
- Podemos extraer del gráfico la información calculada en un dataframe
```{r, eval=TRUE}
a$mydf
```
- Es más comodo presentar esta tabla ya editada:
```{r, eval=FALSE}
#Tabla de frecuencias
sjt.frq(saber_2014II$JORNADA)
sjt.frq(saber_2014II$JORNADA, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
```
Se muestra en la siguiente diapositiva la salida
---
## Análisis univariado de variables categóricas: tablas (cont)
<div align="right">
<img src = "tfrec_sjplot.png" width = "450", height = "450"
alt = "Append" />
</div>
- Este archivo se puede exportar a excel o word (basta en file especificar el nombre del archivo), o se puede pegar el código html para realizar una página web:
- sjt.frq(saber_2014II$JORNADA, file = "salida1.docx")
- sjt.frq(saber_2014II$JORNADA, file = "salida1.xlsx")
- Los archivos exportados quedarán en la carpeta donde R se encuentre direccionado (ver getwd() en la consola)
- Más detalles de esta función: <a href="http://www.strengejacke.de/sjPlot/sjt.frq/">http://www.strengejacke.de/sjPlot/sjt.frq//</a>
Oberve en la encuesta multiproposito la pregunta 9 del módulo L: http://formularios.dane.gov.co/Anda_4_1/index.php/catalog/189/download/2877. Se definen las estiquetas de valor y de variable, si se exporta de spss y de stata con las funciones del paquete haven este proceso no hay que realizarlo:
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("MultoproR.Rdata")
library(sjmisc)
inicial <- which(colnames(capL) == "l9a") # Posición inicial
final <- which(colnames(capL) == "l9l") # Posicición final
# table(as.character(as.matrix(capL[,inicial:final])))
for(j in inicial:final){
capL[,j] <- set_val_labels(as.numeric(capL[ ,j]), c("mejor", "igual", "peor", "no sabe"))
}
capL[,21] <- set_var_labels(capL[,21],"Vías"); capL[,22] <- set_var_labels(capL[,22],"Andenes")
capL[,23] <- set_var_labels(capL[,23],"Puentes peatonales")
capL[,24] <- set_var_labels(capL[,24],"Ciclorutas")
capL[,25] <- set_var_labels(capL[,25],"Parques");
capL[,26] <- set_var_labels(capL[,26],"Colegios")
capL[,27] <- set_var_labels(capL[,27],"Transmilenio");
capL[,28] <- set_var_labels(capL[,28],"Bibilioteca")
capL[,29] <- set_var_labels(capL[,29],"Ampliación redes acueducto")
capL[,30] <- set_var_labels(capL[,30],"Ampliación de redes alcantarillado")
capL[,31] <- set_var_labels(capL[,31],"Canchas, escenarios deportivos")
capL[,32] <- set_var_labels(capL[,32],"Supermercados, zonas comerciales")
---
## Tablas apiladas (stacked table):
Oberve en la encuesta multiproposito la pregunta 9 del módulo L:
<a href="http://formularios.dane.gov.co/Anda_4_1/index.php/catalog/189/download/2877">http://formularios.dane.gov.co/Anda_4_1/index.php/catalog/189/download/2877</a>. Se definen las estiquetas de valor y de variable, si se exporta de spss y de stata con las funciones del paquete haven este proceso no hay que realizarlo:
```{r, echo = T}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("MultoproR.Rdata")
library(sjmisc)
inicial <- which(colnames(capL) == "l9a") # Posición inicial
final <- which(colnames(capL) == "l9l") # Posicición final
# table(as.character(as.matrix(capL[,inicial:final])))
for(j in inicial:final){
capL[,j] <- set_val_labels(as.numeric(capL[ ,j]), c("mejor", "igual", "peor", "no sabe"))
}
capL[,21] <- set_var_labels(capL[,21],"Vías"); capL[,22] <- set_var_labels(capL[,22],"Andenes")
capL[,23] <- set_var_labels(capL[,23],"Puentes peatonales")
capL[,24] <- set_var_labels(capL[,24],"Ciclorutas")
capL[,25] <- set_var_labels(capL[,25],"Parques");
capL[,26] <- set_var_labels(capL[,26],"Colegios")
capL[,27] <- set_var_labels(capL[,27],"Transmilenio");
capL[,28] <- set_var_labels(capL[,28],"Bibilioteca")
capL[,29] <- set_var_labels(capL[,29],"Ampliación redes acueducto")
capL[,30] <- set_var_labels(capL[,30],"Ampliación de redes alcantarillado")
capL[,31] <- set_var_labels(capL[,31],"Canchas, escenarios deportivos")
capL[,32] <- set_var_labels(capL[,32],"Supermercados, zonas comerciales")
```
Se realiza la tabla con el paquete sjPlot:
library(sjPlot)
sjt.stackfrq(capL[,inicial:final], title = 'Entre el año 2007 y el momento actual,
¿cree que la ciudad ha mejorado, empeorado o se mantiene igual, en cada uno de los
siguientes equipamientos?')
---
## Tablas apiladas (continuación)
Se realiza la tabla con el paquete sjPlot:
```{r, echo = T, eval=T}
library(sjPlot)
sjt.stackfrq(capL[,inicial:final], title = 'Entre el año 2007 y el momento actual,
¿cree que la ciudad ha mejorado, empeorado o se mantiene igual, en cada uno de los
siguientes equipamientos?')
```
<div align="right">
<img src = "tablaapilada.png" width = "500", height = "500"
alt ="Append" />
</div>
library(sjPlot)
sjp.stackfrq(capL[,inicial:final], title = 'La ciudad del 2007 al 2011 está:')
Otra tabla y gráfico muy similar lo pueden observar en: http://www.strengejacke.de/sjPlot/sjp.likert/
---
## Gráfico de una tabla de frecuencias apilada
```{r, echo = T, eval=T, fig.width=20, fig.height=10}
library(sjPlot)
sjp.stackfrq(capL[,inicial:final], title = 'La ciudad del 2007 al 2011 está:')
```
Otra tabla y gráfico muy similar lo pueden observar en: <a href="http://www.strengejacke.de/sjPlot/sjp.likert/">http://www.strengejacke.de/sjPlot/sjp.likert/</a>
rm(list = ls())
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
library(ggplot2)
ggplot(ing_gastos, aes(x=ingreso)) + geom_histogram()
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
g1 <- ggplot(ing_gastos, aes(x=ingreso)) + geom_histogram(binwidth = 1000000)
g1
---
## Análisis univaraiado de variables continuas: histograma
```{r, echo = T, eval=TRUE}
rm(list = ls())
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
library(ggplot2)
```
```{r,eval=FALSE}
ggplot(ing_gastos, aes(x=ingreso)) + geom_histogram()
```
```{r, echo = T, fig.height=4}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
g1 <- ggplot(ing_gastos, aes(x=ingreso)) + geom_histogram(binwidth = 1000000)
g1
```
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
g1 <- ggplot(ing_gastos, aes(x=ingreso))
g1 + geom_histogram(aes(y = ..density..)) + geom_density() + xlim(0, 10000000) +
xlab("Ingreso (CO$") + ylab("Densidad") + ggtitle("Gráfico 1")
Puede ver más información para personalizar su gráfico buscando ggplot2 histogram en la web.
---
## Análisis bivariado de variables continuas: histograma y densidad (2)
```{r, echo = T, fig.height=5, warning=FALSE}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/FicherosR")
load("EMB2011.RData")
g1 <- ggplot(ing_gastos, aes(x=ingreso))
g1 + geom_histogram(aes(y = ..density..)) + geom_density() + xlim(0, 10000000) +
xlab("Ingreso (CO$") + ylab("Densidad") + ggtitle("Gráfico 1")
```
Puede ver más información para personalizar su gráfico buscando ggplot2 histogram en la web.
En las pruebas saber del primer semestre del 2014 gráficar jornada del colegio con la naturaleza del colegio:
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
sjp.xtab(saber_2014II$JORNADA, saber_2014II$NATURALEZA, tableIndex = "row")
---
## Tablas cruzadas - Gráfico
En las pruebas saber del primer semestre del 2014 gráficar jornada del colegio con la naturaleza del colegio:
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, eval=FALSE}
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, echo = T, fig.height=5, warning=FALSE}
sjp.xtab(saber_2014II$JORNADA, saber_2014II$NATURALEZA, tableIndex = "row")
```
Perfiles fila:
sjp.xtab(saber_2014II$NATURALEZA, saber_2014II$JORNADA, tableIndex = "row", barPosition = "stack")
---
## Tablas cruzadas - Gráfico (cont.)
Perfiles fila:
```{r, echo = T, fig.height=5, warning=FALSE}
sjp.xtab(saber_2014II$NATURALEZA, saber_2014II$JORNADA, tableIndex = "row", barPosition = "stack")
```
- Se puede ver más opciones en: <a href="http://www.strengejacke.de/sjPlot/sjp.xtab/">http://www.strengejacke.de/sjPlot/sjp.xtab/</a>
Se pueden mostrar los perfiles fila, perfiles columnas y porcentajes total e igualmente personalizar al gusto los resutados de la tabla:
library(sjPlot)
sjt.xtab(saber_2014II$NATURALEZA, saber_2014II$JORNADA, showRowPerc = TRUE,
showCellPerc = TRUE, showColPerc = TRUE)
---
## Tablas cruzadas
Se pueden mostrar los perfiles fila, perfiles columnas y porcentajes total e igualmente personalizar al gusto los resutados de la tabla:
```{r, echo = T, eval=T}
library(sjPlot)
sjt.xtab(saber_2014II$NATURALEZA, saber_2014II$JORNADA, showRowPerc = TRUE,
showCellPerc = TRUE, showColPerc = TRUE)
```
<div align="right">
<img src = "tablacruzada.png" width = "600", height = "600"
alt ="Append" />
</div>
- Se puede ver más opciones en: <a href="http://www.strengejacke.de/sjPlot/sjt.xtab/">http://www.strengejacke.de/sjPlot/sjt.xtab/</a>
library(haven)
library(ggplot2)
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
saber_2014II <- read_spss("saber2014II.sav")
saber_2014II$JORNADA <- as_factor(saber_2014II$JORNADA)
g2 <- ggplot(saber_2014II, aes(factor(JORNADA), PROMMATEMATICA))
g2 + geom_boxplot(aes(fill = factor(JORNADA)))
ggplot(saber_2014II, aes(x=PROMMATEMATICA)) +
geom_density(aes(group=JORNADA, colour=JORNADA, fill=JORNADA), alpha=0.3)
--- -
## Análisis de una variable continua y una variable categórica
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, eval=FALSE}
library(haven)
library(ggplot2)
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
saber_2014II <- read_spss("saber2014II.sav")
saber_2014II$JORNADA <- as_factor(saber_2014II$JORNADA)
```
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
saber_2014II <- read_spss("saber2014II.sav")
library(haven)
library(ggplot2)
```
```{r, echo = T, eval=T, fig.width=7, fig.height=3, warning=FALSE, message=FALSE, error=FALSE}
g2 <- ggplot(saber_2014II, aes(factor(JORNADA), PROMMATEMATICA))
g2 + geom_boxplot(aes(fill = factor(JORNADA)))
```
```{r, eval=FALSE}
ggplot(saber_2014II, aes(x=PROMMATEMATICA)) +
geom_density(aes(group=JORNADA, colour=JORNADA, fill=JORNADA), alpha=0.3)
```
#saber_2014II$NATURALEZA <- as_factor(saber_2014II$NATURALEZA )
library(ggplot2)
ggplot(saber_2014II, aes(x=PROMMATEMATICA, y = NATURALEZA)) + geom_point(position = "jitter")
#jitter plot
ggplot(saber_2014II, aes(x=NATURALEZA, y=PROMMATEMATICA)) +
geom_jitter(alpha=I(1/4), aes(color=NATURALEZA )) +
xlab("Naturaleza") + labs(color = "Naturaleza")
---
## Análisis de una variable continua y una variable categórica (2)
- Gráfico Jitter:
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
#saber_2014II$NATURALEZA <- as_factor(saber_2014II$NATURALEZA )
library(ggplot2)
ggplot(saber_2014II, aes(x=PROMMATEMATICA, y = NATURALEZA)) + geom_point(position = "jitter")
```
```{r, echo = T, eval=T, fig.width=7, fig.height=3, warning=FALSE, message=FALSE, error=FALSE}
#jitter plot
ggplot(saber_2014II, aes(x=NATURALEZA, y=PROMMATEMATICA)) +
geom_jitter(alpha=I(1/4), aes(color=NATURALEZA )) +
xlab("Naturaleza") + labs(color = "Naturaleza")
```
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES,
title = "Relación inglés y matemática")
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, title = "Relación inglés y matemática", showTotalFitLine = T)
---
## Diagrama de dispersion
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
- Diagrama de dispersión
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES,
title = "Relación inglés y matemática")
```
- Diagrama de dispersión con ajuste
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, title = "Relación inglés y matemática", showTotalFitLine = T)
```
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, title = "Relación inglés y matemática", showTotalFitLine = TRUE, show.se = FALSE, fitmethod = "loess")
sjp.scatter(x = saber_2014II$PROMMATEMATICA, y = saber_2014II$PROMINGLES,
grp = saber_2014II$NATURALEZA, showGroupFitLine = TRUE)
---
## Diagrama de dispersion (2)
- Diagrama de dispersión con regresión local polinomial:
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, title = "Relación inglés y matemática", showTotalFitLine = TRUE, show.se = FALSE, fitmethod = "loess")
```
- Diagrama de dispersión desagregado por una variable categórica:
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
sjp.scatter(x = saber_2014II$PROMMATEMATICA, y = saber_2014II$PROMINGLES,
grp = saber_2014II$NATURALEZA, showGroupFitLine = TRUE)
```
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, saber_2014II$NATURALEZA,
showGroupFitLine = TRUE, fitmethod = "loess",
facet.grid = TRUE)
---
## Diagrama de dispersion (3)
```{r, echo = T, eval=T, fig.width=7, fig.height=2, warning=FALSE, message=FALSE, error=FALSE}
sjp.scatter(saber_2014II$PROMMATEMATICA, saber_2014II$PROMINGLES, saber_2014II$NATURALEZA,
showGroupFitLine = TRUE, fitmethod = "loess",
facet.grid = TRUE)
```
---
## Actividad
- Los gráficos pueden sustituir las tablas y loas análisis numéricos:
a tabla de frecuencias de
- Lleve a cabo una tabla de frecuencias de la jornada del colegio
- ¿Hay alguna relación entre el calendario y la jornada del colegio?, realice un perfile fila, y elabore la tabla cruzada (mostrando los perfiles filas y los conteos unicamente). Al final exporte ambos archivos generados.
- Realice un boxplot y un jiiter para comprar el puntje de matemáticas por jornada
- Realice un gráfico de densidades que le permita comprar el puntaje de matemáticas por calendario
- Utilice la encuesta multiproposito y con un gráfico analice como es la relación entre el gasto y el ingreso por estrato socioeconómico.
library(dplyr)
cons1 <- saber2014II %>% mutate(PROMGLOBAL = (PROMMATEMATICA + PROMINGLES +
PROMLECTURACRITICA + PROMSOCIALESYCIUDADANAS + PROMCIENCIASNATURALES +
PROMRAZONAMIENTOCUANTITA+ PROMCOMPETENCIASCIUDADAN)/7) %>%
group_by(DEPARTAMENTO) %>%
summarize( PROMGLOBALXDPTO = sum(PROMGLOBAL * EVALUADOS) / sum(EVALUADOS) ) %>%
arrange(desc(PROMGLOBALXDPTO)) %>% filter(DEPARTAMENTO != "BOGOTA") %>%
mutate(ranking = 1: 32 ) %>%
select(ranking, DEPARTAMENTO, PROMGLOBALXDPTO ) #Ignoraamos Bogotá
cortes <- as.numeric(quantile(cons1$PROMGLOBALXDPTO))
cons1$grupo <- cut(cons1$PROMGLOBALXDPTO, breaks = cortes, include.lowest = T, right = F,labels=F)
---
## Mapas temáticos
- Preparamos la base de datos para hacer un mapa por cuartiles de los departamentos por desempeño en las pruebas saber:
```{r, echo=FALSE, results='hide', eval=TRUE}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
saber2014II <- read_spss("saber2014II.sav")
```
```{r, echo=TRUE, eval=TRUE}
library(dplyr)
cons1 <- saber2014II %>% mutate(PROMGLOBAL = (PROMMATEMATICA + PROMINGLES +
PROMLECTURACRITICA + PROMSOCIALESYCIUDADANAS + PROMCIENCIASNATURALES +
PROMRAZONAMIENTOCUANTITA+ PROMCOMPETENCIASCIUDADAN)/7) %>%
group_by(DEPARTAMENTO) %>%
summarize( PROMGLOBALXDPTO = sum(PROMGLOBAL * EVALUADOS) / sum(EVALUADOS) ) %>%
arrange(desc(PROMGLOBALXDPTO)) %>% filter(DEPARTAMENTO != "BOGOTA") %>%
mutate(ranking = 1: 32 ) %>%
select(ranking, DEPARTAMENTO, PROMGLOBALXDPTO ) #Ignoraamos Bogotá
cortes <- as.numeric(quantile(cons1$PROMGLOBALXDPTO))
cons1$grupo <- cut(cons1$PROMGLOBALXDPTO, breaks = cortes, include.lowest = T, right = F,labels=F)
```
setwd("/media/josezea/OS/Documents and Settings/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/Mapas")
library(sp) #Librería espacial
load("COL_adm1.RData" )
col_dpto=gadm
grupo = as.factor(cons1$grupo) #Variable temática (categórica)
col_dpto$grupo <- grupo
spplot(col_dpto, "grupo",col.regions=c("red","yellow", "green", "blue"))
---
## Mapas temáticos (2)
- Elaboremos un mapa temático del puntaje global por
- www.gadm.org/country
```{r, eval=FALSE}
setwd("/media/josezea/OS/Documents and Settings/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/Mapas")
library(sp) #Librería espacial
load("COL_adm1.RData" )
col_dpto=gadm
grupo = as.factor(cons1$grupo) #Variable temática (categórica)
col_dpto$grupo <- grupo
spplot(col_dpto, "grupo",col.regions=c("red","yellow", "green", "blue"))
```
# nombrefuncion <- function(parametro1, parametro2, ....)
# {
#cuerpo de la funcion ...
#return()
# }
cv <- function(x, porc = T, falt = F ){
if(porc == T) cv <- 100 * sd(x, na.rm = falt) / mean(x, na.rm = falt)
else cv<- sd(x, na.rm = falt) / mean(x, na.rm = falt)
return(cv)
}
a <- c(3,7,8,9,11,16,12)
cv(a) # Por defecto hace el cv como porcentaje
cv(a, F)
cv(porc = F, x = a) #Se puede cambiar el orden
b <- c(3,7,8,9,11,16,12, NA)
cv(b)
cv(b, falt = T) # En este caso falt es el tercer parámetro, se debe expecificar
---
## Funciones
- Las funciones tienen la siguinte estructura:
```{r, echo = T}
# nombrefuncion <- function(parametro1, parametro2, ....)
# {
#cuerpo de la funcion ...
#return()
# }
```
- Por ejemplo, una funonción para calcular el coficiente de variación
```{r, eval=F}
cv <- function(x, porc = T, falt = F ){
if(porc == T) cv <- 100 * sd(x, na.rm = falt) / mean(x, na.rm = falt)
else cv<- sd(x, na.rm = falt) / mean(x, na.rm = falt)
return(cv)
}
a <- c(3,7,8,9,11,16,12)
cv(a) # Por defecto hace el cv como porcentaje
cv(a, F)
cv(porc = F, x = a) #Se puede cambiar el orden
b <- c(3,7,8,9,11,16,12, NA)
cv(b)
cv(b, falt = T) # En este caso falt es el tercer parámetro, se debe expecificar
```
A <- matrix(1:9, ncol = 3)
class(A)
datos <- data.frame(ID = paste("ID", 1:5, sep = "-"), edad = c(45, 32, 17, 23, 35), sexo = c("M", "F", "M", "F", "M"))
class(datos)
x <- c(6, 5)
class(x)
lista1 <- list <- list(A, datos, x)
lista1
lista1[[1]] #Segundo elemento de la lista un matriz
lista1[[1]][, 3] #Extraigamos el tercer elemento de la lista
lista2 <- list <- list(nombre1 = A, nombre2 = datos, nombre3 = x)
lista2$nombre2
# La función lm para un modelo lineal
x <- 1:5; y <- c(3.1, 3.8, 5.5, 10, 9.7 )
modelo <- lm(y~x)
names(modelo)
modelo$coefficients; modelo[[1]]
---
## Funciones (2)
- Se puede crear funciones que arrojen varios resultados al tiempo, para esto es útil una lista
- Una lista es una estructura en R que puede contener vectores, matrices, data.frames.
```{r, eval=F}
A <- matrix(1:9, ncol = 3)
class(A)
datos <- data.frame(ID = paste("ID", 1:5, sep = "-"), edad = c(45, 32, 17, 23, 35), sexo = c("M", "F", "M", "F", "M"))
class(datos)
x <- c(6, 5)
class(x)
lista1 <- list <- list(A, datos, x)
lista1
lista1[[1]] #Segundo elemento de la lista un matriz
lista1[[1]][, 3] #Extraigamos el tercer elemento de la lista
lista2 <- list <- list(nombre1 = A, nombre2 = datos, nombre3 = x)
lista2$nombre2
```
- Las funciones que requiere que tengan varios objetos en la salida usualmente arrojan una lista, por ejemplo:
```{r, eval=F}
# La función lm para un modelo lineal
x <- 1:5; y <- c(3.1, 3.8, 5.5, 10, 9.7 )
modelo <- lm(y~x)
names(modelo)
modelo$coefficients; modelo[[1]]
```
descriptivas <- function(x, falt = F){
min <- min(x, na.rm = falt)
promedio <- mean(x, na.rm = falt)
mediana <- median(x, na.rm = falt)
de <- sd(x, na.rm = falt)
library(moments)
asimetria <- skewness(x, na.rm = falt)
curtosis <- kurtosis(x, na.rm = falt)
p25 <- as.numeric(quantile(x, na.rm = falt, 0.25)) #Con el as.numeric le quito la etiqueta
p75 <- as.numeric(quantile(x, na.rm = falt, 0.75))
maximo <- max(x, na.rm = falt)
salida <- list(Mínimo = min, Promedio = promedio, Mediana = mediana,
Desv_Est = de, Asimetria = asimetria, Curtosis = curtosis,
P25 = p25, P75 = p75, Maximo = maximo )
salida
}
a <- c(3, 5, 7, 8, 9, 11, 15, 17, 21, 5, 6, 8, 1)
descriptivas(a)
descriptivas(a)$Asimetria
descriptivas(a)[3]
class(descriptivas(a)[3]); class(descriptivas(a)[[3]])
---
## Funciones (3)
- Si se quiere una función que calcule todas las descriptivas básicas:
```{r, eval=F}
descriptivas <- function(x, falt = F){
min <- min(x, na.rm = falt)
promedio <- mean(x, na.rm = falt)
mediana <- median(x, na.rm = falt)
de <- sd(x, na.rm = falt)
library(moments)
asimetria <- skewness(x, na.rm = falt)
curtosis <- kurtosis(x, na.rm = falt)
p25 <- as.numeric(quantile(x, na.rm = falt, 0.25)) #Con el as.numeric le quito la etiqueta
p75 <- as.numeric(quantile(x, na.rm = falt, 0.75))
maximo <- max(x, na.rm = falt)
salida <- list(Mínimo = min, Promedio = promedio, Mediana = mediana,
Desv_Est = de, Asimetria = asimetria, Curtosis = curtosis,
P25 = p25, P75 = p75, Maximo = maximo )
salida
}
a <- c(3, 5, 7, 8, 9, 11, 15, 17, 21, 5, 6, 8, 1)
descriptivas(a)
descriptivas(a)$Asimetria
descriptivas(a)[3]
class(descriptivas(a)[3]); class(descriptivas(a)[[3]])
```
- Note que puedo extrar los corchetes con corchetes cuadrados, con corchetes simples sigue siendo una lista
sjt.frq(saber_2014II$JORNADA, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
t_frecs <- function(x){
sjt.frq(x, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
}
t_frecs(saber_2014II$JORNADA)
---
## Funciones (4)
- Podemos utilizar funciones para optimizar procesos, por ejemplo para los graficos con la función sjPlot
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, eval=F}
sjt.frq(saber_2014II$JORNADA, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
```
```{r, eval=F}
t_frecs <- function(x){
sjt.frq(x, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
}
t_frecs(saber_2014II$JORNADA)
```
t_frecs <- function(x){
sjt.frq(x, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
}
t_frecs2 <- function(x, texto_valor = "Valor", texto_conteo = "Frec.",
texto_porcen = "Frec. Relat.",
texto_porc_valido = "Porcentaje Valido", texto_porc_acum = "Frecueencia acumulada",
mostrar_resumen = F) {
sjt.frq(x, stringValue = texto_valor, stringCount = texto_conteo,
stringPerc = texto_porcen, stringValidPerc = texto_porc_valido,
stringCumPerc = texto_porc_acum, stringMissingValue = mostrar_resumen)
}
t_frecs2(saber_2014II$JORNADA)
---
## Funciones (5)
- La anterior función ya me saca como quiero la tabla pero no me deja modificar los nombres en caso de que quiera cambiar un parámetros.
- Lo anterior lo solución, colocando en los parámetros por defecto los títulos deseados.
```{r, eval=F}
t_frecs <- function(x){
sjt.frq(x, stringValue = "Valor",
stringCount = "Frec.",
stringPerc = "Frec. Relat.",
stringValidPerc = "Porcentaje Valido",
stringCumPerc = "Frecueencia acumulada", stringMissingValue = "Perdidos",
showSummary = F)
}
t_frecs2 <- function(x, texto_valor = "Valor", texto_conteo = "Frec.",
texto_porcen = "Frec. Relat.",
texto_porc_valido = "Porcentaje Valido", texto_porc_acum = "Frecueencia acumulada",
mostrar_resumen = F) {
sjt.frq(x, stringValue = texto_valor, stringCount = texto_conteo,
stringPerc = texto_porcen, stringValidPerc = texto_porc_valido,
stringCumPerc = texto_porc_acum, stringMissingValue = mostrar_resumen)
}
t_frecs2(saber_2014II$JORNADA)
```
---
### Actividad
- Construya una función que por defecto omita faltantes y calcule la tabla de frecuenias absolutas y relativas, a esta última dele la opción que arroje o no en porcentaje los valores.
- Personalice la tabla de perfil fila y columna.
- Construya paso a paso su propia función que arroje la misma tabla anterior.
- Construya un función que aparte de las descritpivas básicas le arroje un diagrama de caja de la variable
- Construya una función que ingresada dos fechas calcule el año.
- Construya una función que convierta en factor las variables que tienen etiquetas de las bases exportadas de SPSS
Varias de la información disponbile proviene de encuestas probabilísticas las cuales seleccionan una muestra para obtener resultados de una población más grande.
Utilizaremos la gran encuesta integrada de hogares para los principales municipios del país, leer la información de:
Descargue la encuesa: https://www.dropbox.com/s/uxdslp4sr7jkp07/AREA.zip?dl=0
Para diseños muestrales complejos, utilizar el paquete survey
setwd("/media/josezea/OS/Documents and Settings/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/Marzo_GEIH/AREA")
dir()
library(haven)
Ocupados <- read_spss("Area - Ocupados.sav")
Otros_Ingresos <- read_spss("Area- Otros ingresos.sav")
Vivienda_Hogares <- read_spss("Area - Vivienda y Hogares.sav")
library(sjPlot)
Vivienda_Hogares <- select(Vivienda_Hogares, Directorio,Secuencia_p, P4030s1a1, P4000, Area, Dpto, Fex_c_2011)
---
### Uso de factores de expansión en encuestas:
- Varias de la información disponbile proviene de encuestas probabilísticas las cuales seleccionan una muestra para obtener resultados de una población más grande.
- Utilizaremos la gran encuesta integrada de hogares para los principales municipios del país, leer la información de:
- Descargue la encuesa: <a href="https://www.dropbox.com/s/uxdslp4sr7jkp07/AREA.zip?dl=0">https://www.dropbox.com/s/uxdslp4sr7jkp07/AREA.zip?dl=0</a>
- Para diseños muestrales complejos, utilizar el paquete survey
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Documents and Settings/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/Marzo_GEIH/AREA")
library(haven)
Ocupados <- read_spss("Area - Ocupados.sav")
Otros_Ingresos <- read_spss("Area- Otros ingresos.sav")
Vivienda_Hogares <- read_spss("Area - Vivienda y Hogares.sav")
library(sjPlot)
Vivienda_Hogares <- select(Vivienda_Hogares, Directorio,Secuencia_p, P4030s1a1, P4000, Area, Dpto, Fex_c_2011)
```
```{r, eval=FALSE}
setwd("/media/josezea/OS/Documents and Settings/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/Marzo_GEIH/AREA")
dir()
library(haven)
Ocupados <- read_spss("Area - Ocupados.sav")
Otros_Ingresos <- read_spss("Area- Otros ingresos.sav")
Vivienda_Hogares <- read_spss("Area - Vivienda y Hogares.sav")
library(sjPlot)
Vivienda_Hogares <- select(Vivienda_Hogares, Directorio,Secuencia_p, P4030s1a1, P4000, Area, Dpto, Fex_c_2011)
```
- Ojetivo: estimar el ingreso promedio de los hogares en las principales cabeceras urbanas del país con la GEIH.
for(i in 1:ncol(Vivienda_Hogares)){
Encoding(attributes(Vivienda_Hogares[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Vivienda_Hogares)){
if(class(Vivienda_Hogares[[i]]) == "labelled") {
Encoding(names(attributes(Vivienda_Hogares[[i]])$labels)) <- "latin1"
}
}
#view_df(Vivienda_Hogares)
for(i in 1:ncol(Ocupados)){
Encoding(attributes(Ocupados[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Ocupados)){
if(class(Ocupados[[i]]) == "labelled") {
Encoding(names(attributes(Ocupados[[i]])$labels)) <- "latin1"
}
}
for(i in 1:ncol(Otros_Ingresos)){
Encoding(attributes(Otros_Ingresos[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Otros_Ingresos)){
if( class(Otros_Ingresos[[i]]) == "labelled") {
Encoding(names(attributes(Otros_Ingresos[[i]])$labels)) <- "latin1"
}
}
---
### Arreglo encuesta
- Se arregla el problema de codificación:
```{r, echo=T}
for(i in 1:ncol(Vivienda_Hogares)){
Encoding(attributes(Vivienda_Hogares[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Vivienda_Hogares)){
if(class(Vivienda_Hogares[[i]]) == "labelled") {
Encoding(names(attributes(Vivienda_Hogares[[i]])$labels)) <- "latin1"
}
}
#view_df(Vivienda_Hogares)
for(i in 1:ncol(Ocupados)){
Encoding(attributes(Ocupados[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Ocupados)){
if(class(Ocupados[[i]]) == "labelled") {
Encoding(names(attributes(Ocupados[[i]])$labels)) <- "latin1"
}
}
for(i in 1:ncol(Otros_Ingresos)){
Encoding(attributes(Otros_Ingresos[[i]])$label) <- "latin1"
}
for(i in 1:ncol(Otros_Ingresos)){
if( class(Otros_Ingresos[[i]]) == "labelled") {
Encoding(names(attributes(Otros_Ingresos[[i]])$labels)) <- "latin1"
}
}
```
library(dplyr)
# Se seleccionan las variables de ingreso, se puede ver el formulario en:
#http://formularios.dane.gov.co/Anda_4_1/index.php/catalog/356/data_dictionary#page=F27&tab=data-dictionary
Ing_nolab <- select(Otros_Ingresos, Directorio, Secuencia_p, Orden, P7500s3a1, P7500s2a1,
P7500s1a1, P7510s2a1, P7510s6a1, P7510s5a1, P7510s3a1, P7510s1a1, P7510s7a1,
P750s1a1, P750s2a1, P750s3a1)
Ing_nolab$ing_nolab <- rowSums(Ing_nolab[, 4:15], na.rm = T)
Ing_lab <- select(Ocupados, Directorio, Secuencia_p, Orden, Inglabo)
Ingreso <- merge(Ing_lab, Ing_nolab, all = T)
Ingreso$ingreso <- rowSums(Ingreso[, c(4, 17)], na.rm = T)
Ingreso$Directorio <- as.character(Ingreso$Directorio)
Ingreso$Secuencia_p <- as.character(Ingreso$Secuencia_p)
#Agregar a nivel de hogar
library(dplyr)
IngresoHog <- Ingreso %>% select(Directorio, Secuencia_p, Orden, ingreso) %>% group_by( Directorio, Secuencia_p) %>% summarize(ingresoXhog = sum(ingreso, na.rm = T))
IngresoHog <- merge(IngresoHog, Vivienda_Hogares)
sum(IngresoHog$Fex_c_2011)
[1] 6462419
---
## Reconstrucción del ingreso por hogar
- Se suman los ingresos no laborales (arriendos,..) de las personas
- Se combinan las bases de ingresos de ingresos no laborales con los ingresos laborales de las personas
- Se agregan los ingresos por personas
```{r, echo=T}
library(dplyr)
# Se seleccionan las variables de ingreso, se puede ver el formulario en:
#http://formularios.dane.gov.co/Anda_4_1/index.php/catalog/356/data_dictionary#page=F27&tab=data-dictionary
Ing_nolab <- select(Otros_Ingresos, Directorio, Secuencia_p, Orden, P7500s3a1, P7500s2a1,
P7500s1a1, P7510s2a1, P7510s6a1, P7510s5a1, P7510s3a1, P7510s1a1, P7510s7a1,
P750s1a1, P750s2a1, P750s3a1)
Ing_nolab$ing_nolab <- rowSums(Ing_nolab[, 4:15], na.rm = T)
Ing_lab <- select(Ocupados, Directorio, Secuencia_p, Orden, Inglabo)
Ingreso <- merge(Ing_lab, Ing_nolab, all = T)
Ingreso$ingreso <- rowSums(Ingreso[, c(4, 17)], na.rm = T)
Ingreso$Directorio <- as.character(Ingreso$Directorio)
Ingreso$Secuencia_p <- as.character(Ingreso$Secuencia_p)
#Agregar a nivel de hogar
library(dplyr)
IngresoHog <- Ingreso %>% select(Directorio, Secuencia_p, Orden, ingreso) %>% group_by( Directorio, Secuencia_p) %>% summarize(ingresoXhog = sum(ingreso, na.rm = T))
IngresoHog <- merge(IngresoHog, Vivienda_Hogares)
sum(IngresoHog$Fex_c_2011)
```
library(Hmisc)
mean(IngresoHog$ingresoXhog, na.rm = T)
wtd.mean(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.quantile(x = IngresoHog$ingresoXhog, probs = 0.5, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.var(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.quantile(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table'))
#sum(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table')))
100 * prop.table(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table')))
---
### Utilizar los factores de expansión
```{r, eval=F}
library(Hmisc)
mean(IngresoHog$ingresoXhog, na.rm = T)
wtd.mean(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.quantile(x = IngresoHog$ingresoXhog, probs = 0.5, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.var(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.quantile(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table'))
#sum(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table')))
100 * prop.table(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table')))
```
library(Hmisc)
# Suma
sum(IngresoHog$ingresoXhog * IngresoHog$Fex_c_2011, na.rm = T)
[1] 2.217694e+13
# Promedio
mean(IngresoHog$ingresoXhog, na.rm = T) #Cálculo erroneo
[1] 3260782
wtd.mean(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
[1] 3431677
#Mediana
wtd.quantile(x = IngresoHog$ingresoXhog, probs = 0.5,
weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
50%
1950000
---
### Utilizar los factores de expansión
- Se calcula promedio, mediana, la varianza, los percentiles
```{r, echo=T}
library(Hmisc)
# Suma
sum(IngresoHog$ingresoXhog * IngresoHog$Fex_c_2011, na.rm = T)
# Promedio
mean(IngresoHog$ingresoXhog, na.rm = T) #Cálculo erroneo
wtd.mean(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
#Mediana
wtd.quantile(x = IngresoHog$ingresoXhog, probs = 0.5,
weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
```
# Varianza
wtd.var(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
[1] 8.633801e+13
#Percentiles
wtd.quantile(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
0% 25% 50% 75% 100%
0 960000 1950000 3668798 500700098
#Tabla de freciencias
wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table'))
0 1 2 3 4 5
12508.28 1199144.24 2566698.83 1900558.11 510561.41 150593.23
6 9
115265.37 6169.59
100 * prop.table(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011,
type=c('table')))
0 1 2 3 4 5
0.19358165 18.55829782 39.72296222 29.41357874 7.90159381 2.33062378
6 9
1.78387966 0.09548233
---
### Utilizar los factores de expansión (2)
```{r, echo=T}
# Varianza
wtd.var(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
#Percentiles
wtd.quantile(x = IngresoHog$ingresoXhog, weights = IngresoHog$Fex_c_2011, na.rm=TRUE)
#Tabla de freciencias
wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011, type=c('table'))
100 * prop.table(wtd.table(x = IngresoHog$P4030s1a1, weights=IngresoHog$Fex_c_2011,
type=c('table')))
```
library(dplyr)
IngresoHog$Area <- as_factor(IngresoHog$Area)
cons1 <- IngresoHog %>% group_by(Area) %>% summarise( n = sum(Fex_c_2011),
prom_ing = wtd.mean(ingresoXhog, weights = Fex_c_2011, na.rm=TRUE) ) %>%
arrange(desc(prom_ing))
sum(cons1$n)
library(ENmisc)
wtd.boxplot(IngresoHog$ingresoXhog ~ substr(IngresoHog$Area, 1, 3), weights = IngresoHog$Fex_c_2011,
ylim = c(0,10000000))
library(ggplot2)
ggplot(IngresoHog, aes(ingresoXhog, weight = Fex_c_2011)) + geom_histogram() + xlim(0, 10000000)
---
### Agregaciones usando factores de expansión
```{r, eval=F}
library(dplyr)
IngresoHog$Area <- as_factor(IngresoHog$Area)
cons1 <- IngresoHog %>% group_by(Area) %>% summarise( n = sum(Fex_c_2011),
prom_ing = wtd.mean(ingresoXhog, weights = Fex_c_2011, na.rm=TRUE) ) %>%
arrange(desc(prom_ing))
sum(cons1$n)
```
- Agregue el ingreso por estrato
- Agregue el ingreso por área metropolitana y estrato
### Gráficos expandidos
```{r, eval=F}
library(ENmisc)
wtd.boxplot(IngresoHog$ingresoXhog ~ substr(IngresoHog$Area, 1, 3), weights = IngresoHog$Fex_c_2011,
ylim = c(0,10000000))
library(ggplot2)
ggplot(IngresoHog, aes(ingresoXhog, weight = Fex_c_2011)) + geom_histogram() + xlim(0, 10000000)
```
a <- c("02","05","06","02","09","11","17","20","20","20")
duplicated(a)
duplicated(a, fromLast = TRUE)
duplicated(a) | duplicated(a, fromLast = TRUE)
table(duplicated(a))
table(duplicated(a, fromLast = TRUE))
table(duplicated(a) | duplicated(a, fromLast = TRUE))
---
### Identificación de duplicados
- Antes de hacer un pegado de lbases de datos y al comienzo de cualquier análisis.
- Verificar duplicados en el identificado o en la llave primaria
<div align="right">
<img src = "duplicados.png" width = "400", height = "400"
alt = "Append" />
</div>
```{r, eval=F}
a <- c("02","05","06","02","09","11","17","20","20","20")
duplicated(a)
duplicated(a, fromLast = TRUE)
duplicated(a) | duplicated(a, fromLast = TRUE)
table(duplicated(a))
table(duplicated(a, fromLast = TRUE))
table(duplicated(a) | duplicated(a, fromLast = TRUE))
```
df = structure(list(a = c(1, 2, 3, 4, 5, 6, 7, 8), b = c(2, 4, 6, 8, 10, 12, 13, 14),
c = structure(c(1L, 2L, 2L, 3L, 4L, 4L, 5L, 5L),
.Label = c("A", "B", "C", "D", "E"), class = "factor"),
d = c(1001, 1002, 1002, 1003, 1004, 1004, 1005, 1006)),
.Names = c("a", "b", "c", "d"), row.names = c(NA, -8L), class = "data.frame")
duplic1 <- duplicated(df[ c("c","d")])
df1 <- df[!duplic1, ]
duplic2 <- duplicated(df[c("c","d")], fromLast = T )
df2 <- df[!duplic2, ]
duplic3 <- duplic1 | duplic3
df3 <- df[!duplic3, ]
#Comprobamos si hay duplicados en las pruebas saber
table(duplicated(saber_2014II$AGSB_CODINST))
FALSE
11903
---
### Identificación de duplicados (2)
```{r, eval=F}
df = structure(list(a = c(1, 2, 3, 4, 5, 6, 7, 8), b = c(2, 4, 6, 8, 10, 12, 13, 14),
c = structure(c(1L, 2L, 2L, 3L, 4L, 4L, 5L, 5L),
.Label = c("A", "B", "C", "D", "E"), class = "factor"),
d = c(1001, 1002, 1002, 1003, 1004, 1004, 1005, 1006)),
.Names = c("a", "b", "c", "d"), row.names = c(NA, -8L), class = "data.frame")
duplic1 <- duplicated(df[ c("c","d")])
df1 <- df[!duplic1, ]
duplic2 <- duplicated(df[c("c","d")], fromLast = T )
df2 <- df[!duplic2, ]
duplic3 <- duplic1 | duplic3
df3 <- df[!duplic3, ]
```
- Descargar estas dos tablas:
- <a href="https://www.dropbox.com/s/5odvss7s6iz3voq/saber2014II.sav?dl=0">https://www.dropbox.com/s/5odvss7s6iz3voq/saber2014II.sav?dl=0</a>
```{r, echo=FALSE, results='hide'}
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
library(haven)
library(sjPlot)
saber_2014II <- read_spss("saber2014II.sav")
```
```{r, echo=T}
#Comprobamos si hay duplicados en las pruebas saber
table(duplicated(saber_2014II$AGSB_CODINST))
```
#Extraer bcd
substr("abcdef", 2, 4)
# Reemplazar la segunda letra por #
x = c("may", "the", "force", "be", "with", "dyou")
substr(x, 2, 2) <- "#"
x
# Extraer cada letra
substring("ABCDEF", 1:6, 1:6)
substring("ABCDEF", c(1,4), c(2,6))
# Pegar cada componente del vector (sin separacion)
paste(1:3, c("!", "?", "+"), sep = "")
# Lo mismo pero colapsando todo e
paste(1:3, c("!", "?", "+"), sep = "", collapse = "")
paste(1:3, c("!", "?", "+"), sep = "", collapse = "#")
paste(1:3, c("!", "?", "+"), sep = " ", collapse = "")
datos <- data.frame(id = 1:20, nomloc = c("Antonio Nariño", "Barrios Unidos",
"Bosa", "Candelaria", "Chapinero", "Ciudad Bolivar","Engativa", "Fontibón",
"Kennedy", "Los Mártires" , "Puente Aranda", "Rafael Uribe", "San Cristobal", "Santa Fe",
"Suba", "Sumapaz", "Teusaquillo", "Tunjuelito", "Usaaquén", "Usme"),
stringsAsFactors = F)
datos$id <- ifelse (nchar(datos$id) == 1, paste0("0", datos$id), datos$id)
---
### Manejo de caracteres (substr y paste)
```{r, eval=F}
#Extraer bcd
substr("abcdef", 2, 4)
# Reemplazar la segunda letra por #
x = c("may", "the", "force", "be", "with", "dyou")
substr(x, 2, 2) <- "#"
x
# Extraer cada letra
substring("ABCDEF", 1:6, 1:6)
substring("ABCDEF", c(1,4), c(2,6))
# Pegar cada componente del vector (sin separacion)
paste(1:3, c("!", "?", "+"), sep = "")
# Lo mismo pero colapsando todo e
paste(1:3, c("!", "?", "+"), sep = "", collapse = "")
paste(1:3, c("!", "?", "+"), sep = "", collapse = "#")
paste(1:3, c("!", "?", "+"), sep = " ", collapse = "")
```
```{r, echo=TRUE}
datos <- data.frame(id = 1:20, nomloc = c("Antonio Nariño", "Barrios Unidos",
"Bosa", "Candelaria", "Chapinero", "Ciudad Bolivar","Engativa", "Fontibón",
"Kennedy", "Los Mártires" , "Puente Aranda", "Rafael Uribe", "San Cristobal", "Santa Fe",
"Suba", "Sumapaz", "Teusaquillo", "Tunjuelito", "Usaaquén", "Usme"),
stringsAsFactors = F)
datos$id <- ifelse (nchar(datos$id) == 1, paste0("0", datos$id), datos$id)
```
# Importar de un csv (Enfoque malo)
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
dat <- read.csv("saber2014II.csv", sep = ";", dec=",")
# head(dat)
# Importar de un csv (Enfoque correcto)
clases <- c(rep("character", 8), rep("numeric", 8), rep("NULL", 7), "character")
datos <- read.csv("saber2014II.csv", sep = ";", dec=",", colClasses = clases)
---
### Como evitar el problema anterior
- Especificar las columnas que son de tipo caracter, decargue
- <a href="https://www.dropbox.com/s/8dxwzgjrd23j3op/saber2014II.csv?dl=0
">https://www.dropbox.com/s/8dxwzgjrd23j3op/saber2014II.csv?dl=0
</a>
```{r, echo=TRUE}
# Importar de un csv (Enfoque malo)
setwd("/media/josezea/OS/Users/josezea/Documents/Laboral 2015/curso DANE 2015/Bases de datos/saber2014")
dat <- read.csv("saber2014II.csv", sep = ";", dec=",")
# head(dat)
# Importar de un csv (Enfoque correcto)
clases <- c(rep("character", 8), rep("numeric", 8), rep("NULL", 7), "character")
datos <- read.csv("saber2014II.csv", sep = ";", dec=",", colClasses = clases)
```
# ¿Cuantos caracterés?
nchar(c("How", "many", "characters?"))
# Cuantos elementos del vector
length("How many characters?")
# Reemplzar un caracter por otro
gsub("a", "AAA", "This is a boring string")
a <- c("Bogotá ", "Cali ", "Medellín ")
gsub(" ", "", a)
# Minúsculas a mayusculas
tolower(c("aLL ChaRacterS in LoweR caSe", "ABCDE"))
casefold("aLL ChaRacterS in LoweR caSe")
# Mayusculas a minúsculas
toupper(c("All ChaRacterS in Upper Case", "abcde"))
#casefold("All ChaRacterS in Upper Case", upper = TRUE)
---
### Manejo de caracteres (segunda parte)
- Contar el númer de caracteres, reemplazar y cambiar de mayúsculas a minúsculas
```{r, echo=T, results='hide'}
# ¿Cuantos caracterés?
nchar(c("How", "many", "characters?"))
# Cuantos elementos del vector
length("How many characters?")
# Reemplzar un caracter por otro
gsub("a", "AAA", "This is a boring string")
a <- c("Bogotá ", "Cali ", "Medellín ")
gsub(" ", "", a)
# Minúsculas a mayusculas
tolower(c("aLL ChaRacterS in LoweR caSe", "ABCDE"))
casefold("aLL ChaRacterS in LoweR caSe")
# Mayusculas a minúsculas
toupper(c("All ChaRacterS in Upper Case", "abcde"))
#casefold("All ChaRacterS in Upper Case", upper = TRUE)
```
states = rownames(USArrests)
# Los que empiezan en 'w'
grep(pattern = "w", x = states, value = TRUE)
# Los que empiezan en 'w' o 'W'
grep(pattern = "[wW]", x = states, value = TRUE)
grep(pattern = "w", x = states, value = TRUE, ignore.case = TRUE)
# get states names with 'W'
grep(pattern = "W", x = toupper(states), value = TRUE)
#Que contenga la palabra pop
grep("^pop",names(LifeCycleSavings), value = TRUE)
#Que no contenga la palabra pop
grep("^pop",names(LifeCycleSavings), value = TRUE, invert = T)
# Filtrar columnas
filtro <- grep("^pop",names(LifeCycleSavings), value = TRUE)
datos <- LifeCycleSavings[, filtro]
---
### Patrones de textos
```{r, results = 'hide'}
states = rownames(USArrests)
# Los que empiezan en 'w'
grep(pattern = "w", x = states, value = TRUE)
# Los que empiezan en 'w' o 'W'
grep(pattern = "[wW]", x = states, value = TRUE)
grep(pattern = "w", x = states, value = TRUE, ignore.case = TRUE)
# get states names with 'W'
grep(pattern = "W", x = toupper(states), value = TRUE)
#Que contenga la palabra pop
grep("^pop",names(LifeCycleSavings), value = TRUE)
#Que no contenga la palabra pop
grep("^pop",names(LifeCycleSavings), value = TRUE, invert = T)
# Filtrar columnas
filtro <- grep("^pop",names(LifeCycleSavings), value = TRUE)
datos <- LifeCycleSavings[, filtro]
```
library(stringr)
some_text = c("one", "two", "three", NA, "five")
# Número de caracteres
nchar(some_text)
str_length(some_text)
# Para factores
some_factor = factor(c(1, 1, 1, 2, 2, 2), labels = c("good", "bad"))
some_factor
#No funciona
#nchar(some_factor)
lorem = "Lorem Ipsum"
# Función extraer
str_sub(lorem, start = 1, end = 5)
substring(lorem, first = 1, last = 5)
resto = c("brasserie", "bistrot", "creperie", "bouchon")
# Extraer desde el final
str_sub(resto, start = -4, end = -1)
# Duplicar una palabra
str_dup("adios", 2)
---
### El paquete string
```{r, results = 'hide'}
library(stringr)
some_text = c("one", "two", "three", NA, "five")
# Número de caracteres
nchar(some_text)
str_length(some_text)
# Para factores
some_factor = factor(c(1, 1, 1, 2, 2, 2), labels = c("good", "bad"))
some_factor
#No funciona
#nchar(some_factor)
lorem = "Lorem Ipsum"
# Función extraer
str_sub(lorem, start = 1, end = 5)
substring(lorem, first = 1, last = 5)
resto = c("brasserie", "bistrot", "creperie", "bouchon")
# Extraer desde el final
str_sub(resto, start = -4, end = -1)
# Duplicar una palabra
str_dup("adios", 2)
```
# Por defecto deja los espacios a la izquierda
str_pad("hola", width = 7)
#Se puede hacer que deje los espacos a las derechas
str_pad("hola", width = 7, side = "right")
#Deja los espacios a ambos lados
str_pad("adios", width = 7, side = "both")
# left padding with '#'
str_pad("hashtag", width = 8, pad = "#")
# pad both sides with '-'
str_pad("hashtag", width = 9, side = "both", pad = "-")
# Texto con espacios
bad_text = c("This", " example ", "has several ", " whitespaces ")
# Quita espacios en blanco a la izquiera
str_trim(bad_text, side = "left")
# Quita espacios en blanco a la derecha
str_trim(bad_text, side = "right")
# Quita espacios a ambos lados
str_trim(bad_text, side = "both")
---
### El paquete string (2)
```{r, results = 'hide'}
# Por defecto deja los espacios a la izquierda
str_pad("hola", width = 7)
#Se puede hacer que deje los espacos a las derechas
str_pad("hola", width = 7, side = "right")
#Deja los espacios a ambos lados
str_pad("adios", width = 7, side = "both")
# left padding with '#'
str_pad("hashtag", width = 8, pad = "#")
# pad both sides with '-'
str_pad("hashtag", width = 9, side = "both", pad = "-")
# Texto con espacios
bad_text = c("This", " example ", "has several ", " whitespaces ")
# Quita espacios en blanco a la izquiera
str_trim(bad_text, side = "left")
# Quita espacios en blanco a la derecha
str_trim(bad_text, side = "right")
# Quita espacios a ambos lados
str_trim(bad_text, side = "both")
```
change = c("Be the change", "you want to be")
# Extrae la segunda palabra
word(change, 2)
# Extrae la última palabra
word(change, -1)
Más información:
Handling and processing string: http://gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf
Data manipulation with R.
---
### El paquete string (3)
```{r, results = 'hide'}
change = c("Be the change", "you want to be")
# Extrae la segunda palabra
word(change, 2)
# Extrae la última palabra
word(change, -1)
```
Más información:
- Handling and processing string: <a href="http://gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf">http://gastonsanchez.com/Handling_and_Processing_Strings_in_R.pdf</a>
- Data manipulation with R.
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |