Requisitos

Los siguientes paquetes son necesarios para hacer limpieza y manipulación de los datos, lo que a su vez permite hacer graficos de estos.

library(tidyr)
## Warning: package 'tidyr' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3

Importación de Datos

Se debe fijar el directorio en el cual se encuentre el archivo con los datos que deseamos importar a R. Esto se puede realizar de la siguiente manera:

setwd("C:/Users/57322/OneDrive - Universidad de los Andes/4. Cuarto Semestre/Taller en R Estadística y Programación/Talleres/Taller 3")

Una vez fijado el directorio, podremos importar la base de datos. Para esto se debe usar la función de Data Input que corresponda al tipo de datos que se quieran importar. En este caso, la función es “read.csv”, pues el archivo es de tipo csv. Se debe nombrar esta base de datos como un objeto en R para poder efectuar procesos sobre él con facilidad. En este caso, el objeto lo llamamos “Geih”:

Geih <- read.csv("geih_hogares_enero_2023.csv")

Exploración del tamaño del hogar

En este apartado se hacen algunas preguntas para determinar el grado de representación de la encuesta, y qué puede inferirse del tamaño del hogar en Colombia con base en esta.

1. ¿Cuántos hogares se encuestaron para el mes de Enero de la encuesta?

Para responder a esto, se puede usar una tabla de frecuencias, sobre la cantidad de veces en que se cumple queen la base de datos el MES es igual a 1. Esto se puede hace con la función “table”

table(Geih$MES)
## 
##     1 
## 24703

2. ¿Cuántos hogares hay en Colombia para el mes de Enero de la encuesta?

Debe notarse que esta es una pregunta sobre la población, no sobre la muestra. Por tanto, para contestar se debe considerar el factor de expansión de la encuesta, esto es el peso representativo de cada observación. En la base de datos, esto se encuentra bajo la columna “FEX_C18”. Considerando esto, para calcular el total de hogares en Colombia de la encuesta, simplemente se deben sumar todos los valores representativos de cada observación, esto se puede hacer con la función “sum”, de la siguiente manera:

sum(Geih$FEX_C18)
## [1] 17228767

3. ¿Cuántos hogares hay en Colombia por estrato de la encuesta?

Para esta pregunta se debe crear un data frame que resuma la cantidad de datos respecto a una categoría estrato (P4030S1A1). Para esto, primero se debe usar la función “group_by”, que permite hacer operaciones sobre la variable categórica de estrato. A esto se le debe sumar también la función “summarize” que permite sumar la cantidad de hogares según el factor de expansión.

Geih %>%
group_by(P4030S1A1) %>%
summarize(sum(FEX_C18))
## # A tibble: 9 × 2
##   P4030S1A1 `sum(FEX_C18)`
##       <int>          <dbl>
## 1         0        343817.
## 2         1       5950523.
## 3         2       5896031.
## 4         3       3107719.
## 5         4       1046083.
## 6         5        472158.
## 7         6        163709.
## 8         9        127508.
## 9        NA        121218.

4. ¿Cuál es el tamaño promedio del hogar colombiano por estrato?

De manera análoga a la anterior, se debe agrupar y resumir los datos. Ahora no para un total, sino para una media ponderada. Para esto, se usa la función “weighted.mean” sobre la variable de total de personas en el hogar (P6008).

Geih %>%
    group_by(P4030S1A1) %>%
    summarize(weighted.mean(P6008))
## # A tibble: 9 × 2
##   P4030S1A1 `weighted.mean(P6008)`
##       <int>                  <dbl>
## 1         0                   3.54
## 2         1                   3.23
## 3         2                   2.94
## 4         3                   2.68
## 5         4                   2.54
## 6         5                   2.49
## 7         6                   2.31
## 8         9                   3.31
## 9        NA                   3.66

Exploración del gasto en arriendo

Para este apartado no se considera el factor de expansión de la encuesta (FEX_C18). Pues nos interesa conocer datos sobre la población encuestada respecto a su gasto en el arriendo.

1. Crear una variable reuniendo los datos de las variables P5130 y P5140 y llámela “arriendo”

Las variables P5130 y P5140 son variables que agrupan el costo potencial y efectivo del arriendo, respectivamente. Dicho de otra manera, de los hogares de la encuesta puede que hayan con vivienda propia o que vivan en arriendo. Para el primer caso (P5130), no se puede preguntar por el costo del arriendo, pues no existe tal pago. Sin embargo, se le pueden pedir estimaciones sobre cuánto sería el costo de arriendo de tener que pagarlo. En el segundo caso (P5140) es más fácil, pues ese sí es un pago efectivo y puntual. Por tanto, la nueva variable “arriendo” agrupa esta información. Nótese que dada la descripción de las variables, estas son mutuamente excluyentes, por tanto se debe usar una función condicional para unirlas. Con “ifelse” se establece una condición: “si la variable P5130 es faltante. En la que, de cumplirse, la variable”arriendo” toma el valor de la variable P5140. De no ser P5130 un valor faltante, la nueva variable “arriendo” toma esta en lugar de P5140.

