library(readxl)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(tidyr)
library(corrplot)
library(broom)
library(dplyr)
library(knitr)
library(kableExtra)
library(lmtest)
library(car)
library(gt)
library(htmltools)
library(plotly)
library(reshape2)

Introducción

En el contexto económico actual, el estudio de la productividad laboral de un país es clave para medir su nivel de desarrollo económico. Este análisis se fundamenta en que “la capacidad de un país para mejorar su nivel de vida a lo largo del tiempo depende casi por completo de su capacidad para aumentar su producción por trabajador” (Krugman, 1994). En ese sentido, la manera más eficiente de medirlo es a través del Producto Interno Bruto (PIB) por persona empleada, un indicador que según la OIT (2021), permite evaluar la eficiencia y la calidad del capital humano en el proceso productivo.

Pero la productividad no depende únicamente de la cantidad de trabajadores, sino también de varios factores o características dentro del mercado laboral que pueden influir en el rendimiento del mismo. Por esta razón surge el problema de identificar cuáles son los factores del mercado que más influyen en el nivel de productividad de los países. Factores como el empleo a tiempo parcial, la presencia de trabajo autónomo, la participación en el sector industrial, la proporción de trabajadores familiares y el nivel de empleo total pueden hacer la diferencia en los niveles de productividad de cada país en concreto.

Para abordar este problema, este estudio tiene como objetivo analizar la relación entre el PIB por persona empleada y distintas variables que lo afectan en el mercado laboral, con el fin de identificar si las variables relacionadas con la informalidad, son un freno para el desarrollo económico. Para ello, es aplicado un modelo de regresión lineal múltiple con el cual se puede evaluar el efecto de varias variables independientes sobre una variable dependiente, esto facilita el análisis en conjunto de estas variables y comprender mejor el fenómeno.

Este análisis se realizó usando datos correspondientes al año 2017, lo cual permite que todos los datos se trabajen en un mismo contexto temporal y con esto se evitan posibles distorsiones originadas por cambios económicos a lo largo del tiempo. Justamente en el año 2017, la economía mundial se encontraba en un periodo de recuperación por los efectos de la crisis financiera global que hubo en años anteriores. Además, durante este periodo muchos países experimentaron cambios en su estructura laboral caracterizadas por un aumento en formas de empleo más flexibles como lo son el trabajo a tiempo parcial o el trabajo autónomo, estos cambios generaban dudas de cómo dichas características laborales podían estar influyendo en los niveles de productividad de los países.

Metodología

Para la realización del presente estudio se elaboró un planteamiento cuantitativo basado en la estimación de un modelo de regresión lineal múltiple, con el objetivo de interpretar los factores del mercado laboral que impactan en la productividad y en el rendimiento económico de un país. Teniendo en cuenta que la variable dependiente del modelo es el PIB por persona empleada (GDP), esta se constituye como indicador de la productividad laboral.Las variables independientes incluidas en el análisis fueron seleccionadas por su relevancia en la estructura del mercado de trabajo.

Decripción de variables

  • Empleo a tiempo parcial: representa el porcentaje de trabajadores con jornadas laborales reducidas, asociado a flexibilidad laboral. Se seleccionó ya que permite evaluar si una mayor flexibilidad laboral se relaciona con mayores o menores niveles de productividad.

  • Trabajadores familiares: mide la proporción de personas que trabajan en negocios familiares sin remuneración formal, relacionado con niveles de informalidad. Se incluyó para determinar cómo afecta la informalidad laboral al rendimiento económico de un país.

  • Empleo en la industria: indica la participación del empleo en el sector industrial, asociado a actividades productivas estructuradas. Se eligió porque el sector industrial suele estar vinculado a una mayor productividad debido a la mecanización y especialización del trabajo.

  • Empleos totales: refleja la proporción total de personas empleadas dentro de la población. Se incorporó para controlar el efecto del tamaño del mercado laboral sobre la productividad.

  • Trabajo autónomo: representa el porcentaje de trabajadores independientes, comúnmente vinculado a economías con mayor informalidad. Se seleccionó para analizar si el trabajo por cuenta propia impulsa o limita la productividad laboral en comparación con el empleo asalariado.

Posteriormente, se llevó a cabo un análisis descriptivo de las variables donde se generaron diagramas de dispersión e histogramas. En la siguiente fase, se llevó a cabo un estudio de correlación con el objetivo de examinar la relación lineal entre las variables.

Ecuación del modelo

Con el propósito de explicar cómo se comporta el PIB por persona empleada con base a las variables elegidas, se estimó un modelo de regresión lineal múltiple. El modelo se representa de esta manera:

\[\begin{aligned} GDP_i = \beta_0 &+ \beta_1(Empleo\_a\_Tiempo\_Parcial_i) + \beta_2(Trabajadores\_familia_i) \\ &+ \beta_3(Empleos\_en\_Industria_i) + \beta_4(Empleos\_Totales_i) + \beta_5(Trabajo\_Autonomo_i) + \epsilon_i \end{aligned}\]

Por íltimo see examinaron los supuestos del modelo de regresión. Se utilizaron la prueba de Shapiro-Wilk y el gráfico Q-Q para examinar la normalidad de los residuos. Se constató la homocedasticidad a través de la prueba de Breusch-Pagan.

Base de datos

 # cogemos las variables de excel y filtramos y rodernamos
Datos_Trabajo <- read_excel("Base_de_Datos.xlsx")

Datos_2017 <- Datos_Trabajo %>%
  filter(Time == 2017) %>%
  select(Country_Name, Time, GDP, Empleos_en_Industria,family_workers,Empleos_Totales,
         Trabajo_Autonomo, Empleo_a_Tiempo_Parcial)

Datos_2017 <- Datos_2017 %>%
  rename(Trabajadores_familia = family_workers) #EJECUTAR

Datos_2017[Datos_2017 == ".."] <- NA

# Toco elegir uno pro uno r no los detectaba bien
Datos_2017 <- Datos_2017 %>%
  mutate(Region = case_when(
    Country_Name %in% c("Antigua and Barbuda", "Aruba", "Argentina", "Bahamas, The", "Barbados", "Belize",
                        "Bolivia", "Brazil", "Canada", "Cayman Islands", "Chile", "Colombia", "Costa Rica", 
                        "Cuba", "Curacao", "Dominica", "Dominican Republic", "Ecuador", "El Salvador", 
                        "Grenada", "Guatemala", "Guyana", "Haiti", "Honduras", "Jamaica", "Mexico", 
                        "Nicaragua", "Panama", "Paraguay", "Peru", "Puerto Rico", "Sint Maarten (Dutch part)", 
                        "St. Kitts and Nevis", "St. Lucia", "St. Martin (French part)", 
                        "St. Vincent and the Grenadines", "Suriname", "Trinidad and Tobago", 
                        "United States", "Uruguay", "Venezuela, RB", "Virgin Islands (U.S.)"
    ) ~ "América",
    
    Country_Name %in% c("Albania", "Andorra", "Austria", "Belarus", "Belgium", "Bosnia and Herzegovina", 
                        "Bulgaria", "Croatia", "Cyprus", "Czechia", "Denmark", "Estonia", "Faroe Islands", 
                        "Finland", "France", "Germany", "Gibraltar", "Greece", "Hungary", "Iceland", 
                        "Ireland", "Isle of Man", "Italy", "Kosovo", "Latvia", "Liechtenstein", 
                        "Lithuania", "Luxembourg", "Moldova", "Monaco", "Montenegro", "Netherlands", 
                        "North Macedonia", "Norway", "Poland", "Portugal", "Romania", "Russian Federation", 
                        "San Marino", "Serbia", "Slovak Republic", "Slovenia", "Spain", "Sweden", 
                        "Switzerland", "Turkiye", "Ukraine", "United Kingdom"
    ) ~ "Europa",
    
    Country_Name %in% c("Kazakhstan", "Kyrgyz Republic", "Tajikistan", "Uzbekistan") ~ "Asia Central",
    TRUE ~ "Otros"
  ))

# por recomendacion de la monitoria se eliminan las filas de los paises que no aportan datos

paises_a_quitar <- c("Andorra", "Antigua and Barbuda", "Aruba", "Bermuda", 
                     "British Virgin Islands", "Cayman Islands", "Curacao", 
                     "Dominica", "Faroe Islands", "Gibraltar", "Greenland", 
                     "Grenada", "Isle of Man","Kosovo", "Liechtenstein", "Monaco", 
                     "San Marino", "Sint Maarten (Dutch part)", "St. Kitts and Nevis", 
                     "Turks and Caicos Islands", "St. Martin (French part)")

Datos_2017 <- Datos_2017 %>%
  filter(!(Country_Name %in% paises_a_quitar))
#Pasamos las variables para que las detecte como numeros
Datos_2017$GDP <- as.numeric(Datos_2017$GDP)
Datos_2017$Empleo_a_Tiempo_Parcial<- as.numeric(Datos_2017$Empleo_a_Tiempo_Parcial)
Datos_2017$Trabajadores_familia <- as.numeric(Datos_2017$Trabajadores_familia)
Datos_2017$Empleos_en_Industria <- as.numeric(Datos_2017$Empleos_en_Industria)
Datos_2017$Empleos_Totales<- as.numeric(Datos_2017$Empleos_Totales)
Datos_2017$Trabajo_Autonomo <- as.numeric(Datos_2017$Trabajo_Autonomo)
# por recomendacion de la monitora la puse al final la del pib
Datos_ordenados <- Datos_2017 %>%
  select(Country_Name, Time, Empleos_en_Industria, Trabajadores_familia,
         Empleos_Totales, Trabajo_Autonomo, Empleo_a_Tiempo_Parcial,
         Region, GDP)

