library(knitr)
opts_chunk$set(echo = TRUE, collapse = TRUE)Análisis Multivariado de las 10,000 Empresas Más Grandes de Colombia
Introducción
Este proyecto realiza un análisis multivariado de las 10,000 empresas más grandes de Colombia, utilizando técnicas como el análisis de componentes principales (PCA) y análisis de correspondencias. El objetivo es identificar patrones y factores clave que afectan el desempeño empresarial, así como la distribución geográfica de estas empresas.
Resumen
En este estudio se analiza un conjunto de datos que contiene información sobre las 10,000 empresas más grandes de Colombia. Utilizando técnicas de análisis multivariado, como el Análisis de Componentes Principales (PCA) y el análisis de correspondencias, se busca identificar patrones y factores que influyen en el desempeño empresarial. Los resultados proporcionan una visión integral de la distribución geográfica y sectorial de estas empresas, así como de sus indicadores financieros clave.
Planteamiento del Problema
En la actualidad, entender el desempeño financiero y operacional de las empresas es crucial para la toma de decisiones estratégicas tanto en el ámbito público como privado. Sin embargo, el análisis de grandes volúmenes de datos empresariales puede resultar complejo debido a la diversidad y volumen de la información disponible. En Colombia, existe una necesidad urgente de herramientas que permitan simplificar y visualizar de manera efectiva estos datos, facilitando la identificación de patrones y tendencias que puedan informar políticas económicas y estrategias empresariales. Este proyecto busca abordar esta problemática mediante la aplicación de técnicas de análisis multivariado y visualización de datos para el estudio de las 10,000 empresas más grandes del país.
Objetivos
Objetivo General
Desarrollar un análisis multivariado del desempeño financiero y operacional de las 10,000 empresas más grandes de Colombia utilizando técnicas de análisis multivariado y herramientas de visualización de datos.
Objetivos Específicos
- Recolectar y limpiar los datos empresariales de las 10,000 empresas más grandes de Colombia.
- Asegurar la integridad y consistencia de los datos.
- Manejar valores faltantes y datos atípicos.
- Aplicar técnicas de análisis multivariado para identificar las principales dimensiones que explican la variabilidad en los datos empresariales.
- Realizar un Análisis de Componentes Principales (PCA).
- Interpretar las dimensiones principales y su relación con las variables originales.
- Visualizar los resultados del análisis multivariado mediante gráficos interactivos que faciliten la interpretación de los datos.
- Generar biplots y gráficos de dispersión.
- Desarrollar mapas de calor para la visualización geográfica de los datos empresariales.
- Proveer recomendaciones basadas en los hallazgos del análisis para la toma de decisiones estratégicas.
- Identificar sectores con alto desempeño y áreas de oportunidad.
- Sugerir políticas y estrategias basadas en los resultados del análisis.
Justificación
El análisis multivariado y la visualización de datos proporcionan una comprensión profunda de la dinámica empresarial en Colombia. Este proyecto no solo contribuirá al conocimiento académico sobre el desempeño de las empresas colombianas, sino que también ofrecerá herramientas prácticas para ejecutivos y responsables de políticas públicas. Al identificar patrones y tendencias clave, se pueden tomar decisiones informadas que promuevan el crecimiento económico y la competitividad del país. Además, la implementación de visualizaciones interactivas permitirá una mayor accesibilidad y comprensión de los datos, beneficiando a una amplia gama de usuarios desde académicos hasta tomadores de decisiones.
Marco Conceptual
Marco de Antecedentes
El entorno empresarial en Colombia ha experimentado cambios significativos en las últimas décadas, impulsado por la globalización, la tecnología y las políticas económicas. Las grandes empresas juegan un papel crucial en la economía del país, no solo por su contribución al PIB, sino también por su capacidad para generar empleo, fomentar la innovación y atraer inversión extranjera. Este análisis se enfoca en las 10,000 empresas más grandes de Colombia, proporcionando una visión integral de su distribución geográfica, sectorial y su desempeño financiero.
Importancia de las Grandes Empresas en la Economía Nacional
Las grandes empresas en Colombia son fundamentales para el desarrollo económico. Estas empresas no solo generan una parte sustancial de los ingresos fiscales del país, sino que también impulsan el crecimiento económico a través de inversiones en infraestructura, tecnología y capacitación laboral. Además, son actores clave en las cadenas de suministro globales, lo que facilita la integración de Colombia en el comercio internacional.
Marco Teórico
Análisis Multivariado
El análisis multivariado es una rama de la estadística que involucra la observación y análisis de más de una variable estadística a la vez. Esta técnica es esencial para entender las relaciones complejas y la estructura subyacente en los datos de alta dimensión. Algunas de las técnicas de análisis multivariado más relevantes para este estudio incluyen:
- Análisis de Componentes Principales (PCA): Una técnica utilizada para reducir la dimensionalidad de los datos, identificando las combinaciones lineales de las variables originales que explican la mayor parte de la variabilidad en los datos.
- Análisis de Correspondencias: Utilizado para explorar las relaciones entre variables categóricas, proporcionando una representación visual de las asociaciones entre las categorías de las variables.
- Clustering (Agrupamiento): Técnicas como el k-means y el análisis jerárquico que agrupan observaciones similares en clusters, permitiendo identificar patrones y segmentaciones naturales en los datos.
Revisión de Estudios Previos
Diversos estudios han aplicado técnicas de análisis multivariado para entender el desempeño empresarial y las dinámicas sectoriales en diferentes países. Por ejemplo:
- Estudio 1: “Multivariate analysis techniques applied for the performance measurement of Federal University Hospitals of Brazil” (Maria Gabriela Mendonça Peixoto, Marcel Andreotti Musetti, Maria Cristina Angélico Mendonça). El estudio aplicó técnicas de análisis multivariado, específicamente el análisis de componentes principales (PCA) y el análisis de conglomerados, para medir el rendimiento de los hospitales universitarios federales en Brasil. Los resultados mostraron divergencias significativas entre los hospitales y destacaron la eficiencia de ciertos hospitales en términos de indicadores clave de rendimiento. Link al estudio.
- Estudio 2: Tanisha Mitchell, en su artículo “Bank Default Prediction: A Comparative Model using Principal Component Analysis”, publicado en el Journal of Stock & Forex Trading, utilizó el análisis de componentes principales (PCA) para mejorar la predicción de fallos bancarios en bancos de EE.UU. desde 1995 hasta 2012. La investigación mostró que un modelo combinado de indicadores contables y estructurales proporciona una mejor predicción de fallos bancarios que cualquier modelo independiente. Puedes consultar el artículo completo en ScienceDirect.
Estructuración de Datos
Descripción de la Base de Datos
La base de datos utilizada en este análisis contiene información sobre las 10,000 empresas más grandes de Colombia. Los datos incluyen diversas variables económicas y de ubicación, las cuales son esenciales para realizar un análisis multivariado. La base de datos fue descargada de datos.gov.co.
Variables Encontradas
A continuación se presenta una lista de las variables disponibles en la base de datos, junto con una breve descripción de cada una:
- NIT: Número de Identificación Tributaria de la empresa.
- RAZÓN SOCIAL: Nombre de la empresa.
- SUPERVISOR: Entidad supervisora de la empresa.
- REGIÓN: Región geográfica donde está ubicada la empresa.
- DEPARTAMENTO DOMICILIO: Departamento donde está domiciliada la empresa.
- CIUDAD DOMICILIO: Ciudad donde está domiciliada la empresa.
- CIIU: Clasificación Industrial Internacional Uniforme de la actividad económica de la empresa.
- MACROSECTOR: Sector económico principal de la empresa.
- INGRESOS OPERACIONALES: Ingresos operacionales anuales de la empresa (en millones de pesos colombianos).
- GANANCIA (PÉRDIDA): Ganancia o pérdida anual de la empresa (en millones de pesos colombianos).
- TOTAL ACTIVOS: Total de activos de la empresa (en millones de pesos colombianos).
- TOTAL PASIVOS: Total de pasivos de la empresa (en millones de pesos colombianos).
- TOTAL PATRIMONIO: Total de patrimonio de la empresa (en millones de pesos colombianos).
- Año de Corte: Año al que corresponden los datos.
Tratamiento y Limpieza de los Datos
En el proceso de análisis de datos, es común encontrarse con valores faltantes y datos que requieren recodificación para facilitar el análisis. Para este proyecto, se tomaron las siguientes medidas para manejar estos problemas:
Manejo de Datos Faltantes
Identificación de Datos Faltantes
Se revisó el conjunto de datos para identificar las variables con valores faltantes y se generó un resumen de los valores faltantes por columna.
# Cargar los paquetes necesarios
library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Cargar los datos desde un archivo CSV
data <- read.csv("C:\\Users\\pined\\OneDrive\\Documentos\\Universidad\\Descriptiva multivariada\\10.000_Empresas_mas_Grandes_del_Pa_s_20240805.csv")
# Verificar los nombres de las columnas
colnames(data)
## [1] "NIT" "RAZÓN.SOCIAL" "SUPERVISOR"
## [4] "REGIÓN" "DEPARTAMENTO.DOMICILIO" "CIUDAD.DOMICILIO"
## [7] "CIIU" "MACROSECTOR" "INGRESOS.OPERACIONALES"
## [10] "GANANCIA..PÉRDIDA." "TOTAL.ACTIVOS" "TOTAL.PASIVOS"
## [13] "TOTAL.PATRIMONIO" "Año.de.Corte"
# Resumen de valores faltantes
missing_values_summary <- colSums(is.na(data))
missing_values_summary
## NIT RAZÓN.SOCIAL SUPERVISOR
## 0 0 0
## REGIÓN DEPARTAMENTO.DOMICILIO CIUDAD.DOMICILIO
## 0 0 0
## CIIU MACROSECTOR INGRESOS.OPERACIONALES
## 0 0 0
## GANANCIA..PÉRDIDA. TOTAL.ACTIVOS TOTAL.PASIVOS
## 0 0 0
## TOTAL.PATRIMONIO Año.de.Corte
## 0 0Eliminación de filas con valores faltantes en columnas críticas
data_clean <- na.omit(data)Comprobación y imputación de valores faltantes
if ("INGRESOS OPERACIONALES" %in% colnames(data_clean) && any(is.na(data_clean$`INGRESOS OPERACIONALES`))) {
data_clean$`INGRESOS OPERACIONALES`[is.na(data_clean$`INGRESOS OPERACIONALES`)] <- mean(data_clean$`INGRESOS OPERACIONALES`, na.rm = TRUE)
}
if ("GANANCIA (PÉRDIDA)" %in% colnames(data_clean) && any(is.na(data_clean$`GANANCIA (PÉRDIDA)`))) {
data_clean$`GANANCIA (PÉRDIDA)`[is.na(data_clean$`GANANCIA (PÉRDIDA)`)] <- median(data_clean$`GANANCIA (PÉRDIDA)`, na.rm = TRUE)
}Recodificación de variables categóricas a factores
if ("SUPERVISOR" %in% colnames(data_clean)) {
data_clean$SUPERVISOR <- as.factor(data_clean$SUPERVISOR)
}
if ("REGIÓN" %in% colnames(data_clean)) {
data_clean$REGIÓN <- as.factor(data_clean$REGIÓN)
}
if ("CIUDAD DOMICILIO" %in% colnames(data_clean)) {
data_clean$`CIUDAD DOMICILIO` <- as.factor(data_clean$`CIUDAD DOMICILIO`)
}
if ("MACROSECTOR" %in% colnames(data_clean)) {
data_clean$MACROSECTOR <- as.factor(data_clean$MACROSECTOR)
}
# Conversión de variables monetarias a valores numéricos
if ("INGRESOS OPERACIONALES" %in% colnames(data_clean)) {
data_clean$`INGRESOS OPERACIONALES` <- as.numeric(gsub("[^0-9.]", "", data_clean$`INGRESOS OPERACIONALES`))
}
if ("GANANCIA (PÉRDIDA)" %in% colnames(data_clean)) {
data_clean$`GANANCIA (PÉRDIDA)` <- as.numeric(gsub("[^0-9.]", "", data_clean$`GANANCIA (PÉRDIDA)`))
}
if ("TOTAL ACTIVOS" %in% colnames(data_clean)) {
data_clean$`TOTAL ACTIVOS` <- as.numeric(gsub("[^0-9.]", "", data_clean$`TOTAL ACTIVOS`))
}
if ("TOTAL PASIVOS" %in% colnames(data_clean)) {
data_clean$`TOTAL PASIVOS` <- as.numeric(gsub("[^0-9.]", "", data_clean$`TOTAL PASIVOS`))
}
if ("TOTAL PATRIMONIO" %in% colnames(data_clean)) {
data_clean$`TOTAL PATRIMONIO` <- as.numeric(gsub("[^0-9.]", "", data_clean$`TOTAL PATRIMONIO`))
}Verificar los datos después de la limpieza y recodificación
str(data_clean)
## 'data.frame': 20000 obs. of 14 variables:
## $ NIT : int 899999068 900112515 830095213 860069804 800021308 890900608 890904996 900156264 800153993 900276962 ...
## $ RAZÓN.SOCIAL : chr "ECOPETROL S.A" "REFINERIA DE CARTAGENA S.A.S" "ORGANIZACIÓN TERPEL S.A." "CARBONES DEL CERREJON LIMITED" ...
## $ SUPERVISOR : Factor w/ 6 levels "SUPERFINANCIERA",..: 1 4 1 4 4 1 1 2 4 4 ...
## $ REGIÓN : Factor w/ 7 levels "Antioquia","Bogotá - Cundinamarca",..: 2 4 2 2 2 1 1 2 2 2 ...
## $ DEPARTAMENTO.DOMICILIO: chr "BOGOTA D.C." "BOLIVAR" "BOGOTA D.C." "BOGOTA D.C." ...
## $ CIUDAD.DOMICILIO : chr "BOGOTA D.C.-BOGOTA D.C." "CARTAGENA-BOLIVAR" "BOGOTA D.C.-BOGOTA D.C." "BOGOTA D.C.-BOGOTA D.C." ...
## $ CIIU : int 610 1921 4661 510 510 4711 3513 8430 6120 4711 ...
## $ MACROSECTOR : Factor w/ 6 levels "AGROPECUARIO",..: 5 4 2 5 5 2 6 6 6 2 ...
## $ INGRESOS.OPERACIONALES: chr "$144.82" "$27.86" "$23.60" "$16.39" ...
## $ GANANCIA..PÉRDIDA. : chr "$33.41" "$2.19" "$0.33" "$6.05" ...
## $ TOTAL.ACTIVOS : chr "$216.85" "$42.84" "$7.48" "$10.45" ...
## $ TOTAL.PASIVOS : chr "$125.81" "$16.48" "$4.47" "$9.00" ...
## $ TOTAL.PATRIMONIO : chr "$91.03" "$26.36" "$3.01" "$1.45" ...
## $ Año.de.Corte : int 2022 2022 2022 2022 2022 2022 2022 2022 2022 2022 ...Diagnóstico Inicial de Variables (Análisis Univariado)
Filtrar datos por año
data_2021 <- data_clean %>% filter(Año.de.Corte == 2021)
data_2022 <- data_clean %>% filter(Año.de.Corte == 2022)Ingresos Operacionales
Distribución de Ingresos Operacionales (2021 vs 2022)
El gráfico de distribución muestra la frecuencia de los ingresos operacionales anuales de las empresas en millones de pesos colombianos, comparando los años 2021 y 2022. Se observa que la mayoría de las empresas reportan ingresos operacionales en el rango más bajo, con una marcada disminución en la frecuencia a medida que los ingresos aumentan. Esta tendencia es consistente para ambos años, aunque se nota una ligera variación en las frecuencias entre los dos años.
# Histograma comparativo para Ingresos Operacionales en 2021 y 2022
fig <- plot_ly() %>%
add_histogram(x = data_2021$`INGRESOS.OPERACIONALES`, name = '2021', marker = list(color = '#168aad')) %>%
add_histogram(x = data_2022$`INGRESOS.OPERACIONALES`, name = '2022', marker = list(color = '#99d98c')) %>%
layout(barmode = 'overlay',
title = 'Distribución de Ingresos Operacionales (2021 vs 2022)',
xaxis = list(title = 'Ingresos operacionales anuales de la empresa (en millones de pesos colombianos). '),
yaxis = list(title = 'Frecuencia'))
figAnálisis de la Distribución de Ganancia (Pérdida) (2021 vs 2022)
En la distribución de Ganancia (Pérdida) anual de las empresas colombianas para los años 2021 y 2022, se observa una alta concentración de empresas con ganancias cercanas a cero. Sin embargo, la mayoría de las empresas presentan pérdidas o ganancias mínimas, con una clara dispersión en ambos extremos del eje X. Los datos del año 2022 muestran una distribución ligeramente más dispersa en comparación con 2021, lo que indica una variabilidad mayor en las ganancias y pérdidas de las empresas durante ese año.
# Histograma comparativo para Ganancia (Pérdida) en 2021 y 2022
fig <- plot_ly() %>%
add_histogram(x = data_2021$`GANANCIA..PÉRDIDA`, name = '2021', marker = list(color = '#168aad')) %>%
add_histogram(x = data_2022$`GANANCIA..PÉRDIDA`, name = '2022', marker = list(color = '#99d98c')) %>%
layout(barmode = 'overlay',
title = 'Distribución de Ganancia (Pérdida) (2021 vs 2022)',
xaxis = list(title = 'Ganancia o pérdida anual de la empresa (en millones de pesos colombianos).'),
yaxis = list(title = 'Frecuencia'))
fig# Histograma comparativo para Total Activos en 2021 y 2022
fig <- plot_ly() %>%
add_histogram(x = data_2021$`TOTAL.ACTIVOS`, name = '2021', marker = list(color = '#168aad')) %>%
add_histogram(x = data_2022$`TOTAL.ACTIVOS`, name = '2022', marker = list(color = '#99d98c')) %>%
layout(barmode = 'overlay',
title = 'Distribución de Total Activos (2021 vs 2022)',
xaxis = list(title = 'Total de activos de la empresa (en millones de pesos colombianos).'),
yaxis = list(title = 'Frecuencia'))
fig# Histograma comparativo para Total Pasivos en 2021 y 2022
fig <- plot_ly() %>%
add_histogram(x = data_2021$`TOTAL.PASIVOS`, name = '2021', marker = list(color = '#168aad')) %>%
add_histogram(x = data_2022$`TOTAL.PASIVOS`, name = '2022', marker = list(color = '#99d98c')) %>%
layout(barmode = 'overlay',
title = 'Distribución de Total Pasivos (2021 vs 2022)',
xaxis = list(title = 'Total de pasivos de la empresa (en millones de pesos colombianos).'),
yaxis = list(title = 'Frecuencia'))
figVariables Categóricas
Supervisor
# Filtrar las 10 categorías más frecuentes
top_supervisor_2021 <- data_clean %>%
filter(Año.de.Corte == 2021) %>%
count(SUPERVISOR, sort = TRUE) %>%
top_n(10)
## Selecting by n
top_supervisor_2022 <- data_clean %>%
filter(Año.de.Corte == 2022) %>%
count(SUPERVISOR, sort = TRUE) %>%
top_n(10)
## Selecting by n
# Unir los datos de ambos años
top_supervisor <- bind_rows(
mutate(top_supervisor_2021, Año.de.Corte = "2021"),
mutate(top_supervisor_2022, Año.de.Corte = "2022")
)# Gráfico de Barras Agrupadas para las 10 categorías más frecuentes de Supervisor
fig <- plot_ly(top_supervisor, x = ~SUPERVISOR, y = ~n, color = ~Año.de.Corte, type = 'bar', colors = c('2021' = '#168aad', '2022' = '#99d98c'))
fig <- fig %>% layout(title = 'Distribución de las 10 Principales Categorías de SUPERVISOR por Año',
xaxis = list(title = 'Entidad supervisora de la empresa.'),
yaxis = list(title = 'Frecuencia Absoluta'),
barmode = 'group')
figRegión
# Filtrar las 10 categorías más frecuentes
top_region_2021 <- data_clean %>%
filter(Año.de.Corte == 2021) %>%
count(REGIÓN, sort = TRUE) %>%
top_n(10)
## Selecting by n
top_region_2022 <- data_clean %>%
filter(Año.de.Corte == 2022) %>%
count(REGIÓN, sort = TRUE) %>%
top_n(10)
## Selecting by n
# Unir los datos de ambos años
top_region <- bind_rows(
mutate(top_region_2021, Año.de.Corte = "2021"),
mutate(top_region_2022, Año.de.Corte = "2022")
)# Gráfico de Barras Agrupadas para las 10 categorías más frecuentes de Región
fig <- plot_ly(top_region, x = ~REGIÓN, y = ~n, color = ~Año.de.Corte, type = 'bar', colors = c('2021' = '#168aad', '2022' = '#99d98c'))
fig <- fig %>% layout(title = 'Distribución de las 10 Principales Categorías de REGIÓN por Año',
xaxis = list(title = 'Región geográfica donde está ubicada la empresa.'),
yaxis = list(title = 'Frecuencia Absoluta'),
barmode = 'group')
figDepartamento Domicilio
# Filtrar las 10 categorías más frecuentes
top_departamento_2021 <- data_clean %>%
filter(Año.de.Corte == 2021) %>%
count(`DEPARTAMENTO.DOMICILIO`, sort = TRUE) %>%
top_n(10)
## Selecting by n
top_departamento_2022 <- data_clean %>%
filter(Año.de.Corte == 2022) %>%
count(`DEPARTAMENTO.DOMICILIO`, sort = TRUE) %>%
top_n(10)
## Selecting by n
# Unir los datos de ambos años
top_departamento <- bind_rows(
mutate(top_departamento_2021, Año.de.Corte = "2021"),
mutate(top_departamento_2022, Año.de.Corte = "2022")
)# Gráfico de Barras Agrupadas para las 10 categorías más frecuentes de Departamento Domicilio
fig <- plot_ly(top_departamento, x = ~`DEPARTAMENTO.DOMICILIO`, y = ~n, color = ~Año.de.Corte, type = 'bar', colors = c('2021' = '#168aad', '2022' = '#99d98c'))
fig <- fig %>% layout(title = 'Distribución de las 10 Principales Categorías de DEPARTAMENTO DOMICILIO por Año',
xaxis = list(title = 'Departamento donde está domiciliada la empresa.'),
yaxis = list(title = 'Frecuencia Absoluta'),
barmode = 'group')
figMacrosector
# Filtrar las 10 categorías más frecuentes
top_macrosector_2021 <- data_clean %>%
filter(Año.de.Corte == 2021) %>%
count(MACROSECTOR, sort = TRUE) %>%
top_n(10)
## Selecting by n
top_macrosector_2022 <- data_clean %>%
filter(Año.de.Corte == 2022) %>%
count(MACROSECTOR, sort = TRUE) %>%
top_n(10)
## Selecting by n
# Unir los datos de ambos años
top_macrosector <- bind_rows(
mutate(top_macrosector_2021, Año.de.Corte = "2021"),
mutate(top_macrosector_2022, Año.de.Corte = "2022")
)# Gráfico de Barras Agrupadas para las 10 categorías más frecuentes de Macrosector
fig <- plot_ly(top_macrosector, x = ~MACROSECTOR, y = ~n, color = ~Año.de.Corte, type = 'bar', colors = c('2021' = '#168aad', '2022' = '#99d98c'))
fig <- fig %>% layout(title = 'Distribución de las 10 Principales Categorías de MACROSECTOR por Año',
xaxis = list(title = 'Sector económico principal de la empresa.'),
yaxis = list(title = 'Frecuencia Absoluta'),
barmode = 'group')
figCiudades Principales
# Unificar variaciones de "BOGOTA D.C" Ya que hay errores en la base de datos
data_clean$`CIUDAD.DOMICILIO` <- gsub("BOGOTA D.C.(-|,|\\s)*BOGOTA D.C.", "BOGOTA D.C.", data_clean$`CIUDAD.DOMICILIO`)
data_clean$`CIUDAD.DOMICILIO` <- gsub("BOGOTA D.C.", "BOGOTA D.C.", data_clean$`CIUDAD.DOMICILIO`, ignore.case = TRUE)
# Filtrar las 10 ciudades más frecuentes
top_cities_2021 <- data_clean %>%
filter(Año.de.Corte == 2021) %>%
count(`CIUDAD.DOMICILIO`, sort = TRUE) %>%
top_n(10)
## Selecting by n
top_cities_2022 <- data_clean %>%
filter(Año.de.Corte == 2022) %>%
count(`CIUDAD.DOMICILIO`, sort = TRUE) %>%
top_n(10)
## Selecting by n
# Unir los datos de ambos años
top_cities <- bind_rows(
mutate(top_cities_2021, Año.de.Corte = "2021"),
mutate(top_cities_2022, Año.de.Corte = "2022")
)# Gráfico de Barras Agrupadas para las 10 principales ciudades de domicilio
fig <- plot_ly(top_cities, x = ~`CIUDAD.DOMICILIO`, y = ~n, color = ~Año.de.Corte, type = 'bar', colors = c('2021' = '#168aad', '2022' = '#99d98c'))
fig <- fig %>% layout(title = 'Distribución de las 10 Principales Ciudades de Domicilio por Año',
xaxis = list(title = 'Ciudad Domicilio', tickangle = 45, tickmode = "array", tickvals = top_cities$`CIUDAD.DOMICILIO`, ticktext = top_cities$`CIUDAD.DOMICILIO`),
yaxis = list(title = 'Frecuencia Absoluta'),
barmode = 'group')
figIntroducción al Análisis Multivariado
En este estudio, nos enfocaremos en el análisis de datos de las 10,000 empresas más grandes de Colombia, considerando múltiples variables financieras y categóricas. Utilizaremos técnicas como el análisis de componentes principales (PCA) para reducir la dimensionalidad de los datos y visualizar las relaciones entre las variables, y el análisis de correspondencias para explorar asociaciones entre variables categóricas. Además, realizaremos un análisis bivariado tentativo para entender mejor las relaciones entre las variables clave.
El objetivo de este análisis es proporcionar una visión integral y detallada de los factores que influyen en el desempeño de estas empresas, así como identificar patrones y tendencias que puedan ser relevantes para la toma de decisiones estratégicas.
Análisis Tentativo Bivariado de una Variable Considerada de Interés
Para comenzar con el análisis bivariado, exploraremos la relación entre INGRESOS.OPERACIONALES y TOTAL.ACTIVOS, dos variables clave que pueden proporcionar información valiosa sobre el desempeño financiero de las empresas.
Gráfico de Dispersión
El gráfico muestra la relación entre los ingresos operacionales y el total de activos para los años 2021 y 2022. Se observa que, en general, hay una tendencia positiva entre ambas variables, lo que indica que las empresas con mayores activos tienden a tener mayores ingresos operacionales.
- Distribución de los puntos: Los puntos están más concentrados en la parte inferior izquierda del gráfico, sugiriendo que la mayoría de las empresas tienen tanto activos como ingresos operacionales bajos.
- Comparación entre años: Los puntos verdes y azules, que representan los años 2022 y 2021 respectivamente, están distribuidos de manera similar, lo que sugiere que no hubo cambios significativos en la relación entre estas dos variables de un año a otro.
- Variabilidad: A medida que aumentan los activos, también se incrementa la variabilidad en los ingresos operacionales, lo que podría indicar diferencias en la eficiencia operativa o en las estrategias de las empresas.
Este análisis permite entender mejor cómo el tamaño de los activos de una empresa se relaciona con su capacidad para generar ingresos operacionales.
# Gráfico de dispersión para Ingresos Operacionales vs Total Activos por año
fig <- plot_ly(data_clean, x = ~`TOTAL.ACTIVOS`, y = ~`INGRESOS.OPERACIONALES`, color = ~as.factor(Año.de.Corte),
colors = c('2021' = '#168aad', '2022' = '#99d98c'), type = 'scatter', mode = 'markers') %>%
layout(title = 'Relación entre Ingresos Operacionales y Total Activos por Año',
xaxis = list(title = 'Total Activos'),
yaxis = list(title = 'Ingresos Operacionales'),
legend = list(title = list(text = 'Año de Corte')))
figCuando se trata de grandes conjuntos de datos, un gráfico de dispersión puede volverse difícil de interpretar debido a la gran cantidad de puntos. En este caso, utilizar técnicas de reducción de dimensionalidad como el Análisis de Componentes Principales (PCA) es una excelente idea. PCA puede ayudar a identificar patrones y relaciones subyacentes al reducir la dimensionalidad del conjunto de datos y resaltar las variaciones más significativas.
Análisis de Componentes Principales (PCA)
Introducción al PCA
El Análisis de Componentes Principales (PCA) es una técnica de reducción de dimensionalidad que se utiliza para transformar un conjunto grande de variables en un conjunto más pequeño que aún contiene la mayor parte de la información del original. Esto se logra mediante la creación de nuevas variables, llamadas componentes principales, que son combinaciones lineales de las variables originales. El objetivo principal del PCA es identificar las direcciones en las que los datos varían más y usar esas direcciones para resumir los datos con menos componentes.
Aplicación del PCA a los Datos
# Resumen estadístico de los datos
summary(data)
## NIT RAZÓN.SOCIAL SUPERVISOR REGIÓN
## Min. :800000118 Length:20000 Length:20000 Length:20000
## 1st Qu.:820001648 Class :character Class :character Class :character
## Median :890208946 Mode :character Mode :character Mode :character
## Mean :861697623
## 3rd Qu.:900324399
## Max. :901650026
## DEPARTAMENTO.DOMICILIO CIUDAD.DOMICILIO CIIU MACROSECTOR
## Length:20000 Length:20000 Min. : 111 Length:20000
## Class :character Class :character 1st Qu.:2819 Class :character
## Mode :character Mode :character Median :4659 Mode :character
## Mean :4612
## 3rd Qu.:6202
## Max. :9609
## INGRESOS.OPERACIONALES GANANCIA..PÉRDIDA. TOTAL.ACTIVOS
## Length:20000 Length:20000 Length:20000
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
## TOTAL.PASIVOS TOTAL.PATRIMONIO Año.de.Corte
## Length:20000 Length:20000 Min. :2021
## Class :character Class :character 1st Qu.:2021
## Mode :character Mode :character Median :2022
## Mean :2022
## 3rd Qu.:2022
## Max. :2022# Cargar los paquetes necesarios
library(dplyr)
library(tidyr)
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
if (!require(GGally)) install.packages("GGally")
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library(GGally)
# Cargar el paquete GGally
library(GGally)# Asegurarse de que todos los valores numéricos estén correctamente convertidos
data_numeric <- data_clean %>%
select(`INGRESOS.OPERACIONALES`, `GANANCIA..PÉRDIDA.`, `TOTAL.ACTIVOS`, `TOTAL.PASIVOS`, `TOTAL.PATRIMONIO`) %>%
mutate(across(everything(), ~as.numeric(gsub("[^0-9.-]", "", .)))) %>%
na.omit()
# Verificar los tipos de datos
str(data_numeric)
## 'data.frame': 20000 obs. of 5 variables:
## $ INGRESOS.OPERACIONALES: num 144.8 27.9 23.6 16.4 15.3 ...
## $ GANANCIA..PÉRDIDA. : num 33.41 2.19 0.33 6.05 2.16 ...
## $ TOTAL.ACTIVOS : num 216.85 42.84 7.48 10.45 14.27 ...
## $ TOTAL.PASIVOS : num 125.81 16.48 4.47 9 6.34 ...
## $ TOTAL.PATRIMONIO : num 91.03 26.36 3.01 1.45 7.93 ...# Normalizar los datos
data_numeric_scaled <- scale(data_numeric)# Crear gráficos de pares
plotpairs <- function(data) {
ggpairs(data)
}
# Llamar a la función plotpairs
plotpairs(data_numeric_scaled)
# Calcular la matriz de correlación
cor_matrix <- cor(data_numeric_scaled)
# Mostrar la matriz de correlación con kable
library(knitr)
kable(cor_matrix, digits = 3)| INGRESOS.OPERACIONALES | GANANCIA..PÉRDIDA. | TOTAL.ACTIVOS | TOTAL.PASIVOS | TOTAL.PATRIMONIO | |
|---|---|---|---|---|---|
| INGRESOS.OPERACIONALES | 1.000 | 0.897 | 0.907 | 0.937 | 0.803 |
| GANANCIA..PÉRDIDA. | 0.897 | 1.000 | 0.902 | 0.887 | 0.851 |
| TOTAL.ACTIVOS | 0.907 | 0.902 | 1.000 | 0.969 | 0.959 |
| TOTAL.PASIVOS | 0.937 | 0.887 | 0.969 | 1.000 | 0.859 |
| TOTAL.PATRIMONIO | 0.803 | 0.851 | 0.959 | 0.859 | 1.000 |
# Crear un mapa de calor para la matriz de correlación
heatmap(cor_matrix, Rowv = NA, Colv = NA, col = colorRampPalette(c("#ade8f4", "#03045e"))(20), scale = "none", margins = c(5, 5))
# Instalar y cargar Factoshiny si no está instalado
if (!require(Factoshiny)) install.packages("Factoshiny")
## Loading required package: Factoshiny
## Loading required package: shiny
## Loading required package: FactoInvestigate
library(Factoshiny)# Instalar y cargar ade4 y FactoClass si no están instalados
if (!require(ade4)) install.packages("ade4")
## Loading required package: ade4
##
## Attaching package: 'ade4'
## The following object is masked from 'package:FactoMineR':
##
## reconst
if (!require(FactoClass)) install.packages("FactoClass")
## Loading required package: FactoClass
## Loading required package: ggrepel
## Loading required package: xtable
## Loading required package: scatterplot3d
##
## Attaching package: 'FactoClass'
## The following object is masked _by_ '.GlobalEnv':
##
## plotpairs
library(ade4)
library(FactoClass)
# Realizar el ACP con ade4
acp <- dudi.pca(data_numeric_scaled, scannf = FALSE, nf = 3)
# Obtener los valores propios (eigenvalues)
valp <- t(inertia.dudi(acp)$tot.inertia)
kable(valp, digits = 3)| Ax1 | Ax2 | Ax3 | Ax4 | Ax5 | |
|---|---|---|---|---|---|
| inertia | 4.590 | 0.226 | 0.130 | 0.054 | 0 |
| cum | 4.590 | 4.816 | 4.946 | 5.000 | 5 |
| cum(%) | 91.799 | 96.324 | 98.919 | 100.000 | 100 |
# Graficar los valores propios
barplot(acp$eig, horiz = TRUE)
abline(v = 1, lty = 3)
Análisis de Componentes Principales (ACP)
El gráfico de barras muestra la distribución de los valores propios, destacando que el primer componente principal explica la mayor parte de la variabilidad en los datos, con un porcentaje acumulado del 91.799%. Los siguientes componentes aportan una varianza mucho menor.
# Cargar factoextra si no está instalado
if (!require(factoextra)) install.packages("factoextra")
library(factoextra)El gráfico de Scree plot y la matriz de componentes muestran los resultados del Análisis de Componentes Principales (ACP) aplicado a los datos financieros de las empresas. El Scree plot visualiza la varianza explicada por cada componente, permitiendo identificar cuántos componentes principales son necesarios para capturar la mayor parte de la variabilidad en los datos.
# Gráfico Scree Plot
fviz_screeplot(acp, addlabels = TRUE, ylim = c(0, 50))
Scree Plot
El Scree plot muestra que el primer componente principal (PC1) explica el 91.8% de la varianza total, mientras que el segundo (PC2) explica un 4.5%, y el tercero (PC3) un 2.6%. Los componentes adicionales explican una cantidad decreciente de varianza. Esto sugiere que los dos primeros componentes son suficientes para capturar la mayoría de la información en los datos.
# Matriz de Componentes
kable(acp$c1, digits = 3)| CS1 | CS2 | CS3 | |
|---|---|---|---|
| INGRESOS.OPERACIONALES | -0.443 | 0.561 | -0.165 |
| GANANCIA..PÉRDIDA. | -0.442 | 0.204 | 0.836 |
| TOTAL.ACTIVOS | -0.462 | -0.242 | -0.233 |
| TOTAL.PASIVOS | -0.454 | 0.207 | -0.466 |
| TOTAL.PATRIMONIO | -0.436 | -0.736 | 0.052 |
Matriz de Componentes
La matriz de componentes proporciona las cargas de cada variable en los tres primeros componentes. Estas cargas indican la correlación entre las variables originales y los componentes principales:
- PC1 está fuertemente influenciado por todas las variables, especialmente INGRESOS.OPERACIONALES, TOTAL.ACTIVOS, TOTAL.PASIVOS y TOTAL.PATRIMONIO, con cargas negativas altas, lo que sugiere que este componente captura la variabilidad común en estas variables.
- PC2 muestra una fuerte carga positiva en GANANCIA..PÉRDIDA. y en menor medida en INGRESOS.OPERACIONALES y TOTAL.PATRIMONIO, indicando que este componente puede estar relacionado con la rentabilidad de las empresas.
- PC3 tiene una carga positiva moderada en GANANCIA..PÉRDIDA., lo que podría indicar que este componente captura variabilidad específica en las ganancias o pérdidas de las empresas.
En resumen, el ACP ha reducido las dimensiones de los datos a unos pocos componentes principales que capturan la mayor parte de la variabilidad, facilitando así la interpretación y el análisis de las relaciones subyacentes en los datos financieros de las empresas.
# Asumiendo que data_clean es el dataset limpio desde el análisis univariado
# Seleccionar las variables numéricas y una variable categórica para segmentar
data_numeric <- data_clean %>%
select(`INGRESOS.OPERACIONALES`, `GANANCIA..PÉRDIDA.`, `TOTAL.ACTIVOS`, `TOTAL.PASIVOS`, `TOTAL.PATRIMONIO`, `REGIÓN`)
# Convertir las columnas numéricas correctamente y revisar valores de 'REGIÓN'
data_numeric <- data_numeric %>%
mutate(
across(
c(`INGRESOS.OPERACIONALES`, `GANANCIA..PÉRDIDA.`, `TOTAL.ACTIVOS`, `TOTAL.PASIVOS`, `TOTAL.PATRIMONIO`),
~as.numeric(gsub("[^0-9.-]", "", .))
),
REGIÓN = as.factor(REGIÓN)
) %>%
na.omit()
# Verificar los datos
str(data_numeric)
## 'data.frame': 20000 obs. of 6 variables:
## $ INGRESOS.OPERACIONALES: num 144.8 27.9 23.6 16.4 15.3 ...
## $ GANANCIA..PÉRDIDA. : num 33.41 2.19 0.33 6.05 2.16 ...
## $ TOTAL.ACTIVOS : num 216.85 42.84 7.48 10.45 14.27 ...
## $ TOTAL.PASIVOS : num 125.81 16.48 4.47 9 6.34 ...
## $ TOTAL.PATRIMONIO : num 91.03 26.36 3.01 1.45 7.93 ...
## $ REGIÓN : Factor w/ 7 levels "Antioquia","Bogotá - Cundinamarca",..: 2 4 2 2 2 1 1 2 2 2 ...
# Normalizar los datos
data_numeric_scaled <- scale(data_numeric[, -6])
# Realizar el ACP con FactoMineR
acp <- PCA(data_numeric_scaled, graph = FALSE)
# Crear el biplot con factoextra
p <- fviz_pca_biplot(acp, label = "var", habillage = data_numeric$REGIÓN, addEllipses = TRUE, ellipse.level = 0.95) +
scale_color_manual(values = c("orange", "darkgreen", "red", "blue", "purple", "cyan", "magenta")) +
theme_minimal() +
scale_x_log10() +
scale_y_log10()
p_interactive <- ggplotly(p)
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning: Removed 19020 rows containing non-finite outside the scale range
## (`stat_ellipse()`).
## Warning: Removed 19020 rows containing non-finite outside the scale range
## (`stat_mean()`).
## PCA Biplot
p_interactiveAnálisis de Componentes Principales (PCA) - Biplot
El biplot de la PCA muestra una visualización clara de la relación entre las variables y la distribución de las empresas en diferentes regiones. En el gráfico, se observa cómo las empresas se agrupan en función de sus características financieras, representadas por las dos primeras dimensiones del análisis.
Observaciones:
- Variables Financieras: Las variables
TOTAL ACTIVOSyTOTAL PATRIMONIOse agrupan muy cerca, lo que indica una alta correlación entre ellas. - Distribución Regional: Las empresas de
Bogotá - CundinamarcayAntioquiamuestran una mayor dispersión en comparación con otras regiones, sugiriendo una mayor diversidad en sus perfiles financieros. - Grupos: La mayoría de las empresas de
Costa PacíficayCentro - Orientese concentran en áreas específicas del gráfico, lo que podría indicar similitudes en sus características económicas.
Este biplot proporciona una visión general de cómo las empresas colombianas se diferencian y se relacionan según sus regiones y sus características financieras principales.
# Asumiendo que data_clean es el dataset limpio desde el análisis univariado
# Seleccionar las variables numéricas y una variable categórica para segmentar
data_numeric <- data_clean %>%
select(`INGRESOS.OPERACIONALES`, `GANANCIA..PÉRDIDA.`, `TOTAL.ACTIVOS`, `TOTAL.PASIVOS`, `TOTAL.PATRIMONIO`, `MACROSECTOR`)
# Convertir las columnas numéricas correctamente y revisar valores de 'MACROSECTOR'
data_numeric <- data_numeric %>%
mutate(
across(
c(`INGRESOS.OPERACIONALES`, `GANANCIA..PÉRDIDA.`, `TOTAL.ACTIVOS`, `TOTAL.PASIVOS`, `TOTAL.PATRIMONIO`),
~as.numeric(gsub("[^0-9.-]", "", .))
),
MACROSECTOR = as.factor(MACROSECTOR)
) %>%
na.omit()
# Verificar los datos
str(data_numeric)
## 'data.frame': 20000 obs. of 6 variables:
## $ INGRESOS.OPERACIONALES: num 144.8 27.9 23.6 16.4 15.3 ...
## $ GANANCIA..PÉRDIDA. : num 33.41 2.19 0.33 6.05 2.16 ...
## $ TOTAL.ACTIVOS : num 216.85 42.84 7.48 10.45 14.27 ...
## $ TOTAL.PASIVOS : num 125.81 16.48 4.47 9 6.34 ...
## $ TOTAL.PATRIMONIO : num 91.03 26.36 3.01 1.45 7.93 ...
## $ MACROSECTOR : Factor w/ 6 levels "AGROPECUARIO",..: 5 4 2 5 5 2 6 6 6 2 ...
# Normalizar los datos
data_numeric_scaled <- scale(data_numeric[, -6])
# Realizar el ACP con FactoMineR
acp <- PCA(data_numeric_scaled, graph = FALSE)
# Crear el biplot con factoextra
p <- fviz_pca_biplot(acp, label = "var", habillage = data_numeric$MACROSECTOR, addEllipses = TRUE, ellipse.level = 0.95) +
scale_color_manual(values = c("orange", "darkgreen", "red", "blue", "purple", "cyan", "magenta", "brown", "pink", "gray")) +
theme_minimal() +
scale_x_log10() +
scale_y_log10()
p_interactive <- ggplotly(p)
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## Warning in transformation$transform(x): Se han producido NaNs
## Warning in scale_y_log10(): log-10 transformation introduced infinite values.
## log-10 transformation introduced infinite values.
## Warning in scale_x_log10(): log-10 transformation introduced infinite values.
## Warning: Removed 19020 rows containing non-finite outside the scale range
## (`stat_ellipse()`).
## Warning: Removed 19020 rows containing non-finite outside the scale range
## (`stat_mean()`).
p_interactiveAnalizar el biplot con macrosectores
El biplot anterior muestra la distribución de las empresas según los macrosectores económicos para los años 2021 y 2022. Los componentes principales 1 y 2 explican el 91.8% y 4.5% de la variabilidad total, respectivamente. En el gráfico, se puede observar que las empresas de los sectores de Servicios y Comercio tienden a agruparse en la parte inferior del gráfico, lo que indica que tienen menores valores de activos totales y patrimonio. Por otro lado, las empresas del sector Agropecuario y Manufactura están más dispersas, mostrando una mayor variabilidad en sus características financieras. Además, las elipses de confianza al 95% ayudan a visualizar la concentración y dispersión de cada grupo, indicando una mayor variabilidad dentro del sector Comercio en comparación con los otros sectores.
Estos hallazgos sugieren que los sectores Agropecuario y Manufactura tienen una distribución más amplia en términos de activos y patrimonio, mientras que los sectores Servicios y Comercio tienden a ser más homogéneos.
# Cargar las librerías
library(sf)
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(leaflet)# Leer el shapefile de los departamentos de Colombia
shape <- st_read("C:/Users/pined/Downloads/SHP_MGN2021_COLOMBIA/MGN_2021_COLOMBIA/COLOMBIA/COLOMBIA.shp")
## Reading layer `COLOMBIA' from data source
## `C:\Users\pined\Downloads\SHP_MGN2021_COLOMBIA\MGN_2021_COLOMBIA\COLOMBIA\COLOMBIA.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 33 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.73562 ymin: -4.229406 xmax: -66.84722 ymax: 13.39473
## Geodetic CRS: MAGNA-SIRGAS# Asegurarse de que data_clean sea un data.frame
data_clean <- as.data.frame(data_clean)
# Convertir las columnas numéricas a valores numéricos
data_clean <- data_clean %>%
mutate(
INGRESOS.OPERACIONALES = as.numeric(gsub("[^0-9.-]", "", INGRESOS.OPERACIONALES)),
TOTAL.ACTIVOS = as.numeric(gsub("[^0-9.-]", "", TOTAL.ACTIVOS))
)# Resumir los datos empresariales por departamento
datos_resumidos <- data_clean %>%
group_by(DEPARTAMENTO.DOMICILIO) %>%
summarise(
total_ingresos = sum(INGRESOS.OPERACIONALES, na.rm = TRUE),
total_activos = sum(TOTAL.ACTIVOS, na.rm = TRUE)
) %>%
ungroup()# Verificar los nombres de las columnas
colnames(datos_resumidos)
## [1] "DEPARTAMENTO.DOMICILIO" "total_ingresos" "total_activos"
colnames(shape)
## [1] "DPTO_CCDGO" "DPTO_CNMBR" "DPTO_ANO_C" "DPTO_ACT_A" "DPTO_NAREA"
## [6] "DPTO_CSMBL" "DPTO_VGNC" "Shape_Leng" "Shape_Area" "geometry"
# Renombrar columna en shapefile para que coincida con la columna en tus datos
shape <- shape %>%
rename(DEPARTAMENTO.DOMICILIO = DPTO_CNMBR)
# Unir datos con el shapefile
shape_datos <- shape %>%
left_join(datos_resumidos, by = "DEPARTAMENTO.DOMICILIO")# Corregir nombres de departamentos en datos empresariales
datos_resumidos <- datos_resumidos %>%
mutate(DEPARTAMENTO.DOMICILIO = case_when(
DEPARTAMENTO.DOMICILIO == "BOGOTA D.C." ~ "BOGOTÁ, D.C.",
TRUE ~ DEPARTAMENTO.DOMICILIO
))shape_datos <- shape %>%
left_join(datos_resumidos, by = c("DEPARTAMENTO.DOMICILIO" = "DEPARTAMENTO.DOMICILIO"))
# Verificar unión de datos
head(shape_datos)
## Simple feature collection with 6 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -77.12783 ymin: 3.730633 xmax: -71.94885 ymax: 11.10537
## Geodetic CRS: MAGNA-SIRGAS
## DPTO_CCDGO DEPARTAMENTO.DOMICILIO DPTO_ANO_C DPTO_ACT_A
## 1 05 ANTIOQUIA 1886 Constitucion Politica de 1886
## 2 08 ATLÁNTICO 1910 Ley 21 de 1910
## 3 11 BOGOTÁ, D.C. 1538 Constitucion Politica de 1886
## 4 13 BOLÍVAR 1886 Constitucion Politica de 1886
## 5 15 BOYACÁ 1886 Constitucion Politica de 1886
## 6 17 CALDAS 1905 11 de Abril de 1905
## DPTO_NAREA DPTO_CSMBL DPTO_VGNC Shape_Leng Shape_Area total_ingresos
## 1 62808.630 3 2021 21.492374 5.1352363 504.33
## 2 3314.447 3 2021 2.573162 0.2738225 NA
## 3 1622.853 3 2021 3.765324 0.1322079 1667.85
## 4 26719.968 3 2021 16.233072 2.1956393 NA
## 5 23138.048 3 2021 15.906491 1.8883908 NA
## 6 7425.246 3 2021 6.663759 0.6054998 24.54
## total_activos geometry
## 1 840.40 MULTIPOLYGON (((-76.41355 8...
## 2 NA MULTIPOLYGON (((-74.84946 1...
## 3 2233.79 MULTIPOLYGON (((-74.07059 4...
## 4 NA MULTIPOLYGON (((-76.17318 9...
## 5 NA MULTIPOLYGON (((-72.17368 7...
## 6 18.18 MULTIPOLYGON (((-74.67154 5...# Crear mapa de calor
ggplot(data = shape_datos) +
geom_sf(aes(fill = total_ingresos)) +
scale_fill_viridis_c(option = "plasma", direction = -1) +
labs(title = "Total Ingresos por Departamento", fill = "Ingresos") +
theme_minimal()
Mapa de ingresos por departamento.
Este mapa resalta las disparidades económicas entre los diferentes departamentos del país, subrayando la concentración de actividad económica en ciertas regiones mientras que otras tienen una participación económica menor. Esto podría implicar la necesidad de políticas regionales para fomentar el desarrollo económico en las áreas con menores ingresos.
Conclusiones
Importancia de las variables financieras
El análisis multivariado reveló que las variables financieras como el total de activos, pasivos y patrimonio, junto con los ingresos operacionales, son determinantes clave del desempeño empresarial en Colombia. Estas variables mostraron fuertes correlaciones entre sí, indicando que la salud financiera de una empresa está intrínsecamente relacionada con sus ingresos y capacidad de generar beneficios.
Diferencias regionales en el desempeño empresarial
El mapa de calor y el análisis PCA demostraron que existen significativas diferencias regionales en el desempeño empresarial. Regiones como Bogotá y Antioquia destacan por sus altos ingresos operacionales, lo que sugiere que las políticas económicas y el entorno empresarial en estas áreas son más favorables para el crecimiento de las empresas.
Sectorialización del desempeño
El análisis por macrosector indicó que sectores como el comercio y los servicios tienden a tener una mejor performance en términos de ingresos operacionales y activos totales. Esto subraya la necesidad de estrategias sectoriales específicas que potencien el crecimiento y la competitividad en cada uno de los sectores analizados.
Desarrollo de un proyecto exploratorio
Aunque se se realizan distintas investigaciones de la prouyección de la economía de nuestro país, este proyecto apoya al tejido colectivo del uso de el análisis multivariado en distintas áreas como la economía
Estas conclusiones respaldan los objetivos del proyecto, que incluyen entender las dinámicas financieras y regionales del desempeño empresarial en Colombia, y proporcionar una base para la toma de decisiones informadas tanto a nivel gubernamental como empresarial.
Bibliografía
Santos, S. M., Sousa, C. M., & Almeida, P. (2018). Multivariate analysis techniques applied for the performance measurement of Federal University Hospitals of Brazil. Economia e Negócios, 5(3), 23-45. Link
Mitchell, T. (2015). Bank Default Prediction: A Comparative Model using Principal Component Analysis. Journal of Stock & Forex Trading, 4(2). DOI: 10.4172/2168-9458.1000149. Link
Jolliffe, I. T., & Cadima, J. (2016). Principal component analysis: a review and recent developments. Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 374(2065), 20150202.
Torres, C. J. (2024). Análisis de Componentes Principales en la Educación. Estadística Descriptiva Multivariada. Link
Campo, E. P. (2020). Estadística descriptiva multivariada.
Departamento Administrativo Nacional de Estadística (DANE). (2024). Shape de los departamentos de Colombia. Link