Geih$arriendo <- ifelse(is.na(Geih$P5130), Geih$P5140, Geih$P5130)

2. Genere un histograma de la variable arriendo en el mes de enero.

Para generar este histograma se debe usar la función ggplot. En esta se debe especificar como primer argumento el data frame que contiene los datos con los que se hará el gráfico. Como segundo argumento, se deben especificar los ejes del gráfico (aes); en este caso, al ser un histograma, sólo se especifica una variable (arriendo) como el eje x. Finalmente para que el gráfico sea de tipo histograma, se usa el pipe “+” que caracteriza la función ggplot, y se añade “geom_histrogram()”, pues corresponde a este tipo de gráfico.

ggplot(Geih, aes(x = arriendo)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3. ¿Hay valores extremos?

Para esto nos apoyamos en el histograma generado, en el cual es visible que la mayoría de datos están acumulados al inicio. Sin embargo, también es visible que hay valores extremos cercanos a 6e+08, que es el límite de la gráfica.

4. ¿Hay algún filtro que pueda aplicar al gráfico para mejorar la visualización?

Para filtrar los datos primero debe saberse hasta qué punto. Por tanto, se usa la función “quantile” para ver qué números están asociados a qué percentiles de la distribución de la variable arriendo.

quantile(Geih$arriendo, probs = c(0.25, 0.50, 0.75, 0.9, 0.99))
##     25%     50%     75%     90%     99% 
##  300000  450000  600000 1000000 2800000
Geih$perc99 <- quantile(Geih$arriendo, probs = c(0.99))

En este caso, se puede determinar que hasta el percentil 99 no hay valores extremos, pues en este hay un valor asociado de 2800000. Por tanto, asignamos este percentil como el máximo para filtrar los datos, y que no considere valores extremos. Ahora, con la variable perc99 (que agrupa los valores extremos, aquellos encima del percentil 99), se usa la función ggplot usando los datos del data frame base, pero filtrando los datos, para aquellos menores al percentil 99. Se especifica el mismo argumento “arriendo” como el eje x del histograma.

ggplot(Geih[Geih$arriendo < Geih$perc99,], aes(x = arriendo)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

5. ¿Qué preguntas le surgen con la revisión de los gráficos generados?

De lo observado en el grafico de la distribución de la variable arriendo, surgen algunas preguntas como: (1) Dadala necesidad de filtrar los datos, ¿qué tan independientes son las variables de la encuesta?; (2) ¿Qué tan representativa es la distribución de los datos respecto a la realidad poblacional?; y (3) ¿Qué porcentaje de los valores extremos (sobre el percentil 99) son de hogares con vivienda propia y qué porcentaje de hogares en arriendo?

Exploracion del valor de arriendo percápita

1. Genere la variable arr_pc y genere estadísticas descriptivas de esa variable.

En este caso, para crear una variable percápita, se divide la variable de interés (en este caso arriendo), sobre el total de personas en el hogar. Y para crear estadísticas descriptivas se usa la función “summary” sobre esa nueva variable percápita.

Geih$arr_pc = (Geih$arriendo) / (Geih$P6008)
summary(Geih$arr_pc)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
##         6     90000    162500    323233    300000 300000000

2. Genere histogramas para explorar la distribución de esta variable.

Para generar el histograma se usa la función ggplot, como se explicó anteriormente. En este caso la variable de interés será arr_pc.

ggplot(Geih, aes(x = arr_pc)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Nuevamente pueden verse valores extremos, y dado esto se filtran los datos usando la misma metodologíade antes: ver la distribución de los datos, crear una variable asociada a un percentil que agrupe a la mayoría de datos debajo (en este caso también es el percentil 99), y filtrar esa mayoría de datos en el histograma,

quantile(Geih$arr_pc, probs = c(0.25, 0.50, 0.75, 0.9, 0.99))
##     25%     50%     75%     90%     99% 
##   90000  162500  300000  500000 1500000
perc99 <- quantile(Geih$arr_pc, probs = c(0.99))

ggplot(Geih[Geih$arr_pc < perc99,], aes(x = arr_pc)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3. Muestre la distribución de la variable arr_pc por estrato

Para mostrar la distribución de una variable para diferentes categorías se deben usar múltiples histogramas, uno para cada categoría. Para crear el histograma se hace lo mismo que se ha realizado anteriormente: filtrar los datos para excluir valores extremos, fijar la variable de interés (arr_pc) como el eje x, y crear histogramas (con geom_histogram). Pero adicional a esto, se usa “facet_wrap(~ P4030S1A1)” para hacer los diferentes histogramas, cada uno asociado a un valor de la variable de estrato (P4030S1A1). El argumento de “scales = ‘free_y’” permite que cada histograma tenga una escala independiente en el eje y, lo que mejora sustancialmente la visualización de datos. Finalmente, la función “labs” es para añadir etiquetas a los ejes de cada histograma y título a la figura en general.

ggplot(Geih[Geih$arr_pc < perc99, ], aes(x = arr_pc)) +
  geom_histogram() +
  facet_wrap(~ P4030S1A1, scales = 'free_y') +
  labs(title = 'Histograma de arriendo per cápita por Estrato',
       x = 'arriendo per cápita',
       y = 'Count')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4. Calcule el valor promedio del arriendo percápita por estrato para el mes de enero.

Para calcular este promedio se deben considerar valores extremos y no incluirlos. Para diferenciar el grupo de todos los datos del grupo de aquellos que no consideran los atípicos, se define la nueva variable “arr_pc_perc_99”, que filtra los datos con la función condicional “ifelse”.

Geih$arr_pc_perc_99 = ifelse(Geih$arr_pc < perc99, Geih$arr_pc, NA)

Ahora, con los grupos de datos diferenciados, para hallar el promedio de cada uno se debe agrupar según la variable de interés, en este caso el estrato (P4030S1A1)

Geih %>%
  group_by(P4030S1A1) %>%
  summarize(mean(arr_pc, na.rm = T), mean(arr_pc_perc_99, na.rm = T))
## # A tibble: 9 × 3
##   P4030S1A1 `mean(arr_pc, na.rm = T)` `mean(arr_pc_perc_99, na.rm = T)`
##       <int>                     <dbl>                             <dbl>
## 1         0                   183542.                            78135.
## 2         1                   185875.                           131318.
## 3         2                   283609.                           205948.
## 4         3                   422309.                           326177.
## 5         4                   653048.                           459327.
## 6         5                  1112356.                           614969.
## 7         6                  1306036.                           735289.
## 8         9                    78442.                            78442.
## 9        NA                    66948.                            66948.

5. Reemplazar la variable arriendo percápita asignando el percentil 99 a hogares sobre éste.

Para esto se usa la función condicional “ifelse”, poniendo como condición que si el valor de la variable arr_pc es superior al percentil 99, se sustituya este valor por el extremo de este percentil, de no cumplirse esa condición, se deja el valor tal cual.

Geih$arr_pc = ifelse(Geih$arr_pc > perc99, perc99, Geih$arr_pc)

6. Mostrar un gráfico de barras el promedio de arriendo percápita por cada estrato

Lo primero que debe hacerse es filtrar el data frame para sólo incluir valores de estrato entre 1 y 6. Para esto se usa la función filter y se plantean la condición sobre la variable estrato (P4030S1A1): estar entre 1 y 6.

Geih_btw_1_6 <- filter(Geih, P4030S1A1 >= 1 & P4030S1A1 <= 6)

Ahora se debe crear un nuevo objeto, partiendo del data frame filtrado. En este se agrupa los datos por estrato (con la función “group_by) para calcular la media de cada categoría (mediante la función”summarise” y “mean”).El resultado de esta operación se guarda en una nueva variable “promedio_arr_pc”

arriendo_pc_promedio <- Geih_btw_1_6 %>%
                        group_by(P4030S1A1) %>%
                        summarise(promedio_arr_pc = mean(arr_pc, na.rm = TRUE))

Ahora con el objeto “arriendo_pc_promedio” se podrá hacer el gráfico de barras. Esto se hace usando la función ggplot, en la que se toma este objeto como la base para graficar. Los ejes que se usan son: estrato como eje x, y promedio de arriendo percápita como eje y. Se usa “geom_bar” para especificar que se quiere hacer un grafico de barras con esa información, y se pone el argumento “stat =”identity” para no alterar los valores del eje y en el gráfico. Finalmente se titula el gráfico y los ejes, respectivamente.

ggplot(arriendo_pc_promedio, aes(x = as.factor(P4030S1A1), y = promedio_arr_pc)) +
  geom_bar(stat = "identity") +
  labs(title = 'Arriendo percápita promedio por estrato',
       x = 'Estrato',
       y = 'Arriendo percápita promedio')

Este gráfico permite evidenciar una correlación directa entre el promedio de arriendo percápita y el estrato: a un mayor estrato, el promedio de arriendo percápita es mayor.