1. INTRODUCCIÓN

El DANE en una “encuesta de micro-negocios” reunio informacion detallada sobre esas características sociales económicas productivas de los micro-negocios del país, con el fin de apoyar el diseño de políticas públicas dirigidas al fortalecimiento.

En Colombia, los micro-negocios son una parte fundamental de la economía ya que generan gran parte del empleo y sustento de la población del país, sin embargo este tipo de productores suelen enfrentarse a recursos limitados, tecnología y formalizacion lo que afecta su competitividad y su sostenibilidad.

El presente estudio tiene como objetivos analizar los factores que pueden influir en el desempeño de los micro-negocios, el ingreso mensual, las ventas, costos del mes etc. Partir del análisis estadístico se busca como estás características influyen en la productividad y sostenibilidad.

2. METODOLOGÍA

La presente base de datos recopila información estadística de Colombia, segmentada en variables cualitativas y cuantitativas que permiten analizar su situación económica y laboral. Esta, combina indicadores clave como ventas mensuales, costos mensuales y el salario. Las variables fueron obtenidas con el objetivo de llevar a cabo el estudio “micro-negocio y empleo” y su compilación procede de “el DANE”.

library(tidyverse)
library(caret)

Costos   <- read_delim("Datos/Módulo de costos, gastos y activos.csv", delim = ";", trim_ws = TRUE)
Ventas   <- read_delim("Datos/Módulo de ventas o ingresos.csv", delim = ";", trim_ws = TRUE)
Id       <- read_delim("Datos/Módulo de identificación y clasificación económica.csv", delim = ";", trim_ws = TRUE)
Personal <- read_delim("Datos/Módulo de personal ocupado.csv", delim = ";", trim_ws = TRUE)

2.1 Descripción de variables

Variables cualitativas: Departamentos

Variables cuantitativas:

A continuacion se muestran algunos valores la base de datos utilizada (BaseF)

DIRECTORIO Gastos_Promedio Ventas_Promedio Personal Meses COD_DEPTO Salario Departamento
4780178 2520000 2000000 3 60 05 880000 Antioquia
4780199 875880 1000000 1 5 05 828116 Antioquia
4780206 1336000 300000 1 6 05 840000 Antioquia
4780272 70000 400000 1 12 08 200000 Atlantico
4781478 290000 5000000 1 240 68 850000 Santander
4781603 125000 1000000 1 300 76 800000 Valle
4781869 510000 2500000 4 22 05 825000 Antioquia
4781882 520000 2000000 1 180 05 1500000 Antioquia
4781911 10000 100000 1 240 05 150000 Antioquia
4781929 50000 800000 1 120 05 800000 Antioquia

2.2 Descripción del modelo

El presente estudio aplica un modelo de regresión lineal múltiple con el objetivo de analizar la influencia de diversas variables de costo sobre el nivel de empleados en diferentes departamentos. La variable dependiente es la venta en un mes , mientras que las variables independientes incluyen factores cuantitativos como costos en un mes, personal del negocio , salario del personal y los departamentos escogidos ( Bogotá, Antioquia, valle Atlántico, Bolívar, Santander).

La ecuación general del modelo puede expresarse de la siguiente forma:

Ventas en un mes = β0 + β1(costos en un mes ) + β2(personal del negocio) + β3(salarios del personal) + β4(meses que lleva en operación) + β5( Bogotá) + β6(Antioquia) + β7(valle )+ β8(Atlántico) + β9(Bolívar)+ β10(Santander) + ε

Donde:

β0 es el intercepto. βi representa los coeficientes estimados de cada variables independiente. ε es el término de error.

A continuacion se muestra el codigo filtrado con todas las variables.

keep_depts <- c("05", "11", "76", "08", "13", "68")

Costos1 <- Costos %>%
  group_by(DIRECTORIO) %>%
  summarise(GASTOS_MES = mean(GASTOS_MES, na.rm = TRUE), .groups = "drop")

Ventas1 <- Ventas %>%
  group_by(DIRECTORIO) %>%
  summarise(P3072 = mean(P3072, na.rm = TRUE), .groups = "drop")

