Paquetes utilizados

paquetes <- c("readxl", "dplyr", "ggplot2", "knitr")

for (p in paquetes) {
  if (!requireNamespace(p, quietly = TRUE)) {
    install.packages(p)
  }
}

library(readxl)
library(dplyr)
library(ggplot2)
library(knitr)

1. Introducción

Este informe desarrolla la Actividad 122 de la unidad de Análisis Descriptivo, usando la base de datos empresas_depuradas.xlsx, que contiene información de un grupo de empresas registradas. El objetivo es analizar al menos dos variables cualitativas y dos cuantitativas, apoyándose en tablas de frecuencia e indicadores estadísticos calculados directamente a partir de los datos.

2. Descripción general de la base de datos

datos <- read_excel("empresas_depuradas.xlsx")
dim(datos)
## [1] 354  10
str(datos)
## tibble [354 × 10] (S3: tbl_df/tbl/data.frame)
##  $ nit                     : chr [1:354] "890200584-7" "91252545-4" "63348687-3" "91290712-1" ...
##  $ razon_social            : chr [1:354] "MANUEL COBOS DUARTE LIMITADA" "CASTILLO RUEDA DANIEL" "RIBERO GOMEZ MASSIEL" "CASTRO NAVAS YEBRAIL ARMANDO" ...
##  $ tipo_juridico           : chr [1:354] "SOC. LIMITADA" "PERSONA NATURAL" "PERSONA NATURAL" "PERSONA NATURAL" ...
##  $ estado_matricula        : chr [1:354] "ACTIVO" "ACTIVO" "CANCELADO" "ACTIVO" ...
##  $ fecha_matricula         : chr [1:354] "1955-03-10" "2002-04-25" "2002-03-19" "2002-03-19" ...
##  $ actividad_economica_ciiu: chr [1:354] "Comercio De Partes, Piezas (Autopartes) Y Accesorios (Lujos) Para Vehículos Automotores" "Comercio Al Por Menor De Productos Agrícolas Para El Consumo En Establecimientos Especializados" "Comercio Al Por Menor De Artículos De Ferretería, Pinturas Y Productos De Vidrio En Establecimientos Especializados" "Actividades De Producción De Películas Cinematográficas, Videos, Programas, Anuncios Y Comerciales De Televisión" ...
##  $ ciudad                  : chr [1:354] "Bucaramanga" "Lebrija" "Bucaramanga" "Bucaramanga" ...
##  $ departamento            : chr [1:354] "SANTANDER" "SANTANDER" "SANTANDER" "SANTANDER" ...
##  $ tamano_empresa          : chr [1:354] "PEQUEÑA EMPRESA" "MICROEMPRESA" "MICROEMPRESA" "MICROEMPRESA" ...
##  $ antiguedad_anios        : num [1:354] 71 24 24 24 24 24 24 24 24 54 ...
colSums(is.na(datos))
##                      nit             razon_social            tipo_juridico 
##                        0                        0                        0 
##         estado_matricula          fecha_matricula actividad_economica_ciiu 
##                        0                        0                        0 
##                   ciudad             departamento           tamano_empresa 
##                        0                        0                        0 
##         antiguedad_anios 
##                        0
sum(duplicated(datos))
## [1] 0

La base tiene 354 observaciones y 10 variables. No se encontraron valores faltantes ni filas duplicadas, por lo que no fue necesario aplicar ningún tratamiento previo a los datos.

Las variables disponibles son: nit, razon_social, tipo_juridico, estado_matricula, fecha_matricula, actividad_economica_ciiu, ciudad, departamento, tamano_empresa y antiguedad_anios. Las variables nit y razon_social identifican a cada empresa de forma individual y no se utilizan como variables de análisis. La variable departamento no aporta información porque todas las empresas de la base pertenecen al mismo departamento, y actividad_economica_ciiu tiene un número muy alto de categorías (135), lo que la hace poco práctica para una tabla de frecuencia.

3. Clasificación y selección de variables

sapply(datos[, c("tipo_juridico", "estado_matricula", "ciudad", "tamano_empresa")],
       function(x) length(unique(x)))
##    tipo_juridico estado_matricula           ciudad   tamano_empresa 
##                7                4               11                4
summary(datos$antiguedad_anios)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    21.0    42.0    47.0    46.2    52.0    85.0

Con base en esta revisión se seleccionaron las siguientes variables:

