# install.packages("devtools")
# install.packages('rticles')
#install.packages("tinytex")
#install.packages("dplyr")
#install.packages("modeest")
#install.packages("e1071")
#install.packages("summarytools")
#install.packages("read")
#install.packages("readxl")
#install.packages("patchwork")
#install.packages("magrittr")
library(patchwork)
library(summarytools)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(modeest)
library(rticles)
library(ggplot2)
library(e1071)
##
## Adjuntando el paquete: 'e1071'
## The following object is masked from 'package:modeest':
##
## skewness
library(naniar)
library(tinytex)
library(readxl)
library(magrittr)
datos <- read_excel("C:/Users/Usuario/Desktop/RIOGRANDE/RIOGRANDE/PRIMERAS VARIABLES.xlsx", sheet = 1)
colSums(is.na(datos)) %>% as.data.frame()
## .
## CabezaFamilia 11
## VentasDiarias 28
## VentasN.Diarias 43
## Deuda 50
## Edad 22
## Miembros 11
## GENERO 15
## Ambulante 26
## HTrabajo_Dia 19
## HTrabajo_Semana 13
## Empleados 0
## Carga 0
## Pasajeros 0
## Turistas 0
## HabitantesCP 0
## HabitantesCR 0
## CIU 0
## Letrado 0
gg_miss_var(datos)
T_CabezaFamilia = function(CabezaFamilia) {
CabezaFamilia = tolower(CabezaFamilia)
CabezaFamilia = dplyr::recode(CabezaFamilia,
"no" = "No",
"si" = "Si",
"SI" = "Si",
"NO" = "No",
.default = CabezaFamilia)
return(CabezaFamilia)
}
T_Ambulante= function(Ambulante) {
Ambulante = tolower(Ambulante)
Ambulante = dplyr::recode(Ambulante,
"no" = "No",
"si" = "Si",
"SI" = "Si",
"NO" = "No",
.default = Ambulante)
return(Ambulante)
}
datos = datos %>%
mutate(CabezaFamilia = T_CabezaFamilia(CabezaFamilia))
datos = datos %>%
mutate(Ambulante = T_Ambulante(Ambulante))
curtosis_ventas_diarias = kurtosis(datos$VentasDiarias, na.rm = TRUE)
curtosis_ventas_n_diarias = kurtosis(datos$VentasN.Diarias, na.rm = TRUE)
curtosis_deuda = kurtosis(datos$Deuda, na.rm = TRUE)
curtosis_edad = kurtosis(datos$Edad, na.rm = TRUE)
curtosis_miembros = kurtosis(datos$Miembros, na.rm = TRUE)
curtosis_htrabajodia = kurtosis(datos$HTrabajo_Dia, na.rm = TRUE)
curtosis_htrabajosemana = kurtosis(datos$HTrabajo_Semana, na.rm = TRUE)
curtosis_ventas_diarias
## [1] 75.2271
curtosis_ventas_n_diarias
## [1] 60.92506
curtosis_deuda
## [1] 127.8383
curtosis_edad
## [1] -0.0188526
curtosis_miembros
## [1] 3.180662
curtosis_htrabajodia
## [1] 1.29582
curtosis_htrabajosemana
## [1] 11.93906
mediana_ventas_diarias = median(datos$VentasDiarias, na.rm = TRUE)
mediana_ventas_n_diarias = median(datos$VentasN.Diarias, na.rm = TRUE)
mediana_deuda = median(datos$Deuda, na.rm = TRUE)
mediana_edad = median(datos$Edad, na.rm = TRUE)
mediana_miembros = median(datos$Miembros, na.rm = TRUE)
mediana_htrabajodia = median(datos$HTrabajo_Dia, na.rm = TRUE)
mediana_htrabajosemana = median(datos$HTrabajo_Semana, na.rm = TRUE)
datos$VentasDiarias[is.na(datos$VentasDiarias)] = mediana_ventas_diarias
datos$VentasN.Diarias[is.na(datos$VentasN.Diarias)] = mediana_ventas_n_diarias
datos$Deuda[is.na(datos$Deuda)] = mediana_deuda
datos$Edad[is.na(datos$Edad)] = mediana_edad
datos$Miembros[is.na(datos$Miembros)] = mediana_miembros
datos$HTrabajo_Dia[is.na(datos$HTrabajo_Dia)] = mediana_htrabajodia
datos$HTrabajo_Semana[is.na(datos$HTrabajo_Semana)] = mediana_htrabajosemana
colSums(is.na(datos)) %>% as.data.frame()
## .
## CabezaFamilia 11
## VentasDiarias 0
## VentasN.Diarias 0
## Deuda 0
## Edad 0
## Miembros 0
## GENERO 15
## Ambulante 26
## HTrabajo_Dia 0
## HTrabajo_Semana 0
## Empleados 0
## Carga 0
## Pasajeros 0
## Turistas 0
## HabitantesCP 0
## HabitantesCR 0
## CIU 0
## Letrado 0
gg_miss_var(datos)
ventas_net_ambulante <- datos %>%
filter(Ambulante == "Si") %>%
group_by(GENERO, CabezaFamilia) %>%
summarise(VentasN_Diarias_Total = mean(VentasN.Diarias, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 6 × 3
## GENERO CabezaFamilia VentasN_Diarias_Total
## <chr> <chr> <dbl>
## 1 F No 40
## 2 F Si 49.3
## 3 M No 65
## 4 M Si 69.8
## 5 <NA> Si 53.3
## 6 <NA> <NA> 80
detect_outliers <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
outliers <- x[x < lower_bound | x > upper_bound]
return(outliers)
}
outliers_ventas_diarias = detect_outliers(datos$VentasDiarias)
outliers_ventas_n_diarias = detect_outliers(datos$VentasN.Diarias)
outliers_deuda = detect_outliers(datos$Deuda)
outliers_edad = detect_outliers(datos$Edad)
outliers_miembros = detect_outliers(datos$Miembros)
outliers_htrabajodia = detect_outliers(datos$HTrabajo_Dia)
#outliers_htrabajosemana = detect_outliers(datos$HTrabajo_Semana) en este caso no lo impute porque en su mayoria eran 7 dias, la media daba 6 y algo, por lo cual lo deje asi.
outliers_ventas_diarias
## [1] 3000 1500 4000 2500 1600 2000 2000 3000 2000 35000 1500 2000
## [13] 3500 5000 2000 30000 2000 1500 3000 2000 1300 7000 1500 2500
## [25] 1500 1500 8000
outliers_ventas_n_diarias
## [1] 1000 500 1000 800 600 4000 7000 500 1500 350 1500 2500 700 600 1400
## [16] 500 2000 500 1000
outliers_deuda
## [1] 78000 30000 120000 30000 120000 3000000 22000 26000 60000
## [10] 140000 35000 25000 20000 60000 40000 30000 60000 30000
## [19] 300000 30000 40000 230000 30000 700000 300000 62000 50000
## [28] 100000 70000 300000 70000 190000 20000 30000 20000 500000
outliers_edad
## [1] 88 2 84
outliers_miembros
## [1] 10 15 10 10
outliers_htrabajodia
## [1] 24 24 17 24 17 24 24 19 24 24 24 24 17 24 24 24 24 24 24 17 24 24 20 24 20
## [26] 24 24
#outliers_htrabajosemana
moda_Genero = as.character(names(sort(table(datos$GENERO), decreasing = TRUE)[1]))
datos$GENERO[is.na(datos$GENERO)] = moda_Genero
ventas_net_ambulante2 = datos %>%
filter(Ambulante == "Si") %>%
group_by(GENERO, CabezaFamilia) %>%
summarise(VentasN_Diarias_Total = sum(VentasN.Diarias, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 6 × 3
## GENERO CabezaFamilia VentasN_Diarias_Total
## <chr> <chr> <dbl>
## 1 F No 40
## 2 F Si 49.3
## 3 M No 65
## 4 M Si 69.8
## 5 <NA> Si 53.3
## 6 <NA> <NA> 80
moda_cabeza_familia = as.character(names(sort(table(datos$CabezaFamilia), decreasing = TRUE)[1]))
datos$CabezaFamilia[is.na(datos$CabezaFamilia)] = moda_cabeza_familia
moda_Ambulante = as.character(names(sort(table(datos$Ambulante), decreasing = TRUE)[1]))
datos$Ambulante[is.na(datos$Ambulante)] = moda_Ambulante
colSums(is.na(datos)) %>% as.data.frame()
## .
## CabezaFamilia 0
## VentasDiarias 0
## VentasN.Diarias 0
## Deuda 0
## Edad 0
## Miembros 0
## GENERO 0
## Ambulante 0
## HTrabajo_Dia 0
## HTrabajo_Semana 0
## Empleados 0
## Carga 0
## Pasajeros 0
## Turistas 0
## HabitantesCP 0
## HabitantesCR 0
## CIU 0
## Letrado 0
gg_miss_var(datos)
replace_outliers_with_median <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
mediana <- median(x, na.rm = TRUE)
x <- ifelse(x < lower_bound | x > upper_bound, mediana, x)
return(x)
}
datos_sin_outliers <- datos %>%
mutate(
VentasDiarias = replace_outliers_with_median(VentasDiarias),
VentasN.Diarias = replace_outliers_with_median(VentasN.Diarias),
Deuda = replace_outliers_with_median(Deuda),
Edad = replace_outliers_with_median(Edad),
Miembros = replace_outliers_with_median(Miembros),
HTrabajo_Dia = replace_outliers_with_median(HTrabajo_Dia),
HTrabajo_Semana = replace_outliers_with_median(HTrabajo_Semana)
)
colSums(is.na(datos_sin_outliers)) %>% as.data.frame()
## .
## CabezaFamilia 0
## VentasDiarias 0
## VentasN.Diarias 0
## Deuda 0
## Edad 0
## Miembros 0
## GENERO 0
## Ambulante 0
## HTrabajo_Dia 0
## HTrabajo_Semana 0
## Empleados 0
## Carga 0
## Pasajeros 0
## Turistas 0
## HabitantesCP 0
## HabitantesCR 0
## CIU 0
## Letrado 0
gg_miss_var(datos_sin_outliers)
promedios_ventas_sin_outliers = datos_sin_outliers %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_VentasDiarias = mean(VentasDiarias, na.rm = TRUE),
Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE)
)
print(as.data.frame(promedios_ventas_sin_outliers))
## CabezaFamilia Promedio_VentasDiarias Promedio_VentasN_Diarias
## 1 No 297.9310 89.06897
## 2 Si 255.2895 92.92105
promedios_ventas_con_outliers <- datos %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_VentasDiarias = mean(VentasDiarias, na.rm = TRUE),
Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE)
)
print(as.data.frame(promedios_ventas_con_outliers))
## CabezaFamilia Promedio_VentasDiarias Promedio_VentasN_Diarias
## 1 No 297.9310 89.06897
## 2 Si 923.7105 232.02632
promedios_deuda_sin_outliers = datos_sin_outliers %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_Deuda = mean(Deuda, na.rm = TRUE)
)
print(as.data.frame(promedios_deuda_sin_outliers))
## CabezaFamilia Promedio_Deuda
## 1 No 1463.793
## 2 Si 1537.632
promedios_miembros_sin_outliers <- datos_sin_outliers %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_Miembros = mean(Miembros, na.rm = TRUE)
)
print(as.data.frame(promedios_miembros_sin_outliers))
## CabezaFamilia Promedio_Miembros
## 1 No 3.241379
## 2 Si 3.910526
promedios_edad_sin_outliers = datos_sin_outliers %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_Edad = mean(Edad, na.rm = TRUE)
)
print(promedios_edad_sin_outliers)
## # A tibble: 2 × 2
## CabezaFamilia Promedio_Edad
## <chr> <dbl>
## 1 No 35.4
## 2 Si 45.9
promedios_horas_dia_sin_outliers = datos_sin_outliers %>%
group_by(CabezaFamilia) %>%
summarise(
Promedio_HorasDia = mean(HTrabajo_Dia, na.rm = TRUE)
)
print(promedios_horas_dia_sin_outliers)
## # A tibble: 2 × 2
## CabezaFamilia Promedio_HorasDia
## <chr> <dbl>
## 1 No 10.1
## 2 Si 10.7
promedios_horas_semana_sin_outliers = datos_sin_outliers %>% #aqui me equivoque nombrando la variable, pero esta bien, no hace ningun efecto ##
group_by(CabezaFamilia) %>%
summarise(
Promedio_HorasSemana = mean(HTrabajo_Semana, na.rm = TRUE)
)
print(promedios_horas_semana_sin_outliers)
## # A tibble: 2 × 2
## CabezaFamilia Promedio_HorasSemana
## <chr> <dbl>
## 1 No 7
## 2 Si 7
cantidad_genero_por_cabeza_familia <- datos_sin_outliers %>%
group_by(CabezaFamilia, GENERO) %>%
summarise(Cantidad = n()) %>%
ungroup()
## `summarise()` has grouped output by 'CabezaFamilia'. You can override using the
## `.groups` argument.
print(cantidad_genero_por_cabeza_familia)
## # A tibble: 4 × 3
## CabezaFamilia GENERO Cantidad
## <chr> <chr> <int>
## 1 No F 14
## 2 No M 15
## 3 Si F 67
## 4 Si M 123
cantidad_por_genero_ambulante_cabeza <- datos_sin_outliers %>%
filter(Ambulante == "Si") %>% # Filtrar solo los vendedores ambulantes
group_by(GENERO, CabezaFamilia) %>%
summarise(Cantidad = n()) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(cantidad_por_genero_ambulante_cabeza)
## # A tibble: 4 × 3
## GENERO CabezaFamilia Cantidad
## <chr> <chr> <int>
## 1 F No 3
## 2 F Si 15
## 3 M No 5
## 4 M Si 29
horas_trabajo_por_genero_cabeza = datos_sin_outliers %>%
group_by(GENERO, CabezaFamilia) %>%
summarise(
Promedio_HorasDia = mean(HTrabajo_Dia, na.rm = TRUE),
Promedio_HorasSemana = mean(HTrabajo_Semana, na.rm = TRUE)
) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(horas_trabajo_por_genero_cabeza)
## # A tibble: 4 × 4
## GENERO CabezaFamilia Promedio_HorasDia Promedio_HorasSemana
## <chr> <chr> <dbl> <dbl>
## 1 F No 9.64 7
## 2 F Si 10.3 7
## 3 M No 10.5 7
## 4 M Si 11.0 7
frecuencia_relativa = datos_sin_outliers %>%
group_by(Ambulante) %>%
summarise(
Total_Negocios = n(),
Carga_Afirmativo = sum(Carga, na.rm = TRUE) / Total_Negocios * 100,
Pasajeros_Afirmativo = sum(Pasajeros, na.rm = TRUE) / Total_Negocios * 100,
Turistas_Afirmativo = sum(Turistas, na.rm = TRUE) / Total_Negocios * 100,
HabitantesCP_Afirmativo = sum(HabitantesCP, na.rm = TRUE) / Total_Negocios * 100,
HabitantesCR_Afirmativo = sum(HabitantesCR, na.rm = TRUE) / Total_Negocios * 100
)
print(as.data.frame(frecuencia_relativa))
## Ambulante Total_Negocios Carga_Afirmativo Pasajeros_Afirmativo
## 1 No 167 66.46707 38.32335
## 2 Si 52 75.00000 73.07692
## Turistas_Afirmativo HabitantesCP_Afirmativo HabitantesCR_Afirmativo
## 1 53.89222 64.07186 53.89222
## 2 67.30769 53.84615 40.38462
####Calcular la diferencia entre VentasDiarias y VentasN.Diarias
diferencia_ventas_ambulante = datos_sin_outliers %>%
mutate(Diferencia_Ventas = VentasDiarias - VentasN.Diarias) %>%
group_by(GENERO, CabezaFamilia, Ambulante) %>%
summarise(Promedio_Diferencia = mean(Diferencia_Ventas, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO', 'CabezaFamilia'. You can override
## using the `.groups` argument.
print(as.data.frame(diferencia_ventas_ambulante))
## GENERO CabezaFamilia Ambulante Promedio_Diferencia
## 1 F No No 290.00000
## 2 F No Si 50.00000
## 3 F Si No 194.42308
## 4 F Si Si 58.00000
## 5 M No No 233.20000
## 6 M No Si 77.00000
## 7 M Si No 188.72340
## 8 M Si Si 73.44828
conteo_por_hora = datos_sin_outliers %>%
group_by(HTrabajo_Dia) %>%
summarise(Conteo = n())
altura_fija = max(datos_sin_outliers$VentasN.Diarias) * 1.1
grafico_densidad_conjunta <- ggplot(datos_sin_outliers, aes(x = HTrabajo_Dia, y = VentasN.Diarias)) +
geom_point(alpha = 0.5, color = "blue") +
geom_density2d(color = "red") +
scale_x_continuous(breaks = seq(5, 20, by = 1)) +
geom_label(data = conteo_por_hora, aes(x = HTrabajo_Dia, y = altura_fija, label = Conteo),
color = "black", fill = "white", size = 5, fontface = "bold", vjust = 1) +
labs(title = " ", x = "Horas de Trabajo por Dia", y = "Ventas Netas Diarias") +
theme_minimal()
print(grafico_densidad_conjunta)
promedio_ventas_por_hora <- datos_sin_outliers %>%
group_by(HTrabajo_Dia) %>%
summarise(Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE))
print(promedio_ventas_por_hora)
## # A tibble: 12 × 2
## HTrabajo_Dia Promedio_VentasN_Diarias
## <dbl> <dbl>
## 1 5 40
## 2 6 40
## 3 7 52.2
## 4 8 100.
## 5 9 91.5
## 6 10 73.1
## 7 11 112.
## 8 12 80.2
## 9 13 140
## 10 14 85.7
## 11 15 98.8
## 12 16 87.5
grafico_jitter_densidad = ggplot(datos_sin_outliers, aes(x = Edad, y = HTrabajo_Dia)) +
geom_jitter(aes(color = GENERO), size = 2, alpha = 0.7) +
geom_density_2d(color = "blue") + scale_x_continuous(breaks = seq(1, 75, by = 20)) +
labs(title = " ", y = "Horas de Trabajo por Dia", x = "Edad", color = "Genero") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_text(size = 10), legend.text = element_text(size = 8))
print(grafico_jitter_densidad)
datos_sin_outliers$Edad_Grupo <- cut(datos_sin_outliers$Edad, breaks = seq(0, 80, by = 5), right = FALSE)
grafico_barras_polar <- ggplot(datos_sin_outliers, aes(x = Edad_Grupo, y = HTrabajo_Dia, fill = GENERO)) +
geom_bar(stat = "identity", position = "stack", alpha = 0.8) + coord_polar(start = 0) +
labs(title = " ", y = "Horas Dia", x = "Grupo de Edad", fill = "Genero") +
scale_fill_manual(values = c("F" = "pink", "M" = "blue")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "bottom",
legend.title = element_text(size = 10),
legend.text = element_text(size = 8))
print(grafico_barras_polar)
filtro_edad_horas = datos_sin_outliers %>%
filter(Edad >= 45, Edad <= 50, HTrabajo_Dia >= 8, HTrabajo_Dia <= 12) # 40 a 50 años entre 8 a 12 horas
conteo_genero <- filtro_edad_horas %>%
group_by(GENERO) %>%
summarise(Conteo = n())
print(conteo_genero)
## # A tibble: 2 × 2
## GENERO Conteo
## <chr> <int>
## 1 F 10
## 2 M 37
piramide_data = datos_sin_outliers %>%
group_by(Edad, GENERO) %>%
summarise(Conteo = n()) %>%
ungroup()
## `summarise()` has grouped output by 'Edad'. You can override using the
## `.groups` argument.
piramide_data = piramide_data %>%
mutate(Conteo = ifelse(GENERO == "F", -Conteo, Conteo))
piramide_plot = ggplot(piramide_data, aes(x = Edad, y = Conteo, fill = GENERO)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = abs) + labs(title = "Piramide Poblacional por Edad y Genero",
x = "Edad",
y = "Cantidad de Personas",
fill = "Genero") +
theme_minimal() + scale_fill_manual(values = c("F" = "pink", "M" = "blue"))
print(piramide_plot)
## Los CIIU que generan mayores ingresos netos y empleos
ciu_empleos_ventas <- datos_sin_outliers %>%
group_by(CIU) %>%
summarise(
Total_Empleados = mean(Empleados, na.rm = TRUE),
Total_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE)
) %>%
arrange(desc(Total_Empleados))
top_ciu_empleos <- ciu_empleos_ventas %>%
arrange(desc(Total_Empleados)) %>%
top_n(5, Total_Empleados)
print("CIU que generan más empleos:")
## [1] "CIU que generan más empleos:"
print(top_ciu_empleos)
## # A tibble: 5 × 3
## CIU Total_Empleados Total_VentasNetasDiarias
## <dbl> <dbl> <dbl>
## 1 4663 10 80
## 2 4661 8 80
## 3 1081 5.5 225
## 4 4731 5.5 80
## 5 5511 5.05 110.
top_ciu_ventas <- ciu_empleos_ventas %>%
arrange(desc(Total_VentasNetasDiarias)) %>%
top_n(5, Total_VentasNetasDiarias)
print("CIU que generan más ingresos por ventas netas diarias:")
## [1] "CIU que generan más ingresos por ventas netas diarias:"
print(top_ciu_ventas)
## # A tibble: 5 × 3
## CIU Total_Empleados Total_VentasNetasDiarias
## <dbl> <dbl> <dbl>
## 1 1081 5.5 225
## 2 4512 2 200
## 3 3110 4.67 160
## 4 4711 1.86 160
## 5 2431 2 135
clasificacion_completa = datos_sin_outliers %>%
group_by(CIU) %>%
summarise(
Cantidad_Negocios = n(),
Promedio_VentasN_Diarias = mean(VentasN.Diarias, na.rm = TRUE),
Promedio_Empleados = mean(Empleados, na.rm = TRUE)
) %>%
arrange(desc(Cantidad_Negocios))
print(as.data.frame(clasificacion_completa))
## CIU Cantidad_Negocios Promedio_VentasN_Diarias Promedio_Empleados
## 1 0 45 54.11111 0.1333333
## 2 4520 35 103.28571 3.3428571
## 3 5511 22 109.54545 5.0454545
## 4 5611 18 116.11111 3.8888889
## 5 5613 15 49.00000 0.7333333
## 6 4530 12 105.00000 1.6666667
## 7 4542 7 83.57143 2.0000000
## 8 4711 7 160.00000 1.8571429
## 9 4541 6 120.83333 2.0000000
## 10 4719 6 116.66667 0.5000000
## 11 4721 6 116.66667 1.5000000
## 12 4771 5 84.00000 2.0000000
## 13 5630 5 106.00000 2.2000000
## 14 3110 3 160.00000 4.6666667
## 15 4690 3 120.00000 1.0000000
## 16 9602 3 24.33333 0.6666667
## 17 1081 2 225.00000 5.5000000
## 18 2431 2 135.00000 2.0000000
## 19 3314 2 80.00000 0.5000000
## 20 4731 2 80.00000 5.5000000
## 21 4752 2 35.00000 2.0000000
## 22 4512 1 200.00000 2.0000000
## 23 4649 1 50.00000 1.0000000
## 24 4653 1 80.00000 4.0000000
## 25 4661 1 80.00000 8.0000000
## 26 4663 1 80.00000 10.0000000
## 27 4729 1 100.00000 2.0000000
## 28 4741 1 30.00000 0.0000000
## 29 4761 1 30.00000 0.0000000
## 30 4773 1 80.00000 0.0000000
## 31 7310 1 80.00000 0.0000000
## 32 9200 1 80.00000 1.0000000
personas_con_ingresos_bajos = datos_sin_outliers %>%
filter(VentasN.Diarias < 33.33) %>%
select(CIU, Ambulante, CabezaFamilia, VentasN.Diarias)
print(as.data.frame(personas_con_ingresos_bajos))
## CIU Ambulante CabezaFamilia VentasN.Diarias
## 1 4761 No No 30
## 2 4520 No Si 25
## 3 0 Si No 25
## 4 4520 No Si 20
## 5 5611 No Si 10
## 6 0 Si Si 20
## 7 5613 No Si 20
## 8 4520 No Si 30
## 9 5611 No Si 20
## 10 9602 No No 8
## 11 5611 No No 20
## 12 4752 No Si 30
## 13 0 Si Si 5
## 14 4741 No Si 30
## 15 0 Si No 30
## 16 0 Si Si 25
## 17 0 Si Si 15
## 18 0 Si Si 30
## 19 0 Si Si 30
## 20 9602 No Si 5
## 21 4721 Si Si 20
## 22 4719 No Si 20
## 23 0 No Si 15
## 24 0 Si Si 25
## 25 0 Si Si 30
## 26 0 Si Si 20
## 27 0 Si Si 20
## 28 0 Si Si 15
## 29 4542 No Si 15
## 30 0 Si Si 30
## 31 0 Si Si 30
## 32 0 Si Si 30
## 33 0 Si No 30
## 34 0 Si Si 30
personas_con_ingresos_bajos = datos_sin_outliers %>%
filter(VentasN.Diarias < 33.33) %>%
select(CIU, Ambulante, CabezaFamilia, VentasN.Diarias, Miembros)
print(as.data.frame(personas_con_ingresos_bajos))
## CIU Ambulante CabezaFamilia VentasN.Diarias Miembros
## 1 4761 No No 30 2
## 2 4520 No Si 25 3
## 3 0 Si No 25 0
## 4 4520 No Si 20 5
## 5 5611 No Si 10 1
## 6 0 Si Si 20 5
## 7 5613 No Si 20 4
## 8 4520 No Si 30 5
## 9 5611 No Si 20 4
## 10 9602 No No 8 1
## 11 5611 No No 20 4
## 12 4752 No Si 30 2
## 13 0 Si Si 5 2
## 14 4741 No Si 30 4
## 15 0 Si No 30 2
## 16 0 Si Si 25 9
## 17 0 Si Si 15 9
## 18 0 Si Si 30 3
## 19 0 Si Si 30 4
## 20 9602 No Si 5 2
## 21 4721 Si Si 20 1
## 22 4719 No Si 20 2
## 23 0 No Si 15 3
## 24 0 Si Si 25 1
## 25 0 Si Si 30 2
## 26 0 Si Si 20 6
## 27 0 Si Si 20 5
## 28 0 Si Si 15 4
## 29 4542 No Si 15 3
## 30 0 Si Si 30 3
## 31 0 Si Si 30 7
## 32 0 Si Si 30 6
## 33 0 Si No 30 2
## 34 0 Si Si 30 3
rentabilidad_por_miembro <- datos_sin_outliers %>%
filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%
mutate(Rentabilidad_Por_Miembro = VentasN.Diarias / Miembros) %>%
select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro, CabezaFamilia, Ambulante)
print(as.data.frame(rentabilidad_por_miembro))
## CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro CabezaFamilia
## 1 4520 25 3 8.333333 Si
## 2 4520 20 5 4.000000 Si
## 3 5611 10 1 10.000000 Si
## 4 0 20 5 4.000000 Si
## 5 5613 20 4 5.000000 Si
## 6 4520 30 5 6.000000 Si
## 7 5611 20 4 5.000000 Si
## 8 4752 30 2 15.000000 Si
## 9 0 5 2 2.500000 Si
## 10 4741 30 4 7.500000 Si
## 11 0 25 9 2.777778 Si
## 12 0 15 9 1.666667 Si
## 13 0 30 3 10.000000 Si
## 14 0 30 4 7.500000 Si
## 15 9602 5 2 2.500000 Si
## 16 4721 20 1 20.000000 Si
## 17 4719 20 2 10.000000 Si
## 18 0 15 3 5.000000 Si
## 19 0 25 1 25.000000 Si
## 20 0 30 2 15.000000 Si
## 21 0 20 6 3.333333 Si
## 22 0 20 5 4.000000 Si
## 23 0 15 4 3.750000 Si
## 24 4542 15 3 5.000000 Si
## 25 0 30 3 10.000000 Si
## 26 0 30 7 4.285714 Si
## 27 0 30 6 5.000000 Si
## 28 0 30 3 10.000000 Si
## Ambulante
## 1 No
## 2 No
## 3 No
## 4 Si
## 5 No
## 6 No
## 7 No
## 8 No
## 9 Si
## 10 No
## 11 Si
## 12 Si
## 13 Si
## 14 Si
## 15 No
## 16 Si
## 17 No
## 18 No
## 19 Si
## 20 Si
## 21 Si
## 22 Si
## 23 Si
## 24 No
## 25 Si
## 26 Si
## 27 Si
## 28 Si
ciiu_mas_repetido <- rentabilidad_por_miembro %>%
count(CIU) %>%
arrange(desc(n)) %>%
slice(1)
total_cabeza_familia <- rentabilidad_por_miembro %>%
summarise(Numero_CabezaFamilia = sum(CabezaFamilia == "Si"))
total_ambulantes <- rentabilidad_por_miembro %>%
summarise(Numero_Ambulantes = sum(Ambulante == "Si"))
print("CIIU que más se repite:")
## [1] "CIIU que más se repite:"
print(ciiu_mas_repetido)
## # A tibble: 1 × 2
## CIU n
## <dbl> <int>
## 1 0 16
print("Número de Cabezas de Familia:")
## [1] "Número de Cabezas de Familia:"
print(total_cabeza_familia)
## # A tibble: 1 × 1
## Numero_CabezaFamilia
## <int>
## 1 28
print("Número de Ambulantes:")
## [1] "Número de Ambulantes:"
print(total_ambulantes)
## # A tibble: 1 × 1
## Numero_Ambulantes
## <int>
## 1 16
rentabilidad_por_miembro_mensual <- datos_sin_outliers %>%
filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%
mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>%
select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, CabezaFamilia, Ambulante, GENERO)
print(as.data.frame(rentabilidad_por_miembro_mensual))
## CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro_Mensual CabezaFamilia
## 1 4520 25 3 250.00000 Si
## 2 4520 20 5 120.00000 Si
## 3 5611 10 1 300.00000 Si
## 4 0 20 5 120.00000 Si
## 5 5613 20 4 150.00000 Si
## 6 4520 30 5 180.00000 Si
## 7 5611 20 4 150.00000 Si
## 8 4752 30 2 450.00000 Si
## 9 0 5 2 75.00000 Si
## 10 4741 30 4 225.00000 Si
## 11 0 25 9 83.33333 Si
## 12 0 15 9 50.00000 Si
## 13 0 30 3 300.00000 Si
## 14 0 30 4 225.00000 Si
## 15 9602 5 2 75.00000 Si
## 16 4721 20 1 600.00000 Si
## 17 4719 20 2 300.00000 Si
## 18 0 15 3 150.00000 Si
## 19 0 25 1 750.00000 Si
## 20 0 30 2 450.00000 Si
## 21 0 20 6 100.00000 Si
## 22 0 20 5 120.00000 Si
## 23 0 15 4 112.50000 Si
## 24 4542 15 3 150.00000 Si
## 25 0 30 3 300.00000 Si
## 26 0 30 7 128.57143 Si
## 27 0 30 6 150.00000 Si
## 28 0 30 3 300.00000 Si
## Ambulante GENERO
## 1 No M
## 2 No M
## 3 No M
## 4 Si F
## 5 No F
## 6 No M
## 7 No F
## 8 No F
## 9 Si M
## 10 No M
## 11 Si F
## 12 Si F
## 13 Si F
## 14 Si M
## 15 No F
## 16 Si M
## 17 No F
## 18 No M
## 19 Si M
## 20 Si M
## 21 Si M
## 22 Si M
## 23 Si F
## 24 No M
## 25 Si M
## 26 Si F
## 27 Si M
## 28 Si M
linea_pobreza <- 435.375
linea_pobreza_extrema <- 218.846
rentabilidad_por_miembro_mensual <- datos_sin_outliers %>%
filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%
mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>% # Calcular la rentabilidad diaria neta por miembro y multiplicarla por 30
mutate(Estado_Pobreza = case_when(
Rentabilidad_Por_Miembro_Mensual < linea_pobreza_extrema ~ "Pobreza Extrema",
Rentabilidad_Por_Miembro_Mensual < linea_pobreza ~ "Pobreza",
TRUE ~ "No Pobreza" )) %>%
select(CIU, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, Estado_Pobreza, CabezaFamilia, Ambulante)
conteo_pobreza <- rentabilidad_por_miembro_mensual %>%
group_by(Estado_Pobreza) %>%
summarise(Conteo = n())
print(as.data.frame(rentabilidad_por_miembro_mensual))
## CIU VentasN.Diarias Miembros Rentabilidad_Por_Miembro_Mensual
## 1 4520 25 3 250.00000
## 2 4520 20 5 120.00000
## 3 5611 10 1 300.00000
## 4 0 20 5 120.00000
## 5 5613 20 4 150.00000
## 6 4520 30 5 180.00000
## 7 5611 20 4 150.00000
## 8 4752 30 2 450.00000
## 9 0 5 2 75.00000
## 10 4741 30 4 225.00000
## 11 0 25 9 83.33333
## 12 0 15 9 50.00000
## 13 0 30 3 300.00000
## 14 0 30 4 225.00000
## 15 9602 5 2 75.00000
## 16 4721 20 1 600.00000
## 17 4719 20 2 300.00000
## 18 0 15 3 150.00000
## 19 0 25 1 750.00000
## 20 0 30 2 450.00000
## 21 0 20 6 100.00000
## 22 0 20 5 120.00000
## 23 0 15 4 112.50000
## 24 4542 15 3 150.00000
## 25 0 30 3 300.00000
## 26 0 30 7 128.57143
## 27 0 30 6 150.00000
## 28 0 30 3 300.00000
## Estado_Pobreza CabezaFamilia Ambulante
## 1 Pobreza Si No
## 2 Pobreza Extrema Si No
## 3 Pobreza Si No
## 4 Pobreza Extrema Si Si
## 5 Pobreza Extrema Si No
## 6 Pobreza Extrema Si No
## 7 Pobreza Extrema Si No
## 8 No Pobreza Si No
## 9 Pobreza Extrema Si Si
## 10 Pobreza Si No
## 11 Pobreza Extrema Si Si
## 12 Pobreza Extrema Si Si
## 13 Pobreza Si Si
## 14 Pobreza Si Si
## 15 Pobreza Extrema Si No
## 16 No Pobreza Si Si
## 17 Pobreza Si No
## 18 Pobreza Extrema Si No
## 19 No Pobreza Si Si
## 20 No Pobreza Si Si
## 21 Pobreza Extrema Si Si
## 22 Pobreza Extrema Si Si
## 23 Pobreza Extrema Si Si
## 24 Pobreza Extrema Si No
## 25 Pobreza Si Si
## 26 Pobreza Extrema Si Si
## 27 Pobreza Extrema Si Si
## 28 Pobreza Si Si
print(as.data.frame(conteo_pobreza))
## Estado_Pobreza Conteo
## 1 No Pobreza 4
## 2 Pobreza 8
## 3 Pobreza Extrema 16
linea_pobreza = 435.375
linea_pobreza_extrema = 218.846
rentabilidad_por_miembro_mensual = datos_sin_outliers %>%
filter(CabezaFamilia == "Si" & VentasN.Diarias < 33.33) %>%
mutate(Rentabilidad_Por_Miembro_Mensual = (VentasN.Diarias / Miembros) * 30) %>% # Calcular la rentabilidad diaria neta por miembro y multiplicarla por 30
mutate(Estado_Pobreza = case_when(
Rentabilidad_Por_Miembro_Mensual < linea_pobreza_extrema ~ "Pobreza Extrema",
Rentabilidad_Por_Miembro_Mensual < linea_pobreza ~ "Pobreza",
TRUE ~ "No Pobreza")) %>%
select(CIU, GENERO, Ambulante, VentasN.Diarias, Miembros, Rentabilidad_Por_Miembro_Mensual, Estado_Pobreza, CabezaFamilia)
conteo_pobreza_por_genero_ambulante <- rentabilidad_por_miembro_mensual %>%
group_by(Estado_Pobreza, GENERO, Ambulante) %>%
summarise(Conteo = n())
## `summarise()` has grouped output by 'Estado_Pobreza', 'GENERO'. You can
## override using the `.groups` argument.
print(as.data.frame(rentabilidad_por_miembro_mensual))
## CIU GENERO Ambulante VentasN.Diarias Miembros
## 1 4520 M No 25 3
## 2 4520 M No 20 5
## 3 5611 M No 10 1
## 4 0 F Si 20 5
## 5 5613 F No 20 4
## 6 4520 M No 30 5
## 7 5611 F No 20 4
## 8 4752 F No 30 2
## 9 0 M Si 5 2
## 10 4741 M No 30 4
## 11 0 F Si 25 9
## 12 0 F Si 15 9
## 13 0 F Si 30 3
## 14 0 M Si 30 4
## 15 9602 F No 5 2
## 16 4721 M Si 20 1
## 17 4719 F No 20 2
## 18 0 M No 15 3
## 19 0 M Si 25 1
## 20 0 M Si 30 2
## 21 0 M Si 20 6
## 22 0 M Si 20 5
## 23 0 F Si 15 4
## 24 4542 M No 15 3
## 25 0 M Si 30 3
## 26 0 F Si 30 7
## 27 0 M Si 30 6
## 28 0 M Si 30 3
## Rentabilidad_Por_Miembro_Mensual Estado_Pobreza CabezaFamilia
## 1 250.00000 Pobreza Si
## 2 120.00000 Pobreza Extrema Si
## 3 300.00000 Pobreza Si
## 4 120.00000 Pobreza Extrema Si
## 5 150.00000 Pobreza Extrema Si
## 6 180.00000 Pobreza Extrema Si
## 7 150.00000 Pobreza Extrema Si
## 8 450.00000 No Pobreza Si
## 9 75.00000 Pobreza Extrema Si
## 10 225.00000 Pobreza Si
## 11 83.33333 Pobreza Extrema Si
## 12 50.00000 Pobreza Extrema Si
## 13 300.00000 Pobreza Si
## 14 225.00000 Pobreza Si
## 15 75.00000 Pobreza Extrema Si
## 16 600.00000 No Pobreza Si
## 17 300.00000 Pobreza Si
## 18 150.00000 Pobreza Extrema Si
## 19 750.00000 No Pobreza Si
## 20 450.00000 No Pobreza Si
## 21 100.00000 Pobreza Extrema Si
## 22 120.00000 Pobreza Extrema Si
## 23 112.50000 Pobreza Extrema Si
## 24 150.00000 Pobreza Extrema Si
## 25 300.00000 Pobreza Si
## 26 128.57143 Pobreza Extrema Si
## 27 150.00000 Pobreza Extrema Si
## 28 300.00000 Pobreza Si
print(as.data.frame(conteo_pobreza_por_genero_ambulante))
## Estado_Pobreza GENERO Ambulante Conteo
## 1 No Pobreza F No 1
## 2 No Pobreza M Si 3
## 3 Pobreza F No 1
## 4 Pobreza F Si 1
## 5 Pobreza M No 3
## 6 Pobreza M Si 3
## 7 Pobreza Extrema F No 3
## 8 Pobreza Extrema F Si 5
## 9 Pobreza Extrema M No 4
## 10 Pobreza Extrema M Si 4
library(ggplot2)
library(dplyr)
library(gridExtra)
##
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
promedio_ventas_empleados_por_ciu = datos_sin_outliers %>%
group_by(CIU) %>%
summarise(
Promedio_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE),
Promedio_Empleados = mean(Empleados, na.rm = TRUE)
) %>%
arrange(desc(Promedio_VentasNetasDiarias))
top_ciu_ventas <- promedio_ventas_empleados_por_ciu %>%
top_n(5, Promedio_VentasNetasDiarias)
grafico_dispersión_ventas <- ggplot(top_ciu_ventas, aes(x = Promedio_Empleados, y = Promedio_VentasNetasDiarias, label = CIU)) +
geom_point(size = 5, color = "blue", alpha = 0.7) +
geom_text(vjust = -1, size = 3.5) +
labs(title = "Top 5 CIUs en Ventas Netas Diarias Promedio",
x = "Promedio de Empleados",
y = "Promedio de Ventas Netas Diarias") +
theme_minimal()
promedio_ventas_empleados_por_ciu <- datos_sin_outliers %>%
group_by(CIU) %>%
summarise(
Promedio_VentasNetasDiarias = mean(VentasN.Diarias, na.rm = TRUE),
Promedio_Empleados = mean(Empleados, na.rm = TRUE)
) %>%
arrange(desc(Promedio_Empleados))
top_ciu_empleados <- promedio_ventas_empleados_por_ciu %>%
top_n(5, Promedio_Empleados)
grafico_dispersión_empleados <- ggplot(top_ciu_empleados, aes(x = Promedio_Empleados, y = Promedio_VentasNetasDiarias, label = CIU)) +
geom_point(size = 5, color = "green", alpha = 0.7) +
geom_text(vjust = -1, size = 3.5) +
labs(title = "Top 5 CIUs en Promedio de Empleados",
x = "Promedio de Empleados",
y = "Promedio de Ventas Netas Diarias") +
theme_minimal()
grid.arrange(grafico_dispersión_ventas, grafico_dispersión_empleados, ncol = 2)
ventas_net_ambulante <- datos_sin_outliers %>%
filter(Ambulante == "Si") %>%
group_by(GENERO, CabezaFamilia) %>%
summarise(VentasN_Diarias_Total = mean(VentasN.Diarias, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
print(ventas_net_ambulante)
## # A tibble: 4 × 3
## GENERO CabezaFamilia VentasN_Diarias_Total
## <chr> <chr> <dbl>
## 1 F No 40
## 2 F Si 49.3
## 3 M No 65
## 4 M Si 68.4
empleados_por_ambulante = datos_sin_outliers %>%
group_by(Ambulante) %>%
summarise(Total_Empleados = sum(Empleados, na.rm = TRUE), Promedio_Empleados = mean(Empleados, na.rm = TRUE))
print(as.data.frame(empleados_por_ambulante))
## Ambulante Total_Empleados Promedio_Empleados
## 1 No 472 2.826347
## 2 Si 13 0.250000
grafico_caja_bigote <- ggplot(datos_sin_outliers, aes(x = Ambulante, y = Empleados, fill = Ambulante)) +
geom_boxplot(alpha = 0.7) +
labs(title = " ",
y = "Numero de Empleados",
x = "Es Ambulante") +
scale_fill_manual(values = c("No" = "green", "Si" = "blue")) +
theme_minimal() +
theme(legend.position = "none",
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 10))
print(grafico_caja_bigote)
#lo hice para determinar datos atipicos, pero a consideración mia estos datos con atipicos se puede dejar.
conteo_por_genero <- datos_sin_outliers %>%
group_by(GENERO) %>%
summarise(Total_Personas = n())
conteo_mayores_60 = datos_sin_outliers %>%
filter(Edad > 60) %>%
group_by(GENERO) %>%
summarise(Mayores_60 = n())
print("Total de personas por género:")
## [1] "Total de personas por género:"
print(conteo_por_genero)
## # A tibble: 2 × 2
## GENERO Total_Personas
## <chr> <int>
## 1 F 81
## 2 M 138
print("Personas mayores de 60 años por género:")
## [1] "Personas mayores de 60 años por género:"
print(conteo_mayores_60)
## # A tibble: 2 × 2
## GENERO Mayores_60
## <chr> <int>
## 1 F 8
## 2 M 16
ambulantes <- datos_sin_outliers %>%
filter(Ambulante == "Si")
estadisticas_edad_genero <- ambulantes %>%
group_by(GENERO) %>%
summarise(
Total = n(),
Promedio_Edad = mean(Edad, na.rm = TRUE),
Mediana_Edad = median(Edad, na.rm = TRUE),
Desviacion_Estandar = sd(Edad, na.rm = TRUE),
Edad_Minima = min(Edad, na.rm = TRUE),
Edad_Maxima = max(Edad, na.rm = TRUE)
)
print(estadisticas_edad_genero)
## # A tibble: 2 × 7
## GENERO Total Promedio_Edad Mediana_Edad Desviacion_Estandar Edad_Minima
## <chr> <int> <dbl> <dbl> <dbl> <dbl>
## 1 F 18 37.7 37 12.8 19
## 2 M 34 46.6 45.5 15.3 23
## # ℹ 1 more variable: Edad_Maxima <dbl>
personas_no_letradas_por_genero = datos_sin_outliers %>%
filter(Letrado == "No") %>%
group_by(GENERO) %>%
summarise(Conteo_Personas = n())
print(as.data.frame(personas_no_letradas_por_genero))
## GENERO Conteo_Personas
## 1 F 3
## 2 M 17
grafico_barras_letrados = ggplot(personas_no_letradas_por_genero, aes(x = GENERO, y = Conteo_Personas, fill = GENERO)) + geom_bar(stat = "identity", alpha = 0.7) + geom_text(aes(label = Conteo_Personas), vjust = -0.5, color = "black", size = 3.5) + labs(title = "Numero de Personas que No Saben Leer y Escribir por Genero",
x = "Genero",
y = "Cantidad de Personas") + theme_minimal() + scale_fill_manual(values = c("M" = "blue", "F" = "pink"))
print(grafico_barras_letrados)
personas_no_letradas_por_genero_y_ambulante <- datos_sin_outliers %>%
filter(Letrado == "No") %>% # No es de que no saben escribir ni leer
group_by(GENERO, Ambulante) %>%
summarise(Conteo_Personas = n())
## `summarise()` has grouped output by 'GENERO'. You can override using the
## `.groups` argument.
personas_no_letradas_por_genero_y_ambulante
## # A tibble: 3 × 3
## # Groups: GENERO [2]
## GENERO Ambulante Conteo_Personas
## <chr> <chr> <int>
## 1 F No 3
## 2 M No 12
## 3 M Si 5
library(dplyr)
library(tidyr)
##
## Adjuntando el paquete: 'tidyr'
## The following object is masked from 'package:magrittr':
##
## extract
library(gridExtra)
mark_outliers_na <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
x <- ifelse(x < lower_bound | x > upper_bound, NA, x)
return(x)
}
datos_con_outliers = datos %>%
select(CabezaFamilia, VentasDiarias, VentasN.Diarias) %>%
mutate(Outliers = "Con Outliers")
datos_sin_outliers = datos %>%
mutate(VentasDiarias = mark_outliers_na(VentasDiarias),
VentasN.Diarias = mark_outliers_na(VentasN.Diarias)) %>%
select(CabezaFamilia, VentasDiarias, VentasN.Diarias) %>%
mutate(Outliers = "Sin Outliers")
datos_combinados = bind_rows(datos_sin_outliers, datos_con_outliers)
datos_largos = datos_combinados %>%
pivot_longer(cols = c(VentasDiarias, VentasN.Diarias), names_to = "Tipo_Venta", values_to = "Ventas")
grafico_cajas = ggplot(datos_largos, aes(x = CabezaFamilia, y = Ventas, fill = CabezaFamilia)) + geom_boxplot(alpha = 0.7) + facet_wrap(~ Tipo_Venta + Outliers, scales = "free_y", ncol = 2) +
labs(title = "", x = "Cabeza de Familia", y = "Ventas",
fill = "Cabeza de Familia") + theme_minimal()
print(grafico_cajas)
## Warning: Removed 46 rows containing non-finite outside the scale range
## (`stat_boxplot()`).