Monitoreo mensual del empleo de plataformas digitales

Autor/a

Nicolás Ratto

Fecha de publicación

9 de julio de 2026

1 Introducción

El presente documento consiste en un monitoreo mensual del empleo en el sector de las plataformas digitales de Chile, en base a la Encuesta Nacional de Empleo del Instituto Nacional de Estadísticas (INE). Esto, para el proyecto Hacia una regulación laboral efectiva para los trabajadores de plataformas digitales, financiado por la Friedrich-Ebert-Stiftung (FES) Chile.

Todos los datos son públicos y fueron descargados desde el sitio web del INE. La última actualización de los datos corresponde al trimestre Marzo - Abril - Mayo de 2026 (MAM 2026).

Ver código
## Carga bases de datos
ds <- open_dataset("../../../../PROSPECTIVA SpA/ene_empleo/output/data")

## Serie de plataformas
pd <- ds %>% 
  filter(ano_trimestre>=2020) %>% 
  select(periodo, fact_cal, plataformas_digitales) %>%
  filter(plataformas_digitales == 1) %>%
  group_by(periodo) %>%
  summarise(plataformas = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

# Serie de ocupados
ocupados <- ds %>% 
    filter(periodo>="2020-02-01") %>% 
  filter(activ == 1) %>%
  group_by(periodo) %>%
  summarise(ocupados_totales = sum(fact_cal, na.rm = TRUE)) %>%
  arrange(periodo) %>%
  collect()

pd <- merge(pd,ocupados,by="periodo")

2 Plataformas digitales (todas las reportadas)

Ver código
# Detalle

aux <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(periodo) %>%  
  summarise(n=n())%>% 
  collect()

nombres_plataformas <- ds %>% 
  filter(periodo>="2020-02-01") %>% 
  group_by(pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

nombres_plataformas<-nombres_plataformas %>% filter(pd_especifique!="")

head(nombres_plataformas,10) %>% kable(caption = "Principales empresas de plataformas reportadas (promedio ocupados mensuales)", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas (promedio ocupados mensuales)
Plataformas Ocupados mensualizado
INSTAGRAM 54.504
FACEBOOK 38.113
WHATSAPP 36.730
UBER 30.774
FACEBOOK MARKETPLACE 7.015
FACEBOOK INSTAGRAM 6.881
UBER EATS 4.727
PEDIDOS YA 3.861
INSTAGRAM FACEBOOK 3.573
CORNERSHOP 3.510
Ver código
ggplot(pd, aes(x = periodo, y = plataformas)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  scale_y_continuous(
  breaks = seq(0, max(pd$plataformas, na.rm = TRUE) + 50000, by = 50000),
  labels = label_number(big.mark = ".", decimal.mark = ",")
) + 
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

3 Todas las plataformas, excluyendo las redes sociales

Ver código
## quitar plataformas de venta online y redes sociales
nombres_plataformas_para_filtrar <- subset(nombres_plataformas,
                                           !(pd_especifique %in% 
                                               c("INSTAGRAM",
                                                 "FACEBOOK",
                                                 "WHATSAPP",
                                                 "FACEBOOK INSTAGRAM",
                                                 "FACEBOOK MARKETPLACE",
                                                 "INSTAGRAM FACEBOOK",
                                                 "FACEBOOK WHATSAPP",
                                                 "WHATSAPP FACEBOOK",
                                                 "WHATSAPP FACEBOOK INSTAGRAM",
                                                 "INSTAGRAM FACEBOOK WHATSAPP",
                                                 "INSTAGRAM WHATSAPP",
                                                 "MARKETPLACE",
                                                 "FACEBOOK INSTAGRAM WHATSAPP",
                                                 "WHATSAPP INSTAGRAM",
                                                 "WHATSAPP INSTAGRAM FACEBOOK",
                                                 "FACEBOOK MARKETPLACE INSTAGRAM",
                                                 "TIKTOK",
                                                 "FACEBOOK WHATSAPP INSTAGRAM",
                                                 "INSTAGRAM TIKTOK",
                                                 "FACEBOOK INSTAGRAM TIKTOK",
                                                 "MARKETPLACE FACEBOOK",
                                                 "MARKETPLACE INSTAGRAM",
                                                 "INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MARKETPLACE",
                                                 "TELEGRAM",
                                                 "FACEBOOK MARKETPLACE WHATSAPP",
                                                "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP",
                                                 "INSTAGRAM FACEBOOK TIKTOK",
                                                "WATTASPP INSTAGRAM",
                                            "FACEBOOK WHATSAPP INSTAGRAM TIKTOK",
                                                "TIKTOK FACEBOOK INSTAGRAM WHATSAPP",
                                                "FACEBOOK TIKTOK INSTAGRAM",
                                                "FACEBOOK INSTAGRAM MARKETPLACE",
                                                 "FACEBOOK TIKTOK",
                                            "WHATSAPP FACEBOOK YAPO",
                                            "INSTAGRAM FACEBOOK WHATSAPP TIKTOK",
                                                "WHATSAPP TIKTOK FACEBOOK",
                                                 "TWITTER INSTAGRAM",
                                            "FACEBOOK MARKETPLACE INSTAGRAM WHATSAPP FACEBOOK",
                                                 "INSTAGRAM MUNICIPALIDAD DE CONDES",
                                                 "INSTAGRAMWSP")))


pd2 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd2 <- pd2 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% 
  kable(caption = "Principales empresas de plataformas reportadas, sin redes sociales", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, sin redes sociales
Plataformas Ocupados mensualizado
UBER 30.774
UBER EATS 4.727
PEDIDOS YA 3.861
CORNERSHOP 3.510
MERCADOLIBRE 2.932
DIDI 2.317
RAPPI 2.048
INDRIVER 1.785
CABIFY 729
YOUTUBE 468
Ver código
graf_redes <- ggplot(pd2, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales, sin redes sociales (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

4 Plataformas georreferenciadas (Ley 21.431)

Ver código
## quitar plataformas de arriendo dptos y streaming
nombres_plataformas_para_filtrar <- subset(nombres_plataformas_para_filtrar,
                                           !(pd_especifique %in% 
                                               c("YOUTUBE",
                                                 "AIRBNB",
                                                 "ONLYFANS",
                                                 "BOOKING",
                                                 "WHATSAPP YOUTUBE",
                                                 "TWITCH")))

pd_ley21431 <- ds %>% 
  filter(periodo>="2020-02-01" & plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

pd_ley21431 <- pd_ley21431 %>% arrange(-desc(periodo))

head(nombres_plataformas_para_filtrar,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, Ley 21431
Plataformas Ocupados mensualizado
UBER 30.774
UBER EATS 4.727
PEDIDOS YA 3.861
CORNERSHOP 3.510
MERCADOLIBRE 2.932
DIDI 2.317
RAPPI 2.048
INDRIVER 1.785
CABIFY 729
AMIDA 356
Ver código
ggplot(pd_ley21431, aes(x = periodo, y = ocupados)) +
  geom_line(linewidth = 1.2, color = "#2C3E50") +
  geom_point(size = 2.5, color = "#2C3E50") +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Solo primera ocupación.",
    x = NULL,
    y = "Número de personas",
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)
Ver código
## gráfica conjunta

pd <- pd %>% select(periodo,plataformas) %>% mutate(tipo="todas") %>% 
  rename(ocupados=plataformas)
pd_ley21431 <- pd_ley21431 %>% select(periodo,ocupados) %>% mutate(tipo="ley21431")

pd_ley21431 <- bind_rows(pd,pd_ley21431)

ggplot(pd_ley21431, aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("todas" = "#2C3E50", "ley21431" = "#E74C3C")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 50000)) +
  
  labs(
    title = "Ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación. Todas y Ley 21.431.",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)
Ver código
## Porcentajes

pd_porcentajes <- cbind(pd_ley21431,
rbind(ocupados,ocupados)[,2]
)

pd_porcentajes <- pd_porcentajes %>% mutate(porcentaje=round(ocupados/ocupados_totales*100,2))


ggplot(pd_porcentajes, aes(x = periodo, y = porcentaje, 
                           color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("todas" = "#2C3E50", "ley21431" = "#E74C3C")) +
  
  scale_y_continuous(labels = label_percent(accuracy = 0.1, decimal.mark = ",", scale = 1)) + 
  
  
  labs(
    title = "Porcentaje de los ocupados en plataformas digitales (2020-2026)",
    subtitle = "Solo primera ocupación. Todas y Ley 21.431.",
    x = NULL,
    y = "Porcentaje",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_porcentaje.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

4.1 Características de trabajadores y su ocupación

4.1.1 Sexo

Ver código
nombres <- ds %>% names()

sexo <- ds %>% 
  filter(periodo>="2020-02-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, sexo) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,1)) %>% 
  collect()

sexo <- sexo %>% arrange(-desc(periodo))

sexo %>% group_by(sexo) %>% summarise(percent=mean(percent)) %>% 
  mutate(sexo= c("hombre","mujer"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por sexo")
Promedio de distribución por sexo
sexo percent
hombre 85.01
mujer 14.99

4.1.2 Informalidad

Ver código
formalidad <- ds %>% 
  filter(periodo>="2020-02-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, ocup_form) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

formalidad <- formalidad %>% arrange(-desc(periodo))

formalidad %>%
  ggplot(aes(x = periodo, y = percent, color = as.factor(ocup_form),
             group = as.factor(ocup_form))) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  scale_y_continuous(
    labels = label_percent(scale = 1, suffix = "%"),
    limits = c(0, 100)
  ) +
  scale_color_manual(
    values = c("1" = "#1D9E75", "2" = "#D85A30"),
    labels = c("1" = "Formal", "2" = "Informal")
  ) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Según formalidad en primera ocupación",
    x = NULL,
    y = "Porcentaje",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
formalidad %>% 
  tail(2) %>% 
  mutate(ocup_form=c("Formales","Informales"),
         ocupados=round(ocupados)) %>% 
  kable(caption = "Distribución por formalidad en último periodo con datos",
        format.args = list(big.mark = ".", scientific = FALSE))
Distribución por formalidad en último periodo con datos
periodo ocup_form ocupados percent
2026-04-01 Formales 25.712 35.45
2026-04-01 Informales 46.823 64.55

4.1.3 Región

Datos del último año

Ver código
region <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, region) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

region %>% group_by(region) %>% summarise(percent=mean(percent)) %>% 
  mutate(percent=round(percent,2),
         region=c(
   "  1           Tarapacá",
   "  2        Antofagasta",
   "  3            Atacama",
   "  4           Coquimbo",
   "  5         Valparaíso",
   "  6          O'Higgins",
   "  7              Maule",
   "  8             Biobío",
   "  9       La Araucanía",
   " 10          Los Lagos",
   " 11              Aysén",
   " 12         Magallanes",
   " 13      Metropolitana",
   " 14           Los Ríos",
   " 15 Arica y Parinacota",
   " 16              Ñuble"
         )) %>% 
  kable(caption = "Promedio de distribución por región últimos 12 meses")
Promedio de distribución por región últimos 12 meses
region percent
1 Tarapacá 2.08
2 Antofagasta 2.04
3 Atacama 0.93
4 Coquimbo 4.83
5 Valparaíso 8.79
6 O’Higgins 1.49
7 Maule 3.55
8 Biobío 6.35
9 La Araucanía 2.15
10 Los Lagos 2.86
11 Aysén 0.15
12 Magallanes 0.95
13 Metropolitana 60.11
14 Los Ríos 1.17
15 Arica y Parinacota 1.41
16 Ñuble 1.18

4.1.4 Nacionalidad

Datos del último año

Ver código
nacionalidad <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, nacionalidad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

nacionalidad %>% group_by(nacionalidad) %>% 
  summarise(percent=mean(percent)) %>% 
  arrange(-percent) %>% 
  head(3) %>% 
  mutate(nacionalidad=c("Chilena (152)",
                        "Venezuela (862)",
                        "Colombia (170)"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por nacionalidad últimos 12 meses. 3 principales")
Promedio de distribución por nacionalidad últimos 12 meses. 3 principales
nacionalidad percent
Chilena (152) 63.87
Venezuela (862) 25.23
Colombia (170) 5.12
Ver código
nacionalidad_2022 <- ds %>% 
  filter(periodo>="2022-03-01" &  periodo<="2024-03-01" &
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, nacionalidad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

nacionalidad_2022 %>% group_by(nacionalidad) %>% summarise(percent=mean(percent)) %>%
  arrange(-percent) %>% 
  head(3) %>% 
  mutate(nacionalidad=c("Chilena (152)",
                        "Venezuela (862)",
                        "Colombia (170)"),
         percent=round(percent,2)) %>% 
  kable(caption = "Promedio de distribución por nacionalidad en 2022-2023. 3 principales")
Promedio de distribución por nacionalidad en 2022-2023. 3 principales
nacionalidad percent
Chilena (152) 58.71
Venezuela (862) 34.47
Colombia (170) 3.69

4.1.5 Edad

Datos del último año

Ver código
edad <- ds %>% 
  filter(periodo>="2025-03-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo, tramo_edad) %>% 
  summarise(
    ocupados = sum(fact_cal, na.rm = TRUE)
  ) %>% 
  mutate(percent=round(ocupados/sum(ocupados)*100,2)) %>% 
  collect()

edad %>% 
  group_by(tramo_edad) %>% 
  summarise(percent=round(mean(percent),1)) %>% 
    mutate(percent_acum = cumsum(percent)) %>% 
  mutate(tramo_edad=     
   c("15 a 19 años",
    "20 a 24 años",
    "25 a 29 años",
    "30 a 34 años",
    "35 a 39 años",
    "40 a 44 años",
    "45 a 49 años",
    "50 a 54 años",
    "55 a 59 años",
    "60 a 64 años",
    "65 a 69 años",
    "70 años o más")) %>% 
  kable(caption = "Promedio de distribución por edad últimos 12 meses")
Promedio de distribución por edad últimos 12 meses
tramo_edad percent percent_acum
15 a 19 años 1.2 1.2
20 a 24 años 5.2 6.4
25 a 29 años 14.1 20.5
30 a 34 años 23.6 44.1
35 a 39 años 19.3 63.4
40 a 44 años 11.4 74.8
45 a 49 años 8.1 82.9
50 a 54 años 6.1 89.0
55 a 59 años 5.6 94.6
60 a 64 años 3.7 98.3
65 a 69 años 0.7 99.0
70 años o más 1.2 100.2

4.1.6 Salarios en 2024

La Encuesta Nacional de Empleo no incluye por si misma preguntas sobre salarios. La información debe ser complementada por la Encuesta Suplementaria de Ingresos, cuyos últimos datos publicados corresponden al trimestre móvil octubre - noviembre - diciembre de 2024. En ese trimestre se registraron 83.639 trabajadores de plataformas digitales regulados por la Ley 21.431 (ocupando factores de expansión de la ESI), que corresponden a 185 personas en la muestra. El ingreso mensual promedio que estos trabajadores recibieron por su ocupación principal fue de $712.091. La mediana salarial fue de $600.000, lo que indica que la mitad de los trabajadores recibió ese monto o menos.

Ver código
#esi_2024 <- read_dta("input/esi_2024.dta")
#saveRDS(esi_2024, "input/esi_2024.rds")
esi_2024 <- readRDS("input/esi_2024.rds")


plataformas_nov2024 <- ds %>% 
  filter(periodo=="2024-11-01" &  
           plataformas_digitales == 1 & 
            pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  select(idrph,fact_cal) %>% 
  collect()

# sum(plataformas_nov2024$fact_cal)

plataformas_nov2024 <- merge(plataformas_nov2024,esi_2024,by="idrph",all.x = TRUE)

# sum(plataformas_nov2024$fact_cal.y)
# sum(plataformas_nov2024$fact_cal_esi)


plataformas_nov2024 %>% 
  summarise(
    salario_promedio =round(weighted.mean(ing_t_p,fact_cal_esi, na.rm = TRUE)),
    salario_mediano = round(matrixStats::weightedMedian(ing_t_p, 
                                                  fact_cal_esi, 
                                                  na.rm = TRUE))
  ) %>% 
  kable(caption = "Ingreso del trabajo promedio y mediano en 2024 para los trabajadores de plataformas")
Ingreso del trabajo promedio y mediano en 2024 para los trabajadores de plataformas
salario_promedio salario_mediano
712091 600000

En término agregados, las dos medidas de ingresos del trabajo superaron el ingreso mínimo mensual de ese momento, $500.000. Sin embargo, es necesario observar el ingreso por hora, cuyo valor de referencia mínimo es $2.652. Con el recargo del 20% establecido por la Ley 21.431 el monto de referencia quedaría en $3.182. En promedio, los trabajadores de plataformas digitales trabajaron 187.8 horas en el trimestre de referencia, alcanzando un ingreso promedio por hora de solo $3.200, solo $18 más que el mínimo legal.

Ver código
plataformas_nov2024 <- plataformas_nov2024 %>% 
  mutate(horas_mes = d4_horas*d4_dias,
         itp_hora = ing_t_p/horas_mes) 

plataformas_nov2024 %>% 
  summarise(
    
    horas = round(weighted.mean(horas_mes, fact_cal.y, na.rm = TRUE),1),
    
    ingreso_horas = round(matrixStats::weightedMedian(itp_hora, 
                                                  fact_cal_esi, 
                                                  na.rm = TRUE))
    
  ) %>% 
  kable(caption = "Ingreso del trabajo por hora para los trabajadores de plataformas")
Ingreso del trabajo por hora para los trabajadores de plataformas
horas ingreso_horas
187.8 3200
Ver código
# con ic (interno)
#options(survey.lonely.psu = "certainty" ) 
#tab <- plataformas_nov2024 %>% 
#  srvyr::as_survey_design(ids = conglomerado, strata = estrato, weights = #fact_cal_esi) %>% 
#  summarise(
#    horas = srvyr::survey_mean(horas_mes, na.rm = TRUE, vartype = "ci"),
#    ingreso_horas = srvyr::survey_median(itp_hora, na.rm = TRUE, vartype = #"ci")
#  )

#summary(plataformas_nov2024$d4_dias)
#summary(plataformas_nov2024$d4_horas)
#summary(plataformas_nov2024$horas_mes)
#summary(plataformas_nov2024$itp_hora)
#
#plataformas_nov2024 %>% 
#    summarise(
#        total = n(),
#        no_na = sum(!is.na(itp_hora)),
#        na = sum(is.na(itp_hora))
#    )

Considérese que solamente 31 casos presentaron información válida para hacer la estimación, por lo que los intervalos de confianza son especialmente amplios, van desde los $2.692 a los $3.958, por lo que no se puede concluir que la estimación de ingreso promedio por hora sea igual o superior a la establecida por la Ley 21.431.

5 Plataformas como segunda ocupación

Ver código
# library(haven)
# ene_last <- read_dta("~/Library/CloudStorage/OneDrive-UniversidadCatólicadeChile/PROSPECTIVA SpA/minuta ENE/ene_empleo/input/ene-2026-03-fma.dta")
# ene_last %>% select("plataformas_digitales", "pd_especifique",  "b19"   ,                "dependencia_segunda" , "sda_pd",   "sda_pd_especifique"  )

segunda <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  group_by(periodo) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect() 

segunda <- segunda %>% arrange(-desc(periodo))

nombres_2da <- ds %>% 
  filter(periodo>="2020-02-01" & sda_pd == 1 & plataformas_digitales!=1) %>% 
  group_by(sda_pd_especifique) %>%
  summarise(ocupados_acumulado = sum(fact_cal, na.rm = TRUE)) %>%   filter(sda_pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>%
  mutate(ocupados_acumulado=round(ocupados_acumulado/nrow(aux))) %>% 
  arrange(-ocupados_acumulado) %>% 
  collect()

head(nombres_2da,10) %>% kable(caption = "Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)", col.names = c("Plataformas","Ocupados mensualizado"),
        format.args = list(big.mark = ".", scientific = FALSE))
Principales empresas de plataformas reportadas, Ley 21431 (segunda ocupación)
Plataformas Ocupados mensualizado
UBER 2.736
UBER EATS 639
CORNERSHOP 390
INDRIVER 302
MERCADOLIBRE 281
PEDIDOS YA 255
RAPPI 193
DIDI 168
CABIFY 166
UBER DIDI 93
Ver código
segunda <- segunda %>% select(periodo,ocupados) %>% mutate(tipo="segunda_ley21431")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

segunda <- pd %>% select(periodo) %>% mutate(ocupados = (pd_ley21431[pd_ley21431$tipo == "ley21431", "ocupados"] + pd_ley21431[pd_ley21431$tipo == "segunda_ley21431", "ocupados"])) %>% mutate(tipo="ley21431_1y2")

pd_ley21431 <- bind_rows(pd_ley21431,segunda)

pd_ley21431 %>% 
  filter(tipo!="todas") %>% 
ggplot(aes(x = periodo, y = ocupados, color = tipo, group = tipo)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2.5) +
  
  scale_color_manual(values = c("segunda_ley21431" = "#2C3E50", 
                                "ley21431" = "#E74C3C",
                                "ley21431_1y2"="#6A0DAD")) +
  
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
          breaks = seq(0, max(pd_ley21431$ocupados, na.rm = TRUE), by = 10000)) +
  
  labs(
    title = "Ocupados en plataformas digitales Ley 21.431 (2020-2026)",
    subtitle = "Primera y segunda ocupación",
    x = NULL,
    y = "Número de personas",
    color = NULL,
    caption = "Fuente: Elaboración propia en base a ENE"
  ) +
  
  theme_minimal(base_size = 13) +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 16),
    plot.subtitle = element_text(color = "gray40"),
    axis.text = element_text(color = "gray30"),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.caption = element_text(size = 9, color = "gray50")
  )

Ver código
ggsave(
  filename = "output/graficos/grafico_ocupados_ley21431_1_2.png",
  plot = last_plot(),
  width = 13.33,
  height = 7.5,
  units = "in",
  dpi = 300
)

pd_ley21431 %>% tidyr::pivot_wider(names_from = tipo,values_from = ocupados) %>% writexl::write_xlsx("output/tablas/numero_plataformas.xlsx")

6 Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años

Ver código
nuevas <- ds %>% 
  filter(periodo=="2026-04-01" | periodo=="2022-04-01" & 
           plataformas_digitales == 1 ) %>% 
  filter(pd_especifique %in% nombres_plataformas_para_filtrar$pd_especifique) %>% 
  group_by(periodo,pd_especifique) %>%
  summarise(ocupados = sum(fact_cal, na.rm = TRUE)) %>%
  collect()

nuevas <- nuevas %>% 
  mutate(ocupados=round(ocupados)) %>% 
  tidyr::pivot_wider(names_from = periodo, values_from = ocupados,
                         values_fill = 0) 

nuevas %>%  
  mutate(variacion_porc=round((`2026-04-01` - `2022-04-01`)/`2022-04-01`*100,1),
         `2026-04-01`=round(`2026-04-01`),
         `2022-04-01`=round(`2022-04-01`)) %>% 
  arrange(-variacion_porc, -`2026-04-01`) %>% 
  kable(caption = "Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años")
Empresas de plataformas Ley 21431 con mayor crecimiento últimos 4 años
pd_especifique 2022-04-01 2026-04-01 variacion_porc
BOOSMAP 0 1145 Inf
PICKER UP 0 592 Inf
MERCADOLIBRE INSTAGRAM 0 533 Inf
AMIDA 0 404 Inf
ZUBALE 0 236 Inf
UBER DIDI 0 192 Inf
WHATSAPP UBER 0 178 Inf
INSTAGRAM TIKTOK WHATSAPP 0 172 Inf
PREPLY 0 161 Inf
WHATSAPP INDRIVER 0 148 Inf
PICKER 0 124 Inf
VALDISHOPPER 0 111 Inf
BEHANCE 0 66 Inf
MARKETPLACE WHATSAPP 0 48 Inf
MERCADOLIBRE 898 4098 356.3
DIDI 1604 5295 230.1
INDRIVER 947 2504 164.4
UBER EATS 4285 10353 141.6
CABIFY 336 682 103.0
UBER 21708 39475 81.8
DIDI UBER 200 307 53.5
PEDIDOS YA 4497 4203 -6.5
RAPPI 4548 1508 -66.8
YAPO 188 0 -100.0
BEAT 1007 0 -100.0
CORNERSHOP 7131 0 -100.0
SAWU 920 0 -100.0
SHOPPER 458 0 -100.0
TRANSVIP 795 0 -100.0
FOXER 2641 0 -100.0