Id1 <- Id %>%
  mutate(COD_DEPTO = str_pad(str_trim(as.character(COD_DEPTO)), 2, pad = "0")) %>%
  group_by(DIRECTORIO) %>% summarise(P3032_1 = mean(P3032_1, na.rm = TRUE),
                                     P3034   = mean(P3034, na.rm = TRUE),
                                     COD_DEPTO = first(COD_DEPTO),
                                     .groups = "drop")

Personal1 <- Personal %>%
  group_by(DIRECTORIO) %>%
  summarise(P3079 = mean(P3079, na.rm = TRUE), .groups = "drop")

BaseF <- Costos1 %>%
  inner_join(Ventas1, by = "DIRECTORIO") %>%
  inner_join(Id1, by = "DIRECTORIO") %>%
  inner_join(Personal1, by = "DIRECTORIO") %>%
  rename(Gastos_Promedio = GASTOS_MES,
         Ventas_Promedio = P3072,
         Personal        = P3032_1,
         Meses           = P3034,
         Salario         = P3079) %>%
  mutate(COD_DEPTO = as.character(COD_DEPTO)) %>%
  filter(COD_DEPTO %in% keep_depts) %>%
  filter(if_all(where(is.numeric), ~ !is.na(.) & . > 0)) %>%
  mutate(Departamento = case_when(COD_DEPTO == "05" ~ "Antioquia",
                                  COD_DEPTO == "11" ~ "Bogota",
                                  COD_DEPTO == "76" ~ "Valle",
                                  COD_DEPTO == "08" ~ "Atlantico",
                                  COD_DEPTO == "13" ~ "Bolivar",
                                  COD_DEPTO == "68" ~ "Santander"),
    Departamento = factor(Departamento, levels = c("Bogota", "Antioquia", "Valle", "Atlantico", "Bolivar", "Santander"))) %>%
  filter(between(Ventas_Promedio, quantile(Ventas_Promedio, 0.01, na.rm = TRUE), quantile(Ventas_Promedio, 0.99, na.rm = TRUE)),
         between(Gastos_Promedio, quantile(Gastos_Promedio, 0.01, na.rm = TRUE), quantile(Gastos_Promedio, 0.99, na.rm = TRUE)),
         between(Salario, quantile(Salario, 0.01, na.rm = TRUE), quantile(Salario, 0.99, na.rm = TRUE)))

3. Resultados Descriptivos

Al tener todos los datos filtrados (un total de 2549 datos) y nuestra base creada, se empezaron a obtener resultados que compartiremos a continuacion.

3.1 Modelo lm

modelo<- lm(Ventas_Promedio ~ Gastos_Promedio + Personal + Salario + Meses + Departamento,data = BaseF)

summary(modelo)
## 
## Call:
## lm(formula = Ventas_Promedio ~ Gastos_Promedio + Personal + Salario + 
##     Meses + Departamento, data = BaseF)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -4841255  -920683  -333826   309888 19326150 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -4.255e+05  1.614e+05  -2.636  0.00844 ** 
## Gastos_Promedio        4.567e-01  3.548e-02  12.872  < 2e-16 ***
## Personal               2.456e+05  3.304e+04   7.434 1.43e-13 ***
## Salario                1.461e+00  1.229e-01  11.887  < 2e-16 ***
## Meses                  6.013e+02  3.253e+02   1.848  0.06465 .  
## DepartamentoAntioquia  3.093e+05  1.509e+05   2.050  0.04048 *  
## DepartamentoValle      1.651e+05  1.466e+05   1.126  0.26015    
## DepartamentoAtlantico  2.072e+05  1.382e+05   1.499  0.13405    
## DepartamentoBolivar    1.486e+06  1.710e+05   8.688  < 2e-16 ***
## DepartamentoSantander  3.943e+05  1.732e+05   2.276  0.02291 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2013000 on 2584 degrees of freedom
## Multiple R-squared:  0.2188, Adjusted R-squared:  0.2161 
## F-statistic: 80.41 on 9 and 2584 DF,  p-value: < 2.2e-16

3.2 Normalidad de los residuos

shapiro.test(modelo$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo$residuals
## W = 0.6816, p-value < 2.2e-16

3.3 Homocedasticidad

bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 125.46, df = 9, p-value < 2.2e-16

3.4 Multicolinealidad

vif(modelo)
##                     GVIF Df GVIF^(1/(2*Df))
## Gastos_Promedio 1.272786  1        1.128178
## Personal        1.156871  1        1.075579
## Salario         1.201807  1        1.096270
## Meses           1.033344  1        1.016535
## Departamento    1.130597  5        1.012350

3.5 Independencia

dwtest(modelo)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 1.9882, p-value = 0.3554
## alternative hypothesis: true autocorrelation is greater than 0

3.6 Linealidad

ggplot(data = data.frame(Fitted = fitted(modelo), Residuals = resid(modelo)),
       aes(x = Fitted, y = Residuals)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "loess", se = FALSE, color = "red", linewidth = 1, formula = y ~ x) +
  labs(title = "Linealidad: Residuos vs Valores Ajustados",
       x = "Valores Ajustados (Fitted Values)",
       y = "Residuos") +
  theme_minimal()

Como se puede observar en la grafica los datos y la tendencia en fuertemente lineal

3.7 Tabla descriptiva (Promedio, Minimos, Maximos, Desviaciones)

kable(Descriptivos, digits = 2)
Estadístico Ventas Gastos Salario Meses Personal
Promedio 1915034 986066.9 685691.5 146.18 1.85
Min 90000 10000.0 40000.0 2.00 0.33
Max 24810000 7870000.0 2000000.0 500.00 8.00
Desv 2274079 1257285.5 352775.6 123.56 1.29

3.8 Prediccion

B0 <- modelo$coefficients[1]
B1 <- modelo$coefficients["Gastos_Promedio"]
B2 <- modelo$coefficients["Personal"]
B3 <- modelo$coefficients["Salario"]
B4 <- modelo$coefficients["Meses"]

newdata <- data.frame(
  Gastos_Promedio = c(500000, 800000, 1200000, 2000000),
  Personal = c(2, 3, 5, 6),
  Salario = c(1000000, 1200000, 1400000, 1600000),
  Meses = c(12, 24, 36, 48))


newdata
##   Gastos_Promedio Personal Salario Meses
## 1          500000        2 1000000    12
## 2          800000        3 1200000    24
## 3         1200000        5 1400000    36
## 4         2000000        6 1600000    48
predict(modelo1, newdata)
##       1       2       3       4 
## 2081285 2743920 3702791 4572840
newdata$Ventas_Promedio_Predicho <- predict(modelo1, newdata)

kable(newdata, caption = "Predicciones del modelo de Ventas Promedio")
Predicciones del modelo de Ventas Promedio
Gastos_Promedio Personal Salario Meses Ventas_Promedio_Predicho
500000 2 1000000 12 2081285
800000 3 1200000 24 2743920
1200000 5 1400000 36 3702791
2000000 6 1600000 48 4572840

4.Resultados del Modelo

4.1 Análisis del Modelo lm

En general, se puede decir que Gastos_Promedio, Personal y Salario son las variables que más pesan en el modelo y que explican gran parte del comportamiento de la variable principal. Todo esto tiene sentido, porque los factores económicos como el gasto, el trabajo y los salarios suelen ir de la mano con los niveles de ingreso o producción.

A continuacion presentamos algunas graficas que confirman estas tendencias.

ggplot(BaseF, aes(x = Gastos_Promedio, y = Ventas_Promedio, color = Departamento)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) +
  labs(title = "Relación entre Ventas y Gastos",
       x = "Gastos promedio",
       y = "Ventas promedio") +
  theme_minimal() +  xlim(0, 2000000) +  ylim(0, 2000000)

ggplot(BaseF, aes(x = Personal, y = Ventas_Promedio, color = Departamento)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) +
  labs(title = "Relación entre Ventas y Personal",
       x = "Personal ocupado",
       y = "Ventas promedio") +
  theme_minimal() +
  xlim(1, 9) +
  ylim(0, 2000000)

ggplot(BaseF, aes(x = Salario, y = Ventas_Promedio, color = Departamento)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) +
  labs(title = "Relación entre Ventas y Salario",
       x = "Salario promedio",
       y = "Ventas promedio") +
  theme_minimal() +
  xlim(0, 2000000) +
  ylim(0, 2000000)

ggplot(BaseF, aes(x = Meses, y = Ventas_Promedio, color = Departamento)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) +
  labs(title = "Relación entre Ventas y Meses de operación",
       x = "Meses de operación",
       y = "Ventas promedio") +
  theme_minimal() +
  xlim(0, 250) +
  ylim(0, 2000000)

Por otro lado, los resultados mostraron un R2: 0.2188, osea que el modelo solamente explica un 21.9% de la variabilidad de las ventas, si bien no es muy alto, es entendible, a nuestro modelo le faltan variables claves como ubicacion exacta, horarios de atencion, tipo de productos vendidos, demanda local, etc. Con estas variables podriamos crear un modelo mucho aproximado al valor de las ventas.

El F-estaditico: 80.41 y un p-valor: <2.2e-16.

Gracias a que p-valor < significancia (0.05), podemos rechazar el H0 y concluir que al menos una de las variables influye de forma significativa en las Ventas_Promedio.

4.2 Análisis Normalidad de los residuos

Los resultados obtenidos fueron W: 0.6816, p-valor: <2.2e-16, si tomamos de referencia la sig hipotesis

El valor de W esta muy lejos de 1, lo cual nos dice que existe una desviacion importante de la normalidad, junto con el p-valor podemos rechazar H0 y concluir que los residuos no siguen una distribucion normal.

Tambien podemos comprobar este comportamiento con una grafica Q-Q de los residuos

qqnorm(modelo$residuals, main = "Gráfico Q-Q de los residuos")
qqline(modelo$residuals, col = "red", lwd = 2)

4.3 Análisis Homocedasticidad

En este caso, los resultados fueron.

Por lo que creamos un hipotesis.

Por lo que se rechaza H0 y los residuos NO presentan Homocedasticidad, osea la varianza de los errores no es constante.

4.4 Análisis Multicolinealidad

Como podemos ver en la tabla el VIF, la mayoria de los datos se encuentran muy cercanos a 1, estos nos quiere decir que exite muy poca correlacion entre variables y por lo mismo no hay correlacion entre estas.

En la siguiente grafica podemos comprobar que muchos de los valores son cercanos al 0 y tienen tonos frios, esto confirma mas la poca correlacion entre las variables.

vars <- BaseF %>%
  select(Gastos_Promedio, Personal, Salario, Meses)

matriz_cor <- cor(vars, use = "complete.obs")


ggcorrplot(matriz_cor,
           lab = TRUE,
           title = "Matriz de correlación entre variables independientes",
           colors = c("red", "white", "blue"),
           ggtheme = theme_minimal())

4.5 Análisis Independencia

Los resultados fueron.

Teniendo en cuenta la hipotesis.

Podemos observar que el Valor de DW se encuentre entre 1.5 y 2.5, lo que significa que no hay autocorrelación. Esto junto al un p-valor, el cual es más grande que la significancia (0.05) y por lo mismo no podemos rechazar H0, entonces podemos decir con mucha seguridad que NO existe autocorrelación.

4.6 Análisis Predicción

Gracias a la tabla de los datos podemos notar la tendencia en aumento que presenta.

Y como consecuencia de todos estos factores, la predicción de las ventas promedio aumenta junto a todas estas variables, desde 2.081.285 hasta 4.572.840.

5. Conclusión

En conclusión, podemos dar con certeza que las variables afectan y son significantes en las ventas de los micro negocios; las variables gastos promedio, número de empleados y salario del personal presentan una relación positiva y muy significativa con las ventas, lo que indica que los negocios que invierten más y pagan mejor tienden a generar mayores ingresos.

Tenemos un modelo con un R2 del 0.21, lo cual explica aproximadamente el 21.6 % de la variabilidad en las ventas, lo que nos da una explicación moderada, común en estudios económicos donde intervienen múltiples factores externos no observados. Sin embargo, los análisis de diagnóstico revelaron heterocedasticidad y falta de normalidad en los residuos. Por lo tanto, el modelo no cumple los supuestos clásicos de la regresión.

El modelo en sí nos indica que no todas las relaciones son lineales. Aun así, se concluye que la inversión y el talento humano son factores determinantes para el crecimiento de los micronegocios. Gracias al análisis, podemos dar un inicio para el lineamiento hacia la mejora de los micro negocios, teniendo la información clave como son los gastos, la empleabilidad y la inversión, lo que hace que los micro negocios puedan crecer un poco más, aunque hay que tener presente que entre más grande el micro negocio, menos se va adaptando el modelo, y empieza a tener más variabilidad.

6. Bibliografía