Variables cualitativas:

  • tamano_empresa: clasifica cada empresa como microempresa, pequeña, mediana o gran empresa. Tiene solo cuatro categorías y, a diferencia de las demás variables cualitativas de la base, sigue un orden lógico de tamaño, por lo que se clasifica como cualitativa ordinal.
  • estado_matricula: indica si la empresa está activa, cancelada o en algún proceso de disolución. Tiene cuatro categorías sin un orden natural entre ellas, por lo que se clasifica como cualitativa nominal.

Se descartaron ciudad y tipo_juridico para este análisis principal: ciudad tiene once categorías, pero la gran mayoría de ellas concentran una sola empresa, lo que produce una tabla poco informativa; tipo_juridico tiene siete categorías con el mismo problema en varias de ellas. tamano_empresa y estado_matricula en cambio tienen pocas categorías y permiten una lectura clara.

Variables cuantitativas:

  • antiguedad_anios: indica cuántos años lleva registrada la empresa. Es una variable cuantitativa de razón, porque tiene un cero verdadero (una empresa recién registrada tendría antigüedad cero) y las razones entre valores tienen sentido (una empresa de 60 años tiene el doble de antigüedad que una de 30).
  • anio_matricula: la base original solo trae una variable numérica lista para analizar (antiguedad_anios), por lo que para cumplir con el mínimo de dos variables cuantitativas se construyó una segunda variable a partir de fecha_matricula, extrayendo el año de registro de cada empresa. Esta variable es cuantitativa de intervalo, ya que las diferencias entre años tienen sentido, pero no existe un cero real (el año cero no representa ausencia de tiempo) ni tiene sentido decir que un año es “el doble” de otro. Esta variable no fue inventada: proviene directamente de la fecha de matrícula ya registrada en la base, solo se extrajo el componente del año.

Es importante aclarar que estas dos variables no son dos fenómenos independientes: anio_matricula determina matemáticamente el valor de antiguedad_anios (la antigüedad es, en la práctica, el resultado de restar el año de matrícula a la fecha actual), por lo que su correlación es prácticamente perfecta. Aun así, se analizan las dos porque la base no ofrece otra variable numérica distinta, y porque justamente esa relación permite mostrar con claridad la diferencia entre una escala de razón (antiguedad_anios, con cero real y razones interpretables) y una escala de intervalo (anio_matricula, donde solo las diferencias tienen sentido). Cada una se interpreta enfocándose en lo que aporta de forma particular: la antigüedad describe el tiempo de operación de la empresa, mientras que el año de matrícula permite ubicar en qué momento histórico se concentran los registros.

datos <- datos %>%
  mutate(anio_matricula = as.integer(format(as.Date(fecha_matricula), "%Y")))

4. Análisis de la variable cualitativa: tamaño de empresa

orden_tamano <- c("MICROEMPRESA", "PEQUEÑA EMPRESA", "MEDIANA EMPRESA", "GRAN EMPRESA")

datos <- datos %>%
  mutate(tamano_empresa = factor(tamano_empresa, levels = orden_tamano, ordered = TRUE))

tabla_tamano <- datos %>%
  count(tamano_empresa) %>%
  mutate(
    frecuencia_relativa = round(n / sum(n), 4),
    porcentaje = round(frecuencia_relativa * 100, 2),
    frecuencia_acumulada = cumsum(n),
    porcentaje_acumulado = round(cumsum(frecuencia_relativa) * 100, 2)
  ) %>%
  rename(frecuencia_absoluta = n)

kable(tabla_tamano, col.names = c("Tamaño de empresa", "Frecuencia absoluta", "Frecuencia relativa",
                                   "Porcentaje (%)", "Frecuencia acumulada", "Porcentaje acumulado (%)"))
Tamaño de empresa Frecuencia absoluta Frecuencia relativa Porcentaje (%) Frecuencia acumulada Porcentaje acumulado (%)
MICROEMPRESA 257 0.7260 72.60 257 72.60
PEQUEÑA EMPRESA 85 0.2401 24.01 342 96.61
MEDIANA EMPRESA 11 0.0311 3.11 353 99.72
GRAN EMPRESA 1 0.0028 0.28 354 100.00

Como tamano_empresa es una variable ordinal, en este caso sí tiene sentido incluir la frecuencia acumulada, ya que las categorías siguen un orden lógico de menor a mayor tamaño.

ggplot(datos, aes(x = tamano_empresa)) +
  geom_bar(fill = "gray40") +
  labs(title = "Distribución de empresas según tamaño", x = "Tamaño de empresa", y = "Número de empresas") +
  theme_minimal()