tabla_final <- Datos_ordenados %>%
  gt() %>%
  tab_header(
    title = md("**Base de datos de estructuras laborales y PIB (2017)**"),
    subtitle = md("Países seleccionados – Datos del Banco Mundial")
  ) %>%
  cols_label(
    Country_Name = "País",
    Time = "Año",
    Empleos_en_Industria = "Empleo en industria (%)",
    Trabajadores_familia = "Trabajadores familiares (%)",
    Empleos_Totales = "Empleo total (miles)",
    Trabajo_Autonomo = "Trabajo autónomo (%)",
    Empleo_a_Tiempo_Parcial = "Empleo a tiempo parcial (%)",
    Region = "Región",
    GDP = "PIB (millones USD)"
  ) %>%
  fmt_number(
    columns = c(Empleos_en_Industria, Trabajadores_familia, 
                Trabajo_Autonomo, Empleo_a_Tiempo_Parcial),
    decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Empleos_Totales, decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = GDP, decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Time, decimals = 0, use_seps = FALSE
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")
    ),locations = cells_column_labels(everything())
  ) %>%
  tab_style(style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(Country_Name ~ px(180), Region ~ px(100), everything() ~ px(90)
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%

  tab_options(
    table.width = pct(100),
    table.font.size = "small",
    heading.title.font.size = "large",
    heading.subtitle.font.size = "small",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA"
  )

htmltools::div(
  style = "width: 100%; height: 400px; overflow: auto;",
  tabla_final
)
Base de datos de estructuras laborales y PIB (2017)
Países seleccionados – Datos del Banco Mundial
País Año Empleo en industria (%) Trabajadores familiares (%) Empleo total (miles) Trabajo autónomo (%) Empleo a tiempo parcial (%) Región PIB (millones USD)
Albania 2017 19,38 22,68 2,99 57,10 23,74 Europa 31.065,01
Argentina 2017 22,44 0,59 3,83 25,34 37,33 América 58.316,73
Armenia 2017 16,71 2,32 1,22 40,34 32,96 Otros 33.386,14
Austria 2017 24,92 1,46 4,65 12,38 45,39 Europa 109.175,74
Azerbaijan 2017 14,37 33,48 13,16 68,38 18,90 Otros 29.098,91
Bahamas, The 2017 14,84 0,28 5,99 15,03 NA América 71.065,83
Barbados 2017 19,34 0,04 0,82 17,07 11,36 América 32.615,33
Belarus 2017 30,77 0,03 0,89 4,37 16,83 Europa 36.253,04
Belgium 2017 20,76 0,73 4,09 14,29 36,75 Europa 121.545,18
Belize 2017 15,70 3,29 3,38 33,22 25,08 América 17.280,98
Bolivia 2017 20,03 17,38 5,33 68,86 NA América 18.606,56
Bosnia and Herzegovina 2017 31,70 3,94 5,17 24,56 13,05 Europa 48.030,80
Brazil 2017 20,48 2,38 4,72 32,30 25,53 América 34.114,09
Bulgaria 2017 29,90 0,78 3,65 11,90 11,30 Europa 48.315,02
Canada 2017 19,53 0,13 4,50 15,24 40,90 América 93.246,73
Channel Islands 2017 25,67 1,08 4,58 14,81 NA Otros NA
Chile 2017 22,74 1,12 4,45 27,43 30,02 América 54.778,48
Colombia 2017 19,42 3,65 4,06 51,10 25,55 América 29.529,61
Costa Rica 2017 18,45 1,98 4,08 24,31 23,57 América 48.521,39
Croatia 2017 26,42 1,32 4,83 12,37 23,25 Europa 69.255,12
Cuba 2017 17,03 1,50 5,53 26,90 NA América NA
Cyprus 2017 17,05 0,83 2,09 13,19 29,72 Europa 61.190,06
Czechia 2017 38,06 0,47 3,14 17,12 28,19 Europa 78.461,64
Denmark 2017 18,94 0,39 3,20 8,34 43,51 Europa 114.051,19
Dominican Republic 2017 19,43 1,88 3,42 43,97 26,59 América 39.712,52
Ecuador 2017 18,55 12,61 2,98 49,29 34,20 América 24.746,98
El Salvador 2017 21,89 6,99 3,90 40,24 23,02 América 20.840,68
Estonia 2017 29,96 0,21 4,67 10,20 26,11 Europa 67.292,53
Finland 2017 22,16 0,42 3,93 13,18 42,88 Europa 105.591,72
France 2017 20,41 0,34 4,20 11,61 39,51 Europa 107.997,74
Georgia 2017 13,17 19,96 1,99 51,64 39,93 Otros 29.636,96
Germany 2017 27,40 0,36 4,36 10,20 40,79 Europa 104.081,01
Greece 2017 15,41 3,93 7,31 34,07 25,77 Europa 81.541,93
Guatemala 2017 19,00 9,64 2,80 40,46 NA América 21.556,57
Guyana 2017 24,92 4,37 5,84 34,57 NA América 35.922,52
Haiti 2017 6,72 21,83 0,73 73,70 NA América 8.363,45
Honduras 2017 20,68 8,90 11,59 52,39 33,08 América 13.521,37
Hungary 2017 31,52 0,28 4,63 10,34 23,54 Europa 63.885,41
Iceland 2017 17,48 0,39 3,84 11,98 37,31 Europa 93.291,37
Ireland 2017 18,84 0,63 4,55 15,45 37,78 Europa 171.519,15
Italy 2017 26,00 1,28 6,16 23,20 34,80 Europa 108.661,89
Jamaica 2017 15,70 0,90 3,59 39,37 11,06 América 21.968,11
Kazakhstan 2017 20,65 0,11 1,45 24,44 8,54 Asia Central 52.372,73
Kyrgyz Republic 2017 23,15 6,90 1,60 35,57 23,82 Asia Central 13.302,43
Latvia 2017 23,31 0,72 4,68 12,66 19,35 Europa 61.167,50
Lithuania 2017 25,13 0,88 2,44 12,01 23,83 Europa 70.304,89
Luxembourg 2017 10,76 0,72 3,57 9,85 32,24 Europa 244.475,33
Mexico 2017 26,01 4,70 4,56 31,45 25,40 América 47.099,08
Moldova 2017 16,65 3,77 0,34 34,82 NA Europa 34.198,91
Montenegro 2017 17,08 2,92 8,59 21,97 7,78 Europa 52.470,95
Netherlands 2017 16,52 0,33 3,98 16,74 55,62 Europa 108.120,85
Nicaragua 2017 17,69 8,26 5,67 42,98 NA América 13.681,25
North Macedonia 2017 30,55 6,34 4,49 23,72 10,47 Europa 44.042,10
Norway 2017 19,41 0,09 1,78 6,52 47,64 Europa 127.372,23
Panama 2017 18,55 4,65 2,63 35,08 26,22 América 69.735,83
Paraguay 2017 20,09 7,46 5,34 43,93 29,71 América 26.746,98
Peru 2017 15,65 13,97 3,87 55,01 34,19 América 22.902,03
Poland 2017 31,67 2,61 4,04 20,42 22,78 Europa 65.797,02
Portugal 2017 24,74 0,46 4,75 16,99 29,70 Europa 71.237,51
Puerto Rico 2017 15,68 0,12 6,36 15,44 NA América 115.313,71
Romania 2017 30,12 8,17 1,05 26,31 13,76 Europa 61.460,44
Russian Federation 2017 26,97 0,37 1,35 6,62 NA Europa 53.770,53
Serbia 2017 25,30 5,78 3,32 30,57 22,07 Europa 42.261,76
Slovak Republic 2017 37,16 0,10 3,20 15,26 26,20 Europa 64.470,19
Slovenia 2017 33,25 2,80 3,82 14,58 32,22 Europa 78.576,98
Spain 2017 20,06 0,46 5,11 16,49 30,42 Europa 96.340,92
St. Lucia 2017 16,34 0,21 5,95 26,84 10,71 América 32.282,89
St. Vincent and the Grenadines 2017 19,99 1,27 5,15 26,04 NA América 32.522,42
Suriname 2017 24,43 1,64 1,86 14,52 NA América 48.729,60
Sweden 2017 18,16 0,25 3,61 9,86 46,84 Europa 104.942,72
Switzerland 2017 20,52 2,05 5,82 14,86 44,83 Europa 124.589,91
Tajikistan 2017 15,44 17,00 0,01 32,26 NA Asia Central 13.152,01
Trinidad and Tobago 2017 27,07 0,44 5,37 24,09 NA América 59.980,08
Turkiye 2017 26,54 11,12 4,54 32,74 21,30 Europa 79.059,84
Turkmenistan 2017 38,73 3,01 2,74 33,87 NA Otros 45.892,44
Ukraine 2017 24,30 0,26 0,88 15,71 15,27 Europa 26.143,28
United Kingdom 2017 18,26 0,36 2,39 15,37 41,41 Europa 93.545,16
United States 2017 19,73 0,05 2,28 6,25 26,55 América 124.651,65
Uruguay 2017 19,74 0,77 4,06 28,05 NA América 49.184,53
Uzbekistan 2017 23,05 7,40 0,00 36,21 NA Asia Central 16.995,59
Venezuela, RB 2017 17,75 1,93 1,87 39,50 NA América NA
Virgin Islands (U.S.) 2017 19,16 0,32 3,39 6,56 NA América NA
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Resultados estadiísticos

Estadísticas descriptivas variables cuantitativas

mediana_pib <- median(Datos_2017$GDP, na.rm = TRUE)
media_pib   <- mean(Datos_2017$GDP, na.rm = TRUE)
n_obs       <- sum(!is.na(Datos_2017$GDP))

# la paleta de aqui esta en la pagina, queda linda
paleta <- list(
  primary   = "#2C7BB6",
  secondary = "#7FCDBB",
  light     = "#A8D5BA",
  dark      = "#1A4D6B",
  bg        = "#F9F9F9",
  accent    = "#E6F2F0")

hist_data <- hist(Datos_2017$GDP, breaks = 20, plot = FALSE)
df_hist <- data.frame(
  bin_mid   = hist_data$mids,
  count     = hist_data$counts,
  bin_start = hist_data$breaks[-length(hist_data$breaks)],
  bin_end   = hist_data$breaks[-1])

fig_hist_pib <- plot_ly(
  data = df_hist,
  x = ~bin_mid,
  y = ~count,
  type = "bar",
  marker = list(color = ~bin_mid,
    colorscale = list(c(0, paleta$light), c(0.5, paleta$secondary), c(1, paleta$primary)),
    line = list(color = "white", width = 1),
    colorbar = list(title = "PIB (millones USD)")),
  hovertemplate = "PIB: %{x:$,.0f} millones<br>Frecuencia: %{y} países<extra></extra>"
) %>%
  layout(
    title = list(
      text = "<b>Distribución del PIB en 2017</b><br><sup>Frecuencia de países según nivel de producto interno bruto</sup>",
      font = list(family = "Arial", size = 18, color = paleta$dark),
      x = 0.05
    ),
    xaxis = list(
      title = list(text = "PIB (millones USD)", font = list(family = "Arial", size = 14, color = paleta$dark)),
      tickformat = "$,.0f", gridcolor = paleta$light, zerolinecolor = paleta$dark
    ),
    yaxis = list(
      title = list(text = "Frecuencia (número de países)", font = list(family = "Arial", size = 14, color = paleta$dark)), gridcolor = paleta$light, zerolinecolor = paleta$dark
    ),
    shapes = list(
      list(type = "line", x0 = mediana_pib, x1 = mediana_pib, y0 = 0, y1 = 1, yref = "paper",
           line = list(color = paleta$secondary, dash = "dash", width = 2)),
      list(type = "line", x0 = media_pib, x1 = media_pib, y0 = 0, y1 = 1, yref = "paper",
           line = list(color = paleta$dark, width = 2))
    ),
    plot_bgcolor = paleta$bg,
    paper_bgcolor = "white",
    font = list(family = "Arial", size = 12),
    margin = list(l = 80, r = 50, t = 100, b = 100),
    hoverlabel = list(bgcolor = paleta$dark, font = list(color = "white", family = "Arial")),
    annotations = list(
      list(x = mediana_pib, y = 1, yref = "paper",
           text = paste("Mediana:", scales::dollar(mediana_pib, accuracy = 1)),
           showarrow = FALSE, font = list(family = "Arial", size = 11, color = paleta$secondary),
           bgcolor = "white", bordercolor = paleta$secondary, borderpad = 4, borderwidth = 1),
      list(x = media_pib, y = 0.9, yref = "paper",
           text = paste("Media:", scales::dollar(media_pib, accuracy = 1)),
           showarrow = FALSE, font = list(family = "Arial", size = 11, color = paleta$dark),
           bgcolor = "white", bordercolor = paleta$dark, borderpad = 4, borderwidth = 1),
      list(x = 1, y = -0.15, xref = "paper", yref = "paper", xanchor = "right",
           text = paste0("Fuente: Elaboración propia con datos del Banco Mundial (2017) | N = ", scales::comma(n_obs), " países"),
           showarrow = FALSE, font = list(family = "Arial", size = 10, color = paleta$secondary)))
  ) %>%
  config(
    displayModeBar = FALSE, 
    displaylogo = FALSE)

fig_hist_pib

El histograma del PIB por persona empleada revela una distribución asimétrica positiva, característica de un entorno global con alta disparidad económica, mientras la mediana se sitúa en $53,121 USD, la media asciende a $62,140 USD, confirmando que el promedio es impulsado por un pequeño grupo de países con productividad extremadamente alta (valores atípicos de hasta $244,475 USD).

Según el Banco Mundial (2017), esto refleja que una fracción mínima de la población capturó la mayor parte del crecimiento global. Asimismo, el DNP (2017) señala que la concentración en niveles medio-bajos sugiere que el trabajo autónomo y el empleo familiar predominan en economías con alta informalidad, limitando así el potencial de productividad frente a los países desarrollados.

# le cambie el nombre a las variables para que no se vieran feas 
datos_boxplot <- Datos_2017 %>%
  select(Empleos_en_Industria, Trabajo_Autonomo,
         Empleo_a_Tiempo_Parcial, Trabajadores_familia, Empleos_Totales) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "Valor") %>%
  mutate(Variable = case_match(
    Variable,
    "Empleos_en_Industria"   ~ "Empleo en industria (%)",
    "Trabajo_Autonomo"       ~ "Trabajo autónomo (%)",
    "Empleo_a_Tiempo_Parcial"~ "Empleo a tiempo parcial (%)",
    "Trabajadores_familia"   ~ "Trabajadores familiares (%)",
    "Empleos_Totales"        ~ "Empleo total (miles)"))

stats_box <- datos_boxplot %>%
  group_by(Variable) %>%
  summarise(
    mediana = median(Valor, na.rm = TRUE),
    q1 = quantile(Valor, 0.25, na.rm = TRUE),
    q3 = quantile(Valor, 0.75, na.rm = TRUE),
    iqr = IQR(Valor, na.rm = TRUE),
    n = sum(!is.na(Valor))
  ) %>%
  ungroup()

paleta <- list(
  primary   = "#2C7BB6",
  secondary = "#7FCDBB",
  light     = "#A8D5BA",
  dark      = "#1A4D6B",
  bg        = "#F9F9F9",
  accent    = "#E6F2F0")

variables_unicas <- unique(datos_boxplot$Variable)
n_vars <- length(variables_unicas)

fig_box <- plot_ly()

for (i in seq_along(variables_unicas)) {
  var_name <- variables_unicas[i]
  fill_color <- colorRampPalette(c(paleta$light, paleta$primary))(n_vars)[i]
  
  fig_box <- fig_box %>%
    add_boxplot(data = datos_boxplot %>% filter(Variable == var_name),
      y = ~Valor, name = var_name, boxpoints = "outliers", marker = list(
        color = paleta$dark, size = 4, opacity = 0.6, outliercolor = paleta$dark,
        outlierwidth = 1),
      line = list(
        color = paleta$dark, width = 1.5),
      fillcolor = fill_color, width = 0.6, whiskerwidth = 0.5)}

annotations_list <- list()
for (i in seq_along(variables_unicas)) {
  var_name <- variables_unicas[i]
  med <- stats_box$mediana[stats_box$Variable == var_name]
  annotations_list[[i]] <- list(
    x = i - 1,   
    y = med,
    text = paste("Mediana:", round(med, 2)),
    showarrow = FALSE,
    font = list(family = "Arial", size = 10, color = paleta$dark),
    bgcolor = "white",
    bordercolor = paleta$primary,
    borderpad = 3,
    borderwidth = 1,
    xanchor = "center",
    yanchor = "bottom")}

annotations_list[[n_vars + 1]] <- list(
  x = 1,
  y = 1.05,
  xref = "paper",
  yref = "paper",
  text = paste0("Total observaciones por variable: N = ", max(stats_box$n)),
  showarrow = FALSE,
  font = list(family = "Arial", size = 10, color = paleta$secondary),
  bgcolor = "rgba(255,255,255,0.8)",
  bordercolor = paleta$light,
  borderwidth = 1,
  borderpad = 4,
  xanchor = "right")

annotations_list[[n_vars + 2]] <- list(
  x = 1,
  y = -0.1,
  xref = "paper",
  yref = "paper",
  text = "Fuente: Elaboración propia con datos del Banco Mundial (2017).",
  showarrow = FALSE,
  font = list(family = "Arial", size = 10, color = paleta$dark),
  xanchor = "right")

fig_box <- fig_box %>%
  layout(
    title = list(
      text = "<b>Distribución de las variables de empleo</b><br><sup>Comparación de estructuras laborales en 2017</sup>",
      font = list(family = "Arial", size = 18, color = paleta$dark),
      x = 0.05),
    
    xaxis = list(
      title = "",
      tickangle = -30,
      tickfont = list(family = "Arial", size = 11, color = paleta$dark),
      gridcolor = paleta$light,
      categoryorder = "array",
      categoryarray = variables_unicas),
    
    yaxis = list(
      title = list(
        text = "Valor (%) o miles",
        font = list(family = "Arial", size = 13, color = paleta$dark)),
      
      gridcolor = paleta$light,
      zerolinecolor = paleta$dark,
      zerolinewidth = 1),
    
    plot_bgcolor = paleta$bg,
    paper_bgcolor = "white",
    font = list(family = "Arial", size = 12),
    margin = list(l = 80, r = 50, t = 100, b = 100),
    hoverlabel = list(
      bgcolor = paleta$dark,
      font = list(color = "white", family = "Arial")),
    
    showlegend = FALSE,
    boxmode = "group",
    annotations = annotations_list
  ) %>%
  config(
    displayModeBar = FALSE, 
    displaylogo = FALSE)
fig_box

Se observa que el empleo a tiempo parcial y el trabajo autónomo presentan la mayor dispersión, con medianas de alrededor de 26.22% y 23.9% respectivamente. Esta variabilidad sugiere que no existe un estándar global en estas modalidades. Por el contrario, la variable de empleos totales muestra una distribución notablemente más homogénea con una mediana de 3.92 (miles). Esta estabilidad indica que independientemente del nivel de ingresos, el volumen de participación laboral mantiene un comportamiento proporcionalmente similar entre las naciones analizadas.

Un hallazgo crítico es la presencia de valores atípicos en dimensiones como los trabajadores familiares y el trabajo autónomo. La existencia de países con niveles de trabajo autónomo superiores al 70% refleja realidades que, como señala el DNP (2017), están fuertemente sesgadas hacia la informalidad, estos puntos no representan errores de medición sino realidades socioeconómicas de alta informalidad. Según Fox y Weisberg (2019), incluir estos casos es clave para entender las variaciones extremas en la productividad, permitiendo que el modelo de regresión capture de manera más completa la diversidad del mercado laboral global.

#los codgios que ven al inicio son apra acomodar en una tabla, usenlo de la misma manera

# aqui puse lo que ceistian mando el grupo de hacer las medidas una por una 
Tabla_summary <- data.frame(
  Variable = c("PIB (millones USD)", 
               "Empleo a tiempo parcial (%)", 
               "Trabajadores familiares (%)", 
               "Empleo en industria (%)", 
               "Empleo total (miles)", 
               "Trabajo autónomo (%)"),
  Min = c(min(Datos_2017$GDP, na.rm = TRUE),
          min(Datos_2017$Empleo_a_Tiempo_Parcial, na.rm = TRUE),
          min(Datos_2017$Trabajadores_familia, na.rm = TRUE),
          min(Datos_2017$Empleos_en_Industria, na.rm = TRUE),
          min(Datos_2017$Empleos_Totales, na.rm = TRUE),
          min(Datos_2017$Trabajo_Autonomo, na.rm = TRUE)),
  Media = c(mean(Datos_2017$GDP, na.rm = TRUE),
            mean(Datos_2017$Empleo_a_Tiempo_Parcial, na.rm = TRUE),
            mean(Datos_2017$Trabajadores_familia, na.rm = TRUE),
            mean(Datos_2017$Empleos_en_Industria, na.rm = TRUE),
            mean(Datos_2017$Empleos_Totales, na.rm = TRUE),
            mean(Datos_2017$Trabajo_Autonomo, na.rm = TRUE)),
  Mediana = c(median(Datos_2017$GDP, na.rm = TRUE),
              median(Datos_2017$Empleo_a_Tiempo_Parcial, na.rm = TRUE),
              median(Datos_2017$Trabajadores_familia, na.rm = TRUE),
              median(Datos_2017$Empleos_en_Industria, na.rm = TRUE),
              median(Datos_2017$Empleos_Totales, na.rm = TRUE),
              median(Datos_2017$Trabajo_Autonomo, na.rm = TRUE)),
  Max = c(max(Datos_2017$GDP, na.rm = TRUE),
          max(Datos_2017$Empleo_a_Tiempo_Parcial, na.rm = TRUE),
          max(Datos_2017$Trabajadores_familia, na.rm = TRUE),
          max(Datos_2017$Empleos_en_Industria, na.rm = TRUE),
          max(Datos_2017$Empleos_Totales, na.rm = TRUE),
          max(Datos_2017$Trabajo_Autonomo, na.rm = TRUE)))

# la tabla para que no se enreden 
tabla_resumen <- Tabla_summary %>%
  gt() %>%
  tab_header(
    title = md("**Resumen estadístico de las variables (2017)**"),
    subtitle = md("Medidas de tendencia central y dispersión – Datos del Banco Mundial")
  ) %>%
  cols_label(
    Variable = "Variable",
    Min = "Mínimo",
    Media = "Media",
    Mediana = "Mediana",
    Max = "Máximo"
  ) %>%
  fmt_number(
    columns = c(Min, Media, Mediana, Max),
    rows = Variable == "PIB (millones USD)",
    decimals = 2,
    sep_mark = ".",
    dec_mark = ","
  ) %>%
  fmt_number(
    columns = c(Min, Media, Mediana, Max),
    rows = Variable == "Empleo total (miles)",
    decimals = 2,
    sep_mark = ".",
    dec_mark = ","
  ) %>%
  fmt_number(
    columns = c(Min, Media, Mediana, Max),
    rows = Variable %in% c("Empleo a tiempo parcial (%)", "Trabajadores familiares (%)", 
                           "Industria (%)", "Trabajo autónomo (%)"),
    decimals = 2,
    sep_mark = ".",
    dec_mark = ","
  ) %>%
  tab_style(style = list(cell_fill(color = "#2C3E50"),cell_text(color = "white",
                                                                weight = "bold")),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(
    Variable ~ px(210), Min ~ px(120),Media ~ px(120), Mediana ~ px(120), Max ~ px(120)
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(100),
    table.font.size = "small",
    heading.title.font.size = "large",
    heading.subtitle.font.size = "small",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_resumen)
Resumen estadístico de las variables (2017)
Medidas de tendencia central y dispersión – Datos del Banco Mundial
Variable Mínimo Media Mediana Máximo
PIB (millones USD) 8.363,45 62.140,12 53.120,74 244.475,33
Empleo a tiempo parcial (%) 7,78 28,20 26,38 55,62
Trabajadores familiares (%) 0,03 3,99 1,30 33,48
Empleo en industria (%) 6.72 21.82012 20.075 38.73
Empleo total (miles) 0,00 3,89 3,92 13,16
Trabajo autónomo (%) 4,37 26,02 23,90 73,70
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Las medidas de tendencia central consolidan la evidencia de un mercado laboral global heterogéneo. El PIB presenta una brecha profunda, con una media de $62,140.12 USD que se ve desplazada por valores máximos de hasta $244,475.33 USD, ratificando la disparidad de ingresos entre las naciones que solo un pequeño grupo concentra cifras cercanas al máximo y por el contrario, el valor mínimo de $8,363.45 es mucho más representativo de la realidad de numerosos países donde predomina el trabajo autónomo.

En cuanto a las estructuras de empleo, el trabajo autónomo y el empleo a tiempo parcial muestran las medianas más altas de 23.90% y 26.38% respectivamente, lo que indica que una parte significativa de la fuerza laboral global no se encuentra en empleos industriales tradicionales. Según el DNP (2017), estos valores máximos específicamente el 73.70% en empleo autónomo y el 33.48% en empleo familiar constituyen indicadores críticos de las barreras estructurales que limitan la productividad en las economías en desarrollo.

# Desviaciones en una sola tabla para mejor comodidad visual
Tabla_desviaciones <- data.frame(
  Variable = c("PIB (millones USD)", 
               "Empleo a tiempo parcial (%)", 
               "Trabajadores familiares (%)", 
               "Empleo en industria (%)", 
               "Empleo total (miles)", 
               "Trabajo autónomo (%)"),
  Desviacion_Estandar = c(
    sd(Datos_2017$GDP, na.rm = TRUE),
    sd(Datos_2017$Empleo_a_Tiempo_Parcial, na.rm = TRUE),
    sd(Datos_2017$Trabajadores_familia, na.rm = TRUE),
    sd(Datos_2017$Empleos_en_Industria, na.rm = TRUE),
    sd(Datos_2017$Empleos_Totales, na.rm = TRUE),
    sd(Datos_2017$Trabajo_Autonomo, na.rm = TRUE)))

tabla_desviaciones <- Tabla_desviaciones %>%
  gt() %>%
  tab_header(
    title = md("**Desviación estándar por variables (2017)**"),
    subtitle = md("Medida de dispersión de las estructuras laborales y PIB")
  ) %>%
  cols_label(
    Variable = "Variable",
    Desviacion_Estandar = "Desviación estándar"
  ) %>%
  fmt_number(columns = Desviacion_Estandar, rows = Variable == "PIB (millones USD)", decimals = 2,
    sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Desviacion_Estandar, rows = Variable == "Empleo total (miles)",
    decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Desviacion_Estandar,
    rows = Variable %in% c("Empleo a tiempo parcial (%)", "Trabajadores familiares (%)", 
                           "Industria (%)", "Trabajo autónomo (%)"),
    decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#2C3E50"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(
    Variable ~ px(210), Desviacion_Estandar ~ px(150)
  ) %>%
  cols_align(
    align = "center", columns = Desviacion_Estandar
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(70),
    table.font.size = "small",
    heading.title.font.size = "large",
    heading.subtitle.font.size = "small",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_desviaciones
)
Desviación estándar por variables (2017)
Medida de dispersión de las estructuras laborales y PIB
Variable Desviación estándar
PIB (millones USD) 40.836,28
Empleo a tiempo parcial (%) 10,95
Trabajadores familiares (%) 6,16
Empleo en industria (%) 6.04504
Empleo total (miles) 2,16
Trabajo autónomo (%) 15,76
Fuente: Elaboración propia con datos del Banco Mundial (2017).

El PIB cuenta con una desviación estándar amplia de $40,836.28, confirmando que los datos están muy dispersos respecto al promedio. En las variables de empleo, el trabajo autónomo destaca con una desviación de 15.76, reflejando realidades contrastantes entre países con baja y alta informalidad. Por el contrario, variables como el empleo en la industria con una de 6.04 y el empleo total de 2.16 muestran las desviaciones más bajas, sugiriendo un comportamiento más estable y predecible a nivel global.

Diagramas de dispersión

#puse la paleta aqui para que no tengamos qu volver a escribir lo msim varias veces 
paleta <- list(
  primary   = "#2C7BB6",
  secondary = "#7FCDBB",
  light     = "#A8D5BA",
  dark      = "#1A4D6B",
  bg        = "#F9F9F9",
  accent    = "#E6F2F0"
)

tema_personalizado <- function() {
  theme_minimal() +
  theme(
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = paleta$bg, color = NA),
    panel.grid.major = element_line(color = paleta$light, linewidth = 0.3),
    panel.grid.minor = element_line(color = paleta$light, linewidth = 0.15),
    plot.title = element_text(color = paleta$dark, size = 14, face = "bold", margin = margin(b = 10)),
    plot.subtitle = element_text(color = paleta$secondary, size = 10, margin = margin(b = 15)),
    axis.title = element_text(color = paleta$dark, size = 11, face = "bold"),
    axis.text = element_text(color = paleta$dark, size = 9),
    axis.ticks = element_line(color = paleta$light),
    axis.line = element_line(color = paleta$light, linewidth = 0.3),
    plot.caption = element_text(color = paleta$secondary, size = 8, hjust = 1, margin = margin(t = 10)),
    plot.margin = margin(15, 15, 15, 15)
  )
}

#este es del parcial
ggplot(Datos_2017, aes(x = as.numeric(Empleo_a_Tiempo_Parcial), y = as.numeric(GDP))) +
  geom_point(color = paleta$primary, alpha = 0.65, size = 2.5) +
  geom_smooth(method = "lm", color = paleta$secondary, se = TRUE,
              fill = paleta$accent, alpha = 0.3, linewidth = 1.2) +
  labs(
    title = "Relación entre Empleo a tiempo parcial y PIB",
    subtitle = "Datos del Banco Mundial (2017)",
    x = "Empleo a tiempo parcial (%)",
    y = "PIB (millones USD)",
    caption = "Fuente: Elaboración propia con datos del Banco Mundial (2017)"
  ) +
  tema_personalizado()

El diagrama muestra una tendencia lineal positiva, sugiriendo que niveles más altos de empleo a tiempo parcial suelen coincidir con una mayor productividad económica, indica que en las economías analizadas, la flexibilidad laboral bajo esta modalidad no actúa como un freno, sino que parece estar integrada en estructuras de alta eficiencia.

Sin embargo, la dispersión aumenta notablemente hacia el final de la recta, como se observa en la “nube” de puntos superior, existen países que alcanzan un PIB elevado con niveles de empleo parcial muy distintos, lo que confirma que esta variable es un factor contribuyente, pero no el único determinante.

#este esl de las trabajdores que van por familia
ggplot(Datos_2017, aes(x = as.numeric(Trabajadores_familia), y = as.numeric(GDP))) +
  geom_point(color = paleta$primary, alpha = 0.65, size = 2.5) +
  geom_smooth(method = "lm", color = paleta$secondary, se = TRUE,
              fill = paleta$accent, alpha = 0.3, linewidth = 1.2) +
  labs(
    title = "Relación entre Trabajadores familiares y PIB",
    subtitle = "Datos del Banco Mundial (2017)",
    x = "Trabajadores familiares (%)",
    y = "PIB (millones USD)",
    caption = "Fuente: Elaboración propia con datos del Banco Mundial (2017)"
  ) +
  tema_personalizado()

Este diagrama revela una tendencia lineal negativa. Se observa que a medida que aumenta el porcentaje de trabajadores familiares en la estructura laboral, el nivel de PIB tiende a disminuir de manera notable. Este comportamiento sugiere que una alta dependencia de esta modalidad de empleo está vinculada a economías con menor grado de industrialización y mayores niveles de informalidad. La mayor concentración de puntos se encuentra cerca del eje vertical donde se ubican los países con los niveles de PIB más altos, siendo los más industrializados. Por el contrario, aquellos países que superan el 10% o 20% de trabajadores familiares muestran una producción económica considerablemente baja, lo que permite identificar a esta variable como un posible freno o indicador de debilidad en la productividad nacional del país.

#el de los trabajos en la industria
ggplot(Datos_2017, aes(x = as.numeric(Empleos_en_Industria), y = as.numeric(GDP))) +
  geom_point(color = paleta$primary, alpha = 0.65, size = 2.5) +
  geom_smooth(method = "lm", color = paleta$secondary, se = TRUE,
              fill = paleta$accent, alpha = 0.3, linewidth = 1.2) +
  labs(
    title = "Relación entre Empleo en industria y PIB",
    subtitle = "Datos del Banco Mundial (2017)",
    x = "Empleo en industria (%)",
    y = "PIB (millones USD)",
    caption = "Fuente: Elaboración propia con datos del Banco Mundial (2017)"
  ) +
  tema_personalizado()

Este diagrama presenta una tendencia casi nula, representada por una línea de ajuste prácticamente horizontal indicando que el porcentaje de empleo en la industria no es un predictor determinante del nivel de PIB en esta muestra global. Se observa una alta concentración de países con un nivel industrial de entre el 15% y 25%, pero con resultados económicos radicalmente opuestos sugieriendo que la industrialización por sí sola no garantiza la riqueza si no se traduce en alta productividad. La baja inclinación de la recta y la dispersión aleatoria de los puntos demuestran que, en el contexto actual, la industria es un factor estándar que no explica la brecha económica con la misma claridad que lo hacen el empleo informal o el trabajo autónomo.

# el total d los empleos
ggplot(Datos_2017, aes(x = as.numeric(Empleos_Totales), y = as.numeric(GDP))) +
  geom_point(color = paleta$primary, alpha = 0.65, size = 2.5) +
  geom_smooth(method = "lm", color = paleta$secondary, se = TRUE,
              fill = paleta$accent, alpha = 0.3, linewidth = 1.2) +
  labs(
    title = "Relación entre Empleo total y PIB",
    subtitle = "Datos del Banco Mundial (2017)",
    x = "Empleo total (miles)",
    y = "PIB (millones USD)",
    caption = "Fuente: Elaboración propia con datos del Banco Mundial (2017)"
  ) +
  tema_personalizado()

Este diagrama presenta una tendencia lineal levemente positiva, pero con una pendiente tan baja que sugiere una relación débil entre el volumen de personas que se encuentran trabajando y la riqueza que se posee. La mayoría de los países se agrupan por detrás de los 5,000 empleos, mostrando niveles de PIB radicalmente opuestoo, esto indica que el tamaño bruto de la fuerza laboral no es un predictor del éxito económico, donde la alta dispersión de los puntos demuestra que la productividad depende más de la estructura y eficiencia del trabajo que de la cantidad de trabajadores con la que se cuenta.

# y el de Trabajo autonomo
ggplot(Datos_2017, aes(x = as.numeric(Trabajo_Autonomo), y = as.numeric(GDP))) +
  geom_point(color = paleta$primary, alpha = 0.65, size = 2.5) +
  geom_smooth(method = "lm", color = paleta$secondary, se = TRUE,
              fill = paleta$accent, alpha = 0.3, linewidth = 1.2) +
  labs(
    title = "Relación entre Trabajo autónomo y PIB",
    subtitle = "Datos del Banco Mundial (2017)",
    x = "Trabajo autónomo (%)",
    y = "PIB (millones USD)",
    caption = "Fuente: Elaboración propia con datos del Banco Mundial (2017)"
  ) +
  tema_personalizado()

Este diagrama revela una fuerte tendencia lineal negativa,siendo una de las relaciones más determinantes del estudio. Se observa que a medida que el porcentaje de trabajo autónomo aumenta, el nivel de PIB disminuye de manera drástica, sugiriendo que una estructura laboral basada en el trabajo autónomo actúa como una barrera para la acumulación de riqueza nacional, vinculando la alta dependencia de esta modalidad con economías de baja productividad.

Es notable la concentración de países con PIB elevado en niveles de trabajo autónomo inferiores al 20%. Por el contrario, la caída en los ingresos es constante y se evidencia enque los países con más del 50% de su fuerza laboral en esta categoría difícilmente superan niveles básicos de producción. Según el Banco Mundial (2017), estos niveles se sitúan en el rango de ingresos medios-bajos, con un promedio inferior a los $3,955 USD per cápita, lo que ratifica que la alta informalidad impide a estas naciones alcanzar los umbrales de productividad necesarios para el desarrollo económico superior.

Como sustentan Fox y Weisberg (2019), la alta variabilidad observada en estos diagramas refleja las profundas desigualdades estructurales a nivel global. El uso de líneas de tendencia permite confirmar que, mientras el empleo autónomo y familiar presentan una relación inversa crítica con el desarrollo, la industria y el empleo total muestran comportamientos menos determinantes para explicar la riqueza nacional.

Estadísticas descriptivas variable categórica

# Tabla de resumen por región con la misma estructura que las tablas anteriores

# el resumen en tabla creo que queda bien para el analisis
resumen_region <- Datos_2017 %>%
  group_by(Region) %>%
  summarise(
    Total_Paises = n(), PIB_Promedio = mean(as.numeric(GDP), na.rm = TRUE),
    Desv_Estandar = sd(as.numeric(GDP), na.rm = TRUE))

tabla_region <- resumen_region %>%
  gt() %>%
  tab_header(title = md("**Resumen del PIB por región (2017)**"),
    subtitle = md("Países seleccionados – Datos del Banco Mundial")
  ) %>%
  cols_label(Region = "Región", Total_Paises = "Países totales", PIB_Promedio = "PIB promedio (millones USD)",
    Desv_Estandar = "Desviación estándar"
  ) %>%
  fmt_number(columns = PIB_Promedio, decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Desv_Estandar, decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Total_Paises, decimals = 0, use_seps = TRUE, sep_mark = "."
  ) %>%
  tab_style(style = list(
      cell_fill(color = "#2C3E50"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(Region ~ px(150), Total_Paises ~ px(120), PIB_Promedio ~ px(180), Desv_Estandar ~ px(150)
  ) %>%
  cols_align(align = "center", columns = c(Total_Paises, PIB_Promedio, Desv_Estandar)
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(80),
    table.font.size = "small",
    heading.title.font.size = "large",
    heading.subtitle.font.size = "small",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_region)
Resumen del PIB por región (2017)
Países seleccionados – Datos del Banco Mundial
Región Países totales PIB promedio (millones USD) Desviación estándar
América 33 42.917,93 28.729,62
Asia Central 4 23.955,69 19.027,90
Europa 40 83.138,86 41.009,37
Otros 5 34.503,61 7.828,35
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Se aprecia que las regiones de Europa y América concentraron la mayor cantidad de datos obervables, mientras que Asia Central tuvo una representación mínima con solo 4 países. Esta disparidad en el tamaño de las muestras es un factor crítico, puesto que las regiones que presentan un mayor volumen de datos para analizar ejercen un peso superior en el cálculo del promedio global y en la configuración del modelo de regresión.

#el diagram de cajas que hablamos
datos_boxplot_pib <- Datos_2017 %>%
  select(Region, GDP) %>%
  filter(!is.na(GDP), !is.na(Region)) %>%
  mutate(Region = as.factor(Region))

stats_pib_region <- datos_boxplot_pib %>%
  group_by(Region) %>%
  summarise(
    mediana = median(GDP, na.rm = TRUE),
    q1 = quantile(GDP, 0.25, na.rm = TRUE),
    q3 = quantile(GDP, 0.75, na.rm = TRUE),
    iqr = IQR(GDP, na.rm = TRUE),
    n = n()
  ) %>%
  ungroup()
# usen esya misma paleta es linda
paleta <- list(
  primary   = "#2C7BB6",
  secondary = "#7FCDBB",
  light     = "#A8D5BA",
  dark      = "#1A4D6B",
  bg        = "#F9F9F9",
  accent    = "#E6F2F0"
)

regiones_unicas <- unique(datos_boxplot_pib$Region)
n_regiones <- length(regiones_unicas)
colores_regiones <- colorRampPalette(c(paleta$light, paleta$primary, paleta$secondary))(n_regiones)

fig_box_pib <- plot_ly()

for (i in seq_along(regiones_unicas)) {
  region_name <- regiones_unicas[i]
  
  fig_box_pib <- fig_box_pib %>%
    add_boxplot(
      data = datos_boxplot_pib %>% filter(Region == region_name),
      y = ~GDP,
      name = region_name,
      boxpoints = "outliers",
      marker = list(color = paleta$dark, size = 4, opacity = 0.6,
        outliercolor = paleta$dark, outlierwidth = 1),
      line = list(color = paleta$dark, width = 1.5),
      fillcolor = colores_regiones[i],
      width = 0.6, whiskerwidth = 0.5, legendgroup = region_name, showlegend = TRUE)}

# este les ayude a ver las medianas en el grafico 
annotations_list <- list()
for (i in seq_along(regiones_unicas)) {
  region_name <- regiones_unicas[i]
  med <- stats_pib_region$mediana[stats_pib_region$Region == region_name]
  annotations_list[[i]] <- list(
    x = i - 1,
    y = med,
    text = paste("Mediana:", format(round(med, 0), big.mark = ".", decimal.mark = ",")),
    showarrow = FALSE,
    font = list(family = "Arial", size = 9, color = paleta$dark),
    bgcolor = "rgba(255,255,255,0.85)",
    bordercolor = paleta$primary, borderpad = 2, borderwidth = 1, xanchor = "center",
    yanchor = "bottom")}

annotations_list[[n_regiones + 1]] <- list(
  x = 1,
  y = -0.12,
  xref = "paper",
  yref = "paper",
  text = "Fuente: Elaboración propia con datos del Banco Mundial (2017).",
  showarrow = FALSE,
  font = list(family = "Arial", size = 10, color = paleta$dark),
  xanchor = "right")

fig_box_pib <- fig_box_pib %>%
  layout(title = list(
      text = "<b>Distribución del PIB por región</b><br><sup>Comparación del producto interno bruto según región geográfica (2017)</sup>",
      font = list(family = "Arial", size = 18, color = paleta$dark), x = 0.05),
    xaxis = list(title = "", tickangle = -30, tickfont = list(family = "Arial", size = 11, color = paleta$dark), gridcolor = paleta$light, categoryorder = "array",
      categoryarray = regiones_unicas),
    
    yaxis = list(title = list(
        text = "PIB (millones USD)",
        font = list(family = "Arial", size = 13, color = paleta$dark)),
      gridcolor = paleta$light,
      zerolinecolor = paleta$dark,
      zerolinewidth = 1, tickformat = ",.0f", tickprefix = "USD ", ticksuffix = " M"),
    plot_bgcolor = paleta$bg,
    paper_bgcolor = "white",
    font = list(family = "Arial", size = 12),
    margin = list(l = 80, r = 50, t = 100, b = 80),
    hoverlabel = list(
      bgcolor = paleta$dark,
      font = list(color = "white", family = "Arial")
    ),
    boxmode = "group",
    annotations = annotations_list,
    legend = list(
      title = list(text = "<b>Región</b>"),
      font = list(family = "Arial", size = 10, color = paleta$dark),
      bgcolor = "rgba(255,255,255,0.8)",
      bordercolor = paleta$light,
      borderwidth = 1
    )
  ) %>%
  config(
    displayModeBar = FALSE,
    displaylogo = FALSE)
fig_box_pib

Desde un análisis adecuado, como señalan Fox y Weisberg (2019), la variabilidad observada en el gráfico anterior entre las regiones de Europa y América, en las cuales se aprecia el bigote más amplio y otro pero con menor amplitud respectivamente,a es consecuencia directa de tener una muestra de datos más amplia en estas regiones. De otro modo, a pesar de que las otras regiones de Asia Central y Otros aparenten un comportamiento más estable no necesariamente indican homogeneidad, sino que pueden ser reflejo de una representación limitada que no alcanza a capturar toda la diversidad económica que presenta esa región.

Asimismo, al contrastar estos datos con los umbrales del Banco Mundial (2017), se evidencia una brecha estructural profunda, puesto que, mientras que Europa presenta una mediana de $74,850 USD, posicionando a la mayoría de sus naciones en niveles altos similares de ingresos, no obstante del otro lado de las regiones como Asia Central operan con una mediana de $15,149 USD, situándose cerca de los límites de ingresos medios-altos definidos por el Blanco Mundial (2017). Esta diferencia en las medianas y la dispersión de los datos confirman que la ubicación geográfica sigue siendo uno de los predictores más influyentes en la variabilidad del PIB mundial.

Análisis de correlación

Matriz de correlación

# Hacer una matriz de correlcion para visualizar como se relacionan las variables

paleta <- list(
  primary   = "#2C7BB6",
  secondary = "#7FCDBB",
  light     = "#A8D5BA",
  dark      = "#1A4D6B",
  bg        = "#F9F9F9",
  accent    = "#E6F2F0")

colores_corr <- colorRampPalette(c(paleta$secondary, "#FFFFFF", paleta$primary))(100)

datos_cor <- Datos_2017 %>%
  select(Empleos_en_Industria, Trabajo_Autonomo, Empleo_a_Tiempo_Parcial, 
         Trabajadores_familia, Empleos_Totales, GDP)

# a la mtriz para que no se viera amontonada cortamos el nombre de unas pues fue recomendado por la monitora y si se ve mejor 
matriz_cor <- cor(datos_cor, use = "complete.obs")
colnames(matriz_cor) <- c("Industria (%)", "Autónomo (%)", 
                          "Parcial (%)", "Trab. familiar (%)", 
                          "Empleo total (miles)", "PIB (mill. USD)")
rownames(matriz_cor) <- c("Industria (%)", "Autónomo (%)", 
                          "Parcial (%)", "Trab. familiar (%)", 
                          "Empleo total (miles)", "PIB (mill. USD)")

corrplot(matriz_cor, method = "color", type = "lower",
         diag = FALSE, addCoef.col = paleta$dark, number.cex = 0.85,
         tl.col = paleta$dark, tl.srt = 35, tl.cex = 0.8,          
         col = colores_corr, cl.pos = "b", cl.cex = 0.7, cl.length = 5,
         mar = c(2, 0, 1, 0), bg = "white")

mtext("Fuente: Elaboración propia con datos del Banco Mundial (2017)", 
      side = 1, line = 4, cex = 0.7, col = paleta$secondary)

La matriz de correlación anterior nos permite cuantificar la fuerza y dirección de las relaciones entre las variables estudiadas y el resultado más contundente es la correlación negativa de -0.63 entre el Trabajo autónomo y el PIB, haieendo enfásis en el autoempleo como el predictor con mayor impacto inverso sobre la riqueza nacional de cada país, de igual manera se observa otra correlación negativa moderada de -0.45 para los Trabajadores familiares, reforzando la idea de que la dependencia de estas modalidades laborales están ligadas a las economías que aún presentan deficiencias en su desarrollo..

En contraste, el Empleo a tiempo parcial presenta una correlación positiva moderada de 0.53 con el PIB. Este valor sugiere que la flexibilidad laboral dentro de marcos formales es una característica propia de países con mayor productividad.

Un punto crítico es la alta correlación de 0.79 detectada entre el Trabajo autónomo y los Trabajadores familiares. Como señalan Fox y Weisberg (2019), la variabilidad conjunta tan elevada entre variables independientes sugiere la presencia de multicolinealidad, lo que indica que ambas variables aportan información que puede ser redundante. Este fenómeno confirma que el autoempleo y el trabajo familiar suelen coexistir en entornos de alta informalidad, lo que el Banco Mundial (2017) identifica como una barrera estructural en los niveles básicos de producción

Tabla de correlación

# Tabla co la misma estructura del la correlacion ayuda a ver men resumen lo de la matriz
Tabla_correlaciones <- data.frame(
  Variable = c("Empleo a tiempo parcial (%)", 
               "Trabajadores familiares (%)", 
               "Empleo en industria (%)", 
               "Empleo total (miles)", 
               "Trabajo autónomo (%)"),
  Correlacion = c(
    cor(Datos_2017$GDP, Datos_2017$Empleo_a_Tiempo_Parcial, use = "complete.obs"),
    cor(Datos_2017$GDP, Datos_2017$Trabajadores_familia, use = "complete.obs"),
    cor(Datos_2017$GDP, Datos_2017$Empleos_en_Industria, use = "complete.obs"),
    cor(Datos_2017$GDP, Datos_2017$Empleos_Totales, use = "complete.obs"),
    cor(Datos_2017$GDP, Datos_2017$Trabajo_Autonomo, use = "complete.obs")))

tabla_correlaciones <- Tabla_correlaciones %>%
  gt() %>%
  tab_header(title = md("**Correlación entre variables de empleo y PIB (2017)**"),
  ) %>%
  cols_label(Variable = "Variable", Correlacion = "Coeficiente de correlación"
  ) %>%
  fmt_number(columns = Correlacion, decimals = 3, sep_mark = ".", dec_mark = ","
  ) %>%
  tab_style(style = list(cell_fill(color = "#2C3E50"),
      cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white",
                                                         weight = "bold", size = "large")),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(style = list(cell_text(color = "#7FCDBB", size = "small")
    ),
    locations = cells_title(groups = "subtitle")
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(Variable ~ px(250), Correlacion ~ px(180)
  ) %>%
  cols_align(align = "center", columns = Correlacion
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(70),
    table.font.size = "small",
    heading.title.font.size = "large",
    heading.subtitle.font.size = "small",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_correlaciones)
Correlación entre variables de empleo y PIB (2017)
Variable Coeficiente de correlación
Empleo a tiempo parcial (%) 0,531
Trabajadores familiares (%) −0,452
Empleo en industria (%) −0,021
Empleo total (miles) 0,077
Trabajo autónomo (%) −0,633
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Resultados del modelo de regresión lineal

Estimación e interpretación del modelo

# pon el resultado del modelo de regresión eb una tabla asi como las otras 


modeloPart <- lm(GDP ~ Empleo_a_Tiempo_Parcial + Trabajadores_familia + 
                   Empleos_en_Industria + Empleos_Totales + Trabajo_Autonomo,
                 data = Datos_2017)

tabla <- tidy(modeloPart)
r2_adj <- glance(modeloPart)$adj.r.squared

# me recomendaron adaptar el nombre para que se vea mejor dijo la monitora
tabla_final <- tabla %>%
  mutate(term = case_match(
    term,
    "(Intercept)" ~ "Intercepto",
    "Empleo_a_Tiempo_Parcial" ~ "Empleo a tiempo parcial (%)",
    "Trabajadores_familia" ~ "Trabajadores familiares (%)",
    "Empleos_en_Industria" ~ "Industria (%)",
    "Empleos_Totales" ~ "Empleo total (miles)",
    "Trabajo_Autonomo" ~ "Trabajo autónomo (%)"
  )) %>%
  add_row(term = "R² Ajustado", estimate = r2_adj, std.error = NA,
          statistic = NA, p.value = NA)

tabla_final <- tabla_final %>%
  mutate(estimate = round(estimate, 2), std.error = round(std.error, 2),
    statistic = round(statistic, 3), p.value = round(p.value, 4))

tabla_regresion <- tabla_final %>%
  gt() %>%
  tab_header(
    title = md("**Resultados del modelo de regresión**")
  ) %>%
  cols_label(term = "Variable", estimate = "Coeficiente", std.error = "Error estándar",
    statistic = "Valor t", p.value = "Valor p"
  ) %>%
  fmt_number(columns = c(estimate, std.error, statistic, p.value),
    rows = term != "R² Ajustado", decimals = 3, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = estimate, rows = term == "R² Ajustado", decimals = 3, sep_mark = ".",
    dec_mark = ","
  ) %>%
  fmt_number(columns = p.value, rows = term != "R² Ajustado", decimals = 4, sep_mark = ".",
    dec_mark = ","
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white",
                                                         weight = "bold", size = "large")
    ),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(term ~ px(220), estimate ~ px(100), std.error ~ px(110), statistic ~ px(90),
    p.value ~ px(90)
  ) %>%
  cols_align(align = "center", columns = c(estimate, std.error, statistic, p.value)
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(85),
    table.font.size = "small",
    heading.title.font.size = "large",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_regresion)
Resultados del modelo de regresión
Variable Coeficiente Error estándar Valor t Valor p
Intercepto 113.298,580 24.981,600 4,535 0,0000
Empleo a tiempo parcial (%) 1.279,150 334,510 3,824 0,0003
Trabajadores familiares (%) 1.548,220 928,620 1,667 0,1011
Industria (%) −1.750,220 653,850 −2,677 0,0097
Empleo total (miles) 2.749,740 1.684,060 1,633 0,1081
Trabajo autónomo (%) −2.419,930 397,740 −6,084 0,0000
R² Ajustado 0,610 NA NA NA
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Un resultado del 61% en \(R^2\) puede considerarse relativamente alto en estudios económicos, indicando que una proporción importante de la variación del PIB entre países está asociada con la estructura de su fuerza laboral, según el modelo estimado superar el 60% justifica que las variables elegidas no son azarosas, sino que tienen un poder explicativo y a su vez permitiendo que el modelo sea útil para realizar inferencias sobre el desarrollo nacional. La mayoría de las variables presentan un valor p de 0,0000 o cercano a 0 prácticamente, siendo el escenario ideal y esperado en estadística para el estudio de comportamientos de modelos. Esto garantiza que la probabilidad de que estos resultados sean producto del azar es prácticamente nula. El modelo es confiable porque sus predictores más importantes siendo el Trabajo Autónomo y los Trabajadores Familiares son significativos, en especial el primero. Los valores de t para las variables clave superan con creces el umbral crítico de |2|. En especial, el Trabajo autónomo con un valor t de -6,084 mostrando una fuerza de asociación muy superior, lo que confirma su rol como el principal inhibidor del PIB. Las variables que no superaron este umbral simplemente indican que la cantidad de trabajadores no es lo que genera riqueza, sino la calidad con la que cuentan y formalidad de su vinculación.

Evaluacion de los supuestos

Normalidad de los residuos

  #normalidad de los residuos 
shapiro <- shapiro.test(modeloPart$residuals)

tabla_shapiro <- data.frame(
  Estadistico_W = shapiro$statistic,
  Valor_p = shapiro$p.value
)

tabla_shapiro <- tabla_shapiro %>%
  gt() %>%
  tab_header(
    title = md("**Prueba de normalidad de Shapiro-Wilk para los residuos**")
  ) %>%
  cols_label(
    Estadistico_W = "Estadístico W",
    Valor_p = "Valor p"
  ) %>%
  fmt_number(columns = Estadistico_W, decimals = 4, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_scientific(columns = Valor_p, decimals = 2,
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white",
                                                         weight = "bold", size = "large")
    ),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(Estadistico_W ~ px(150), Valor_p ~ px(150)
  ) %>%
  cols_align(align = "center", columns = everything()
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(50),
    table.font.size = "small",
    heading.title.font.size = "large",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_shapiro)
Prueba de normalidad de Shapiro-Wilk para los residuos
Estadístico W Valor p
0,8399 1.13 × 10−6
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Garantizando la fiabilidad se realizó la prueba de normalidad de Shapiro-Wilk, obteniendo un valor p de \(1.13 \times 10^{-6}\). Dado que este valor es significativamente inferior a 0,05, se rechaza estadísticamente el supuesto de normalidad. Sin embargo, este resultado es esperable en datos macroeconómicos globales debido a la alta variabilidad intrínseca del PIB y la presencia de economías excesivas que actúan como valores atípicos.

# grafico para demstrar la normalida de manera mas visuak
qqnorm(rstandard(modeloPart),
       col = paleta$dark, pch = 16, cex = 0.8,
       main = "", 
       xlab = "Cuantiles teóricos (Normal)",
       ylab = "Residuos estandarizados",
       font.main = 1, cex.lab = 0.9, cex.axis = 0.8)

qqline(rstandard(modeloPart), col = paleta$secondary, lwd = 1.5)

title("Gráfico Q-Q de los residuos", line = 1, cex.main = 1, font.main = 2)

mtext("Fuente: Elaboración propia con datos del Banco Mundial (2017)", 
      side = 1, line = 3.5, cex = 0.7, col = paleta$secondary)

Observando el gráfico Q-Q, se evidencia que la mayoría de los datos siguen la linea tendencia central, sin embargo existen valores atípicos con alta importancia. Estos puntos representan países cuyo PIB no es explicado linealmente por las variables de empleo seleccionadas, generando una cola en la distribución de los errores.Este comportamiento es típico debido a la alta heterogeneidad entre naciones, lo que sugiere que, aunque el modelo es útil para identificar tendencias generales, las estimaciones en los extremos de la muestra deben interpretarse con cautela.

Al observar el Gráfico Q-Q de los residuos, se evidencia que la mayoría de los puntos siguen la línea de tendencia central, lo que valida la estructura general del modelo, sin embargo las colas en los extremos representan países cuyo comportamiento económico no es explicado linealmente por las variables de empleo seleccionadas. Como señalan Fox y Weisberg (2019), este alejamiento en los extremos es un reflejo de la heterogeneidad mundial, aunque el modelo es adecuado para identificar tendencias generales, las estimaciones para países con condiciones económicas extremas deben interpretarse con cautela. A pesar de no cumplir estrictamente con la normalidad, el modelo conserva su utilidad práctica. Según los estándares del Banco Mundial (2017), la capacidad del modelo para capturar la realidad de la mayoría de las naciones permite confirmar que las relaciones identificadasd son consistentes para describir el estancamiento en los niveles básicos de producción.

Homocedasticidad

# Tabla de prueba de homocedasticidad 
bp <- bptest(modeloPart)

tabla_bp <- data.frame(
  Estadistico_BP = bp$statistic,
  gl = bp$parameter,
  Valor_p = bp$p.value
)

tabla_bp <- tabla_bp %>%
  gt() %>%
  tab_header(title = md("**Verificación de homocedasticidad**")
  ) %>%
  cols_label(Estadistico_BP = "Estadístico BP", gl = "Grados de libertad",
    Valor_p = "Valor p"
  ) %>%
  fmt_number(columns = Estadistico_BP, decimals = 4, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = gl, decimals = 0, sep_mark = ".", dec_mark = ","
  ) %>%
  fmt_number(columns = Valor_p, decimals = 4
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"),
      cell_text(color = "white", weight = "bold", size = "large")
    ),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>%
  cols_width(
    Estadistico_BP ~ px(150),
    gl ~ px(150),
    Valor_p ~ px(150)
  ) %>%
  cols_align(
    align = "center", columns = everything()
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(60),
    table.font.size = "small",
    heading.title.font.size = "large",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_bp)
Verificación de homocedasticidad
Estadístico BP Grados de libertad Valor p
9,1579 5 0.1029
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Para verificar la constancia de la varianza de los residuos, se aplicó la prueba de Breusch-Pagan. Se obtuvo un estadístico de 9.1579 con un p-valor de 0.1029. Dado que este valor es superior al nivel de significancia de 0.05, no se rechaza la hipótesis nula (\(H_0\)), concluyendo que el modelo cumple con el supuesto de homocedasticidad.

plot(fitted(modeloPart), rstandard(modeloPart),
     col = paleta$dark,
     pch = 16,
     cex = 0.8,
     main = "Residuos vs valores ajustados",
     xlab = "Valores ajustados",
     ylab = "Residuos estandarizados",
     col.main = paleta$dark,
     cex.main = 0.95,
     cex.lab = 0.85,
     cex.axis = 0.8)

abline(h = 0, col = "gray50", lwd = 1.5)

lines(lowess(fitted(modeloPart), rstandard(modeloPart)),
      col = paleta$secondary, lwd = 1.5)

mtext("Fuente: Elaboración propia con datos del Banco Mundial (2017)", 
      side = 1, line = 3.5, cex = 0.7, col = paleta$secondary)

Al observar el gráfico se confirma visualmente que los errores se distribuyen de manera aleatoria alrededor de la línea cero, sin presentar patrones sistemáticos, como una nube. Esto es un hallazgo fundamental, a pesar de la presencia de algunos valores atípicos que no eran normales, no se observan cambios sistemáticos en la dispersión de los residuos, lo que sugiere que la varianza del error se mantiene aproximadamente constante y en términos prácticos, el modelo presenta un nivel de error similar tanto en países con PIB bajo como en aquellos con PIB alto lo que indica que no se evidencia heterocedasticidad,

Multicolinealidad (VIF)

vif_valores <- vif(modeloPart)

tabla_vif <- data.frame(
  Variable = c("Empleo a tiempo parcial (%)", 
               "Trabajadores familiares (%)", 
               "Empleo en industria (%)", 
               "Empleo total (miles)", 
               "Trabajo autónomo (%)"),
  VIF = round(vif_valores, 2)
)

tabla_vif <- tabla_vif %>%
  gt() %>%
  tab_header(title = md("**Factor de Inflación de la Varianza (VIF)**")
  ) %>%
  cols_label(Variable = "Variable", VIF = "VIF"
  ) %>%
  fmt_number(columns = VIF, decimals = 2, sep_mark = ".", dec_mark = ","
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels(everything())
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C3E50"),
      cell_text(color = "white", weight = "bold", size = "large")
    ),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(style = cell_borders(sides = "bottom", color = "#DDDDDD", weight = px(1)),
    locations = cells_body()
  ) %>%
  opt_row_striping() %>% cols_width(Variable ~ px(220), VIF ~ px(100)
  ) %>%
  cols_align(align = "center", columns = VIF
  ) %>%
  tab_source_note("Fuente: Elaboración propia con datos del Banco Mundial (2017).") %>%
  tab_options(
    table.width = pct(50),
    table.font.size = "small",
    heading.title.font.size = "large",
    column_labels.font.size = "small",
    table.border.top.color = "#2C3E50",
    table.border.bottom.color = "#2C3E50",
    heading.border.bottom.color = "#2C3E50",
    table_body.hlines.color = "#EAEAEA")

htmltools::div(
  style = "width: 100%; height: auto; overflow-x: auto;",
  tabla_vif)
Factor de Inflación de la Varianza (VIF)
Variable VIF
Empleo a tiempo parcial (%) 1,19
Trabajadores familiares (%) 2,79
Empleo en industria (%) 1,31
Empleo total (miles) 1,16
Trabajo autónomo (%) 3,12
Fuente: Elaboración propia con datos del Banco Mundial (2017).

Los valores del Factor de Inflación de la Varianza (VIF) para todas las variables explicativas se encuentran por debajo de 5, lo que indica que no existe evidencia de multicolinealidad severa en el modelo. En consecuencia, las variables incluidas no presentan correlaciones lineales altas entre sí, permitiendo estimaciones estables y confiables de los coeficientes, estos resultados sugieren que cada variable explicativa aporta información relevante al modelo sin redundancias significativas, lo que fortalece la interpretación individual de los coeficientes estimados.

Conclusiones

El estudio actual posibilitó examinar el vínculo entre la productividad económica, evaluada por medio del PIB por persona empleada, y la estructura del mercado de trabajo. Los resultados muestran que no todas las modalidades de empleo afectan la productividad de la misma manera, ya que la calidad del empleo es más importante que su cantidad.Se descubrió, que variables como el empleo a tiempo parcial tiene un impacto positivo en el PIB y este fenómeno sugiere que ciertas formas de flexibilidad laboral pueden estar vinculadas con economías más avanzadas y con mayores niveles de productividad.

En cambio, variables como el trabajo autónomo y los trabajadores familiares tienen un impacto negativo importante, indicando que los niveles elevados de informalidad están asociados con niveles más bajos de productividad, hay que resaltar que la fuerte correlación de 0,79 entre estas dos últimas variables, aunque no alcanzó niveles de multicolinealidad severa según el VIF, representa un clúster de precariedad donde ambas modalidades se complementan para frenar el crecimiento económico de los países, atrapando a las naciones en lo que el Banco Mundial (2017) define como niveles básicos de producción.Además, se observó un impacto negativo en el trabajo industrial, lo que señala que la mera participación en este sector no asegura una productividad más alta, sobre todo en naciones donde la industria no está muy tecnificada.

Por otra parte, variables como los empleos totales no mostraron ser significativas, lo cual indica que la cantidad de empleo no basta para explicar el rendimiento económico sin tener en cuenta su calidad y sus condiciones. El modelo logró responder la meta de la investigación al identificar al trabajo autónomo como el principal predictor negativo dando resultado de \(t = -6,084\), y un \(p = 0,0000\), demostrando que el 61% de la variación del PIB depende de la estructura laboral. Sin embargo, el modelo de regresión lineal múltiple no explica completamente el comportamiento del PIB por trabajador, lo que sugiere que existen otros factores relevantes como la educación, la tecnología o la inversión, que podrían mejorar la capacidad explicativa en futuras investigaciones.

En cuanto al cumplimiento de los supuestos, aunque se observa que la mayoría se cumplen, el supuesto de normalidad de los residuos fue rechazado \(p < 0.05\). Como argumentan Fox y Weisberg (2019), en estudios con alta variabilidad y heterogeneidad entre naciones, este alejamiento de la normalidad es esperable debido a la presencia de valores atípicos o economías sobredimensionadas.

No obstante, los resultados del modelo son confiables, ya que cumple con supuestos clave y no presenta problemas significativos que distorsionen las estimaciones. En particular, el cumplimiento de la homocedasticidad y la ausencia de multicolinealidad relevante respaldan su solidez estadística para identificar tendencias generales. Por último, los resultados sugieren que las políticas económicas deberían orientarse a mejorar la calidad del empleo, reduciendo los niveles de informalidad asociados al trabajo autónomo y familiar, y fortaleciendo esquemas como el empleo a tiempo parcial en contextos donde este resulte eficiente para el desarrollo estructural.

Bibliografía

Banco Mundial. (2017). Informe anual 2017 del Banco Mundial: Poner fin a la pobreza e invertir en las oportunidades. https://openknowledge.worldbank.org/handle/10986/27986

Banco Mundial. (2017, 15 de diciembre). 2017: El año en 12 gráficos. World Bank News. https://www.bancomundial.org/es/news/feature/2017/12/15/year-in-review-2017-in-12-charts

Fox, J., & Weisberg, S. (2019). An R Companion to Applied Regression (3.ª ed.). Sage Publications. https://socialsciences.mcmaster.ca/jfox/Books/Companion/

Gujarati, D. N., & Porter, D. C. (2011). Econometría (5.ª ed.). McGraw-Hill. https://www.mheducation.com.mx/econometria-9786071504999-latam

Numiqo. (s.f.). Regresión Lineal: Guía completa y tutorial. https://numiqo.com/blog/regresion-lineal-guia-completa-tutorial/

Sievert, C. (2020). Interactive Web-Based Data Visualization with R, plotly, and shiny. Chapman and Hall/CRC. https://plotly-r.com/

Todaro, M. P., & Smith, S. C. (2020). Economic Development (13.ª ed.). Pearson. https://www.pearson.com/en-us/subject-catalog/p/economic-development/P200000006326/9780135195451

Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis (2.ª ed.). Springer-Verlag New York. https://ggplot2-book.org/

World Bank. (2017). World Development Indicators 2017. World Bank Publications. https://datacatalog.worldbank.org/search/dataset/0037721/World-Development-Indicators

Xie, Y. (2015). Dynamic documents with R and knitr (2nd ed.). Chapman and Hall/CRC. https://yihui.org/knitr/

Iannone, R., Cheng, J., Schloerke, B., Hughes, E., Lauer, A., & Seo, J. (2024). gt: Easily create presentation-ready display tables (Versión 0.10.0). https://gt.rstudio.com/

R Core Team. (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/

Wei, T., & Simko, V. (2021). R package ‘corrplot’: Visualization of a correlation matrix (Versión 0.92). https://github.com/taiyun/corrplot

Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2023). dplyr: A grammar of data manipulation (Versión 1.1.0). https://dplyr.tidyverse.org/

Zhu, H. (2021). kableExtra: Construct complex table with ‘kable’ and pipe syntax (Versión 1.3.4). https://haozhu233.github.io/kableExtra/