En este paso, debes seleccionar una muestra aleatoria de hogares utilizando el marco muestral y generar una muestra de tamaño 10 (en tu caso, n = 10).
# Borrar objetos y cerrar gráficos abiertos
#rm(list = ls()) # Elimina todos los objetos en el espacio de trabajo.
#graphics.off() # Cierra todas las ventanas gráficas.
# Cargar las librerías necesarias
library(pacman)
p_load(tidyverse, janitor, readxl, writexl, survey, srvyr)
# Cargar el marco muestral
marco <- read_excel("C:/Users/john/Desktop/Practica DS/Universidad del Bosque/Projects/EjerMuest/data/Ejemplo Hogares - Marco Muestral.xls")
muestra_data <- read_excel("C:/Users/john/Desktop/Practica DS/Universidad del Bosque/Projects/EjerMuest/output/Muestra Seleccionada.xlsx")
encuestas <- read_excel("C:/Users/john/Desktop/Practica DS/Universidad del Bosque/Projects/EjerMuest/data/Dominio Hogares.xls", sheet = "Hoja1")
# Definir el tamaño de la muestra
n <- 10
# Establecer la semilla para la generación de números aleatorios
set.seed(22-11-2024) # Semilla ajustada
# Ordenar el marco muestral aleatoriamente
marco_ord <- marco |>
mutate(aleatorio = runif(nrow(marco))) |> # No usar 'n ='
arrange(aleatorio)
# Seleccionar las primeras 10 filas para la muestra
muestra <- marco_ord |>
slice(1:n)
# Verificar si la carpeta 'output' existe, y si no, crearla
#if (!dir.exists("output")) {
# dir.create("output")
#}
# Guardar la muestra en un archivo Excel
write_xlsx(muestra, "C:/Users/john/Desktop/Practica DS/Universidad del Bosque/Projects/EjerMuest/output/Muestra Seleccionada.xlsx")
Este punto se debe hacer directamente en Excel. Usando la información de las encuestas, debes crear un cuadro con las estimaciones solicitadas. Los datos que necesitarás para estimar estos valores estarán disponibles en el paso 5, cuando subas los datos a R.
head(muestra)
# A tibble: 6 × 4
Hogar Dirección Telefono aleatorio
<dbl> <chr> <dbl> <dbl>
1 11 CRA 6 N 10 - 85 8372199 0.0397
2 10 CRA 6 N 6 - 02 8372696 0.126
3 21 CR 46 49-12 2483960 0.134
4 34 CRA 46B 49B-21 3002103665 0.149
5 12 CR 6 9-13 8370727 0.191
6 27 CL 57 N 46-42 2983461 0.243
Este paso consiste en asignar los códigos de hogares seleccionados en la muestra al archivo de encuestas. Esto se hará en el siguiente bloque de código cuando leas los archivos y los cruces.
# Cargar los datos desde Excel
glimpse(muestra)
Rows: 10
Columns: 4
$ Hogar <dbl> 11, 10, 21, 34, 12, 27, 26, 3, 16, 7
$ Dirección <chr> "CRA 6 N 10 - 85", "CRA 6 N 6 - 02", "CR 46 49-12", "CRA 46B…
$ Telefono <dbl> 8372199, 8372696, 2483960, 3002103665, 8370727, 2983461, 298…
$ aleatorio <dbl> 0.0396923, 0.1258008, 0.1335689, 0.1493850, 0.1911764, 0.242…
glimpse(encuestas)
Rows: 10
Columns: 8
$ Hogar <dbl> 13, 3, 10, 33, 24, 26, 27, 1, 35, 16
$ P1 <dbl> 2, 1, 3, 1, 3, 2, 2, 3, 3, 3
$ P2 <dbl> 224, 112, 227, 166, 134, 109, 154, 190, 33, 244
$ P3 <dbl> 68, 42, 154, 143, 149, 224, 126, 161, 4, 81
$ P4 <dbl> 187, 126, 78, 205, 162, 138, 50, 158, 10, 153
$ P5 <dbl> 36, 78, 155, 67, 231, 31, 115, 172, 232, 126
$ P6 <dbl> 64, 207, 169, 18, 44, 73, 43, 83, 97, 175
$ P7 <dbl> 36, 63, 57, 181, 72, 65, 242, 32, 23, 61
Ya estan subidos.
# Ver una vista rápida de la estructura de los datos
glimpse(marco)
Rows: 35
Columns: 3
$ Hogar <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1…
$ Dirección <chr> "CRA 9 N 7 - 64", "CLL 8 CON CRA 7", "CL 8 N 12-36", "CRA 15…
$ Telefono <dbl> 2463046, 2460639, 2462149, 2462141, 2462121, 8373548, 827344…
glimpse(muestra)
Rows: 10
Columns: 4
$ Hogar <dbl> 11, 10, 21, 34, 12, 27, 26, 3, 16, 7
$ Dirección <chr> "CRA 6 N 10 - 85", "CRA 6 N 6 - 02", "CR 46 49-12", "CRA 46B…
$ Telefono <dbl> 8372199, 8372696, 2483960, 3002103665, 8370727, 2983461, 298…
$ aleatorio <dbl> 0.0396923, 0.1258008, 0.1335689, 0.1493850, 0.1911764, 0.242…
glimpse(encuestas)
Rows: 10
Columns: 8
$ Hogar <dbl> 13, 3, 10, 33, 24, 26, 27, 1, 35, 16
$ P1 <dbl> 2, 1, 3, 1, 3, 2, 2, 3, 3, 3
$ P2 <dbl> 224, 112, 227, 166, 134, 109, 154, 190, 33, 244
$ P3 <dbl> 68, 42, 154, 143, 149, 224, 126, 161, 4, 81
$ P4 <dbl> 187, 126, 78, 205, 162, 138, 50, 158, 10, 153
$ P5 <dbl> 36, 78, 155, 67, 231, 31, 115, 172, 232, 126
$ P6 <dbl> 64, 207, 169, 18, 44, 73, 43, 83, 97, 175
$ P7 <dbl> 36, 63, 57, 181, 72, 65, 242, 32, 23, 61
Ahora realizamos un cruce de los datos de las encuestas con la muestra seleccionada y calculamos los pesos muestrales.
# Cruce de encuestas con la muestra
anti_join(muestra, encuestas, by = "Hogar") # Hogares en la muestra que no están en las encuestas
# A tibble: 5 × 4
Hogar Dirección Telefono aleatorio
<dbl> <chr> <dbl> <dbl>
1 11 CRA 6 N 10 - 85 8372199 0.0397
2 21 CR 46 49-12 2483960 0.134
3 34 CRA 46B 49B-21 3002103665 0.149
4 12 CR 6 9-13 8370727 0.191
5 7 CLL 9 11 6 0 8273445 0.285
anti_join(encuestas, muestra, by = "Hogar") # Hogares en las encuestas que no están en la muestra
# A tibble: 5 × 8
Hogar P1 P2 P3 P4 P5 P6 P7
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 13 2 224 68 187 36 64 36
2 33 1 166 143 205 67 18 181
3 24 3 134 149 162 231 44 72
4 1 3 190 161 158 172 83 32
5 35 3 33 4 10 232 97 23
# Definir el tamaño total de la población (N) y el tamaño de la muestra (n)
N <- nrow(marco)
n <- nrow(muestra)
# Crear un vector con las columnas de las variables de gasto
variables <- paste0("P", 2:7)
# Cruce de los datos de encuestas con la muestra
encu <- encuestas |>
left_join(muestra, by = "Hogar") |> # Cruza encuestas con muestra por la columna Hogar
rowwise() |>
mutate(gasto_tot = sum(c(P2, P3, P4, P5, P6, P7))) |> # Suma de los gastos
mutate(FEXP = N/n) |> # Calcula el factor de expansión
mutate(NI = N) |> # Añade el tamaño total de la población
mutate(P1 = factor(P1, levels = 1:3, labels = c("< 2SMMLV", "De 2 a 4 SMMLV", ">4 SMMLV"))) # Etiqueta los niveles de ingreso
# Ver la clase de la variable 'encu'
#class(encu)
#glimpse(encu)
library(knitr)
# Asegúrate de que 'encu' es un data frame
df_encu <- as.data.frame(encu)
tb_encu <- as.tibble(encu)
# Crear la tabla con kable
kable(df_encu)
Hogar | P1 | P2 | P3 | P4 | P5 | P6 | P7 | Dirección | Telefono | aleatorio | gasto_tot | FEXP | NI |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
13 | De 2 a 4 SMMLV | 224 | 68 | 187 | 36 | 64 | 36 | NA | NA | NA | 615 | 3.5 | 35 |
3 | < 2SMMLV | 112 | 42 | 126 | 78 | 207 | 63 | CL 8 N 12-36 | 2462149 | 0.2786355 | 628 | 3.5 | 35 |
10 | >4 SMMLV | 227 | 154 | 78 | 155 | 169 | 57 | CRA 6 N 6 - 02 | 8372696 | 0.1258008 | 840 | 3.5 | 35 |
33 | < 2SMMLV | 166 | 143 | 205 | 67 | 18 | 181 | NA | NA | NA | 780 | 3.5 | 35 |
24 | >4 SMMLV | 134 | 149 | 162 | 231 | 44 | 72 | NA | NA | NA | 792 | 3.5 | 35 |
26 | De 2 a 4 SMMLV | 109 | 224 | 138 | 31 | 73 | 65 | CR 30 57-22 | 2983228 | 0.2689066 | 640 | 3.5 | 35 |
27 | De 2 a 4 SMMLV | 154 | 126 | 50 | 115 | 43 | 242 | CL 57 N 46-42 | 2983461 | 0.2425466 | 730 | 3.5 | 35 |
1 | >4 SMMLV | 190 | 161 | 158 | 172 | 83 | 32 | NA | NA | NA | 796 | 3.5 | 35 |
35 | >4 SMMLV | 33 | 4 | 10 | 232 | 97 | 23 | NA | NA | NA | 399 | 3.5 | 35 |
16 | >4 SMMLV | 244 | 81 | 153 | 126 | 175 | 61 | CLL 10 N 5 - 62 | 2462121 | 0.2817241 | 840 | 3.5 | 35 |
Finalmente, se estima el cuadro de salida, utilizando el diseño muestral. El diseño de encuesta permite calcular estimaciones considerando la estructura muestral, como los pesos y el factor de expansión.
library(survey)
library(knitr)
# Definir el objeto de diseño muestral
dsg <- encu |>
as_survey_design(ids = 1, # Sin conglomerados, ya que 'ids' es 1
fpc = NI, # Utiliza la columna 'NI' como factor de población
weights = FEXP, # Utiliza la columna 'FEXP' como pesos muestrales
nest = T) # Definir si el diseño es anidado
# Estimar los totales de los gastos por cada categoría (según 'P1' que representa niveles de ingreso)
total <- dsg |>
group_by(P1) |>
summarise(vivienda = survey_total(P2, na.rm = T, vartype = "cv"),
alimentacion = survey_total(P3, na.rm = T, vartype = "cv"),
educacion = survey_total(P4, na.rm = T, vartype = "cv"),
transporte = survey_total(P5, na.rm = T, vartype = "cv"),
esparcimiento = survey_total(P6, na.rm = T, vartype = "cv"),
otros = survey_total(P7, na.rm = T, vartype = "cv"),
total_gasto = survey_total(gasto_tot, na.rm = T, vartype = "cv")
)
# Estimar los totales para todos los hogares (sin agrupar por 'P1')
t1 <- dsg |>
summarise(vivienda = survey_total(P2, na.rm = T, vartype = "cv"),
alimentacion = survey_total(P3, na.rm = T, vartype = "cv"),
educacion = survey_total(P4, na.rm = T, vartype = "cv"),
transporte = survey_total(P5, na.rm = T, vartype = "cv"),
esparcimiento = survey_total(P6, na.rm = T, vartype = "cv"),
otros = survey_total(P7, na.rm = T, vartype = "cv"),
total_gasto = survey_total(gasto_tot, na.rm = T, vartype = "cv")
) |>
mutate(P1 = "Total")
# Combinar los resultados en un solo dataframe y reorganizar las columnas
salida <- bind_rows(total, t1) |>
pivot_longer(cols = - P1, names_to = "gasto", values_to = "estimacion") |>
pivot_wider(names_from = P1, values_from = estimacion)
# Puedes guardar los resultados en un archivo Excel si lo deseas
write_xlsx(salida, "C:/Users/john/Desktop/Practica DS/Universidad del Bosque/Projects/EjerMuest/output/cuadro_estimacion.xlsx")
kable(total)
P1 | vivienda | vivienda_cv | alimentacion | alimentacion_cv | educacion | educacion_cv | transporte | transporte_cv | esparcimiento | esparcimiento_cv | otros | otros_cv | total_gasto | total_gasto_cv |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
< 2SMMLV | 973.0 | 0.5765700 | 647.5 | 0.6601037 | 1158.5 | 0.5831509 | 507.5 | 0.5654592 | 787.5 | 0.7729556 | 854.0 | 0.6405216 | 4928.0 | 0.5675253 |
De 2 a 4 SMMLV | 1704.5 | 0.4556989 | 1463.0 | 0.4915967 | 1312.5 | 0.4894686 | 637.0 | 0.5399847 | 630.0 | 0.4436170 | 1200.5 | 0.5940936 | 6947.5 | 0.4320404 |
>4 SMMLV | 2898.0 | 0.3362204 | 1921.5 | 0.3565357 | 1963.5 | 0.3526977 | 3206.0 | 0.2962170 | 1988.0 | 0.3332973 | 857.5 | 0.3191691 | 12834.5 | 0.2962100 |