La categoría “microempresa” concentra la mayor parte de las empresas de la base, con un 72.6% del total, seguida de “pequeña empresa” con un 24.01%. Entre estas dos categorías se agrupa la gran mayoría de las empresas registradas, mientras que “mediana empresa” y “gran empresa” representan una proporción bastante pequeña. Esto muestra que el tejido empresarial que recoge esta base está compuesto principalmente por empresas de tamaño pequeño.

5. Análisis de la variable cualitativa: estado de matrícula

tabla_estado <- datos %>%
  count(estado_matricula) %>%
  arrange(desc(n)) %>%
  mutate(
    frecuencia_relativa = round(n / sum(n), 4),
    porcentaje = round(frecuencia_relativa * 100, 2)
  ) %>%
  rename(frecuencia_absoluta = n)

kable(tabla_estado, col.names = c("Estado de matrícula", "Frecuencia absoluta", "Frecuencia relativa", "Porcentaje (%)"))
Estado de matrícula Frecuencia absoluta Frecuencia relativa Porcentaje (%)
ACTIVO 338 0.9548 95.48
CANCELADO 11 0.0311 3.11
EN DISOLUCION ANTICIPADA 4 0.0113 1.13
EN DISOLUCION POR VIGENCIA 1 0.0028 0.28

estado_matricula es una variable nominal, ya que sus categorías (activo, cancelado, en disolución anticipada, en disolución por vigencia) no tienen un orden entre sí. Por esa razón no se incluye frecuencia acumulada.

ggplot(datos, aes(x = reorder(estado_matricula, estado_matricula, function(x) -length(x)))) +
  geom_bar(fill = "gray40") +
  labs(title = "Distribución de empresas según estado de matrícula", x = "Estado", y = "Número de empresas") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

La categoría “activo” concentra 338 de las 354 empresas, es decir, el 95.48% del total. Las otras tres categorías (canceladas y los dos tipos de disolución) suman en conjunto menos del 5% de los casos. Esto indica que la base recoge principalmente empresas que continúan operando, mientras que la cancelación o disolución aparece solo en un número reducido de registros.

6. Análisis de la variable cuantitativa: antigüedad (años)

skewness <- function(x) {
  n <- length(x)
  m2 <- sum((x - mean(x))^2) / n
  m3 <- sum((x - mean(x))^3) / n
  m3 / (m2^1.5)
}

media_ant <- mean(datos$antiguedad_anios)
mediana_ant <- median(datos$antiguedad_anios)
sd_ant <- sd(datos$antiguedad_anios)
var_ant <- var(datos$antiguedad_anios)
min_ant <- min(datos$antiguedad_anios)
max_ant <- max(datos$antiguedad_anios)
rango_ant <- max_ant - min_ant
q_ant <- quantile(datos$antiguedad_anios, probs = c(0.25, 0.5, 0.75))
cv_ant <- round((sd_ant / media_ant) * 100, 2)
asimetria_ant <- skewness(datos$antiguedad_anios)

tabla_ant <- data.frame(
  Indicador = c("Media", "Mediana", "Desviación estándar", "Varianza",
                "Mínimo", "Máximo", "Rango", "Q1", "Q3",
                "Coeficiente de variación (%)", "Asimetría"),
  Valor = round(c(media_ant, mediana_ant, sd_ant, var_ant,
                   min_ant, max_ant, rango_ant,
                   q_ant[1], q_ant[3], cv_ant, asimetria_ant), 3)
)

kable(tabla_ant)
Indicador Valor
Media 46.201
Mediana 47.000
Desviación estándar 11.944
Varianza 142.671
Mínimo 21.000
Máximo 85.000
Rango 64.000
Q1 42.000
Q3 52.000
Coeficiente de variación (%) 25.850
Asimetría -0.078
ggplot(datos, aes(x = antiguedad_anios)) +
  geom_histogram(binwidth = 5, fill = "gray40", color = "white") +
  labs(title = "Distribución de la antigüedad de las empresas", x = "Antigüedad (años)", y = "Número de empresas") +
  theme_minimal()

ggplot(datos, aes(y = antiguedad_anios)) +
  geom_boxplot(fill = "gray80") +
  labs(title = "Boxplot de la antigüedad de las empresas", y = "Antigüedad (años)") +
  theme_minimal() +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())

La media de antigüedad es de 46.2 años y la mediana es de 47 años, valores muy cercanos entre sí. El coeficiente de asimetría, de -0.08, confirma esta cercanía: al estar tan próximo a cero, indica que la distribución no tiene una inclinación marcada hacia ningún lado. Sin embargo, el histograma muestra algo que estos indicadores por sí solos no dejan ver: hay un grupo grande de empresas con una antigüedad cercana a 24 años, separado por un vacío del resto de las empresas, que se distribuyen de forma más continua entre los 39 y los 85 años. Esto sugiere que dentro de la base conviven dos grupos distintos de empresas: uno más numeroso de constitución más reciente y otro de empresas con una trayectoria bastante más larga.

La desviación estándar es de 11.9 años, con un coeficiente de variación de 25.85%, lo que indica una dispersión moderada. En el boxplot se observan varios puntos fuera de los bigotes, tanto hacia valores bajos como hacia valores altos; estos no parecen errores de digitación, sino que corresponden justamente a los dos grupos mencionados: el grupo de empresas más jóvenes (alrededor de 21 a 25 años) y un grupo reducido de empresas mucho más antiguas (por encima de los 69 años).

7. Análisis de la variable cuantitativa: año de matrícula

media_anio <- mean(datos$anio_matricula)
mediana_anio <- median(datos$anio_matricula)
sd_anio <- sd(datos$anio_matricula)
min_anio <- min(datos$anio_matricula)
max_anio <- max(datos$anio_matricula)
rango_anio <- max_anio - min_anio
q_anio <- quantile(datos$anio_matricula, probs = c(0.25, 0.5, 0.75))

tabla_anio <- data.frame(
  Indicador = c("Media", "Mediana", "Desviación estándar",
                "Mínimo", "Máximo", "Rango", "Q1", "Q3"),
  Valor = round(c(media_anio, mediana_anio, sd_anio,
                   min_anio, max_anio, rango_anio,
                   q_anio[1], q_anio[3]), 2)
)

kable(tabla_anio)
Indicador Valor
Media 1979.80
Mediana 1979.00
Desviación estándar 11.94
Mínimo 1941.00
Máximo 2005.00
Rango 64.00
Q1 1974.00
Q3 1984.00
ggplot(datos, aes(x = anio_matricula)) +
  geom_histogram(binwidth = 5, fill = "gray40", color = "white") +
  labs(title = "Distribución del año de matrícula", x = "Año de matrícula", y = "Número de empresas") +
  theme_minimal()

correlacion_ant_anio <- cor(datos$antiguedad_anios, datos$anio_matricula)

El coeficiente de variación no se reporta para esta variable porque, al ser de intervalo y no tener un cero real, dividir la desviación estándar entre la media no tiene una interpretación válida.

La media del año de matrícula es 1979.8 y la mediana es 1979, valores casi idénticos. El rango es de 64 años (entre 1941 y 2005), el mismo valor que el rango de antiguedad_anios, lo cual es consistente con que -1 es el coeficiente de correlación entre ambas variables: al ser una relación matemática directa, cualquier diferencia entre dos años de matrícula corresponde exactamente a la misma diferencia, en sentido contrario, entre las antigüedades respectivas.

Lo que aporta esta variable, más allá de repetir lo ya visto en antiguedad_anios, es una lectura en términos de momento histórico: el primer cuartil corresponde al año 1974 y el tercer cuartil al año 1984, de manera que la mitad central de las empresas de la base fue registrada dentro de ese rango de una década. El histograma muestra el mismo grupo numeroso alrededor del año 2002 que ya se identificó al analizar la antigüedad, lo cual es esperable dado que ambas variables describen el mismo hecho desde dos escalas distintas.

8. Conclusiones

El análisis de las variables cualitativas mostró que la mayoría de las empresas de la base son microempresas o pequeñas empresas, y que casi todas se encuentran activas, con muy pocos casos de cancelación o disolución. Esto describe una base compuesta principalmente por empresas pequeñas que siguen en funcionamiento.

En cuanto a las variables cuantitativas, la antigüedad y el año de matrícula describen el mismo hecho desde dos escalas de medición distintas, por lo que su correlación es prácticamente perfecta y no deben leerse como fenómenos separados. Lo que sí aportó el análisis fue identificar, a través del histograma y el boxplot, un patrón que la media y la mediana por sí solas no muestran: existe un grupo considerable de empresas registradas alrededor del año 2002 (con una antigüedad cercana a 24 años), separado del resto de empresas, que tienen una antigüedad más variada y en general mayor.

En conjunto, el análisis cumple con lo solicitado en la actividad: se trabajaron dos variables cualitativas (una ordinal y una nominal) y dos cuantitativas (una de razón y una de intervalo), apoyadas en tablas de frecuencia, indicadores estadísticos y gráficos, todos calculados directamente a partir de empresas_depuradas.xlsx.