1 Presentación

Este manual de procedimientos ha sido elaborado con el propósito de servir como guía en la implementación de los procesos de minería de datos necesarios para la gestión de los registros administrativos relacionados con las micro, pequeñas y medianas empresas. Su objetivo es facilitar futuras ediciones del estudio, presentando paso a paso cada procedimiento necesario basado en códigos desarrollados en el lenguaje R, con el fin de hacer su replicación sencilla.

El software R se ha consolidado como una de las mejores opciones disponibles para la minería de datos y la ciencia de datos, especialmente por ser de código abierto (Open Source). Además, es ampliamente utilizado por una comunidad científica respaldada por una multitud de recursos en línea que facilitan su uso y comprensión.

Este manual representa el primer paso hacia la explotación de los registros administrativos para la generación de información respaldada técnicamente y científicamente. Su objetivo principal es proporcionar herramientas para la toma de decisiones basada en datos.

Es importante destacar que todas las tablas estadísticas y figuras presentadas en este informe son responsabilidad exclusiva del autor y no representan necesariamente el pensamiento de la institución ni el de sus autoridades.

2 La base de datos

La base de datos contiene información detallada sobre empresas y contribuyentes, proporcionando un panorama completo de su estructura y actividad económica. A continuación, se presenta una breve descripción de los principales campos contenidos en la base de datos:

3 La gestión de datos

En el capítulo de Gestión de Datos se detalla el proceso desde la instalación de librerías en R hasta la aplicación de filtros para análisis específicos. Se organiza la carga y guardado de datos, se renombran variables, se eliminan duplicados, y se aplican filtros por estado, tipo de persona jurídica, actividad económica principal y categoría de empresa. Esto asegura la integridad y preparación adecuada de los datos para su posterior análisis en el estudio de minería de datos.

3.1 Instalación y carga de las librerías necesarias

rm(list = ls())
    #install.packages("textstem")
    #install.packages("dplyr")
    #install.packages("tidyr")
    #install.packages("readxl")
    #install.packages("koRpus")
    #install.packages("tm")
    #install.packages("styler")
    #install.packages("readr")

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
library(tidyr)
library(readxl)
library(koRpus)
## Warning: package 'koRpus' was built under R version 4.3.3
## Loading required package: sylly
## Warning: package 'sylly' was built under R version 4.3.3
## For information on available language packages for 'koRpus', run
## 
##   available.koRpus.lang()
## 
## and see ?install.koRpus.lang()
library(tm)
## Warning: package 'tm' was built under R version 4.3.3
## Loading required package: NLP
## 
## Attaching package: 'tm'
## The following object is masked from 'package:koRpus':
## 
##     readTagged
library(readr)
## 
## Attaching package: 'readr'
## The following object is masked from 'package:koRpus':
## 
##     tokenize
library(openxlsx)
## Warning: package 'openxlsx' was built under R version 4.3.3

3.2 Preparado del repositorio en Excel para cada tabla que se vaya generando

# ##########################################################
# # PREPARAR EL EXCEL PARA GUARDAR LOS RESULTADOS
# # Carga el paquete
# #install.packages("openxlsx")
# library(openxlsx)
# 
# # Crear un nuevo libro de trabajo (archivo Excel)
wb <- createWorkbook()
# 
# # Nombres de las hojas
hojas <- c(paste0("Tabla", 1:8), paste0("Figura", 1:13))
# 
# # Añadir hojas al libro de trabajo
for (hoja in hojas) {
  addWorksheet(wb, hoja)
}

##########################################################

3.3 Notas preliminares

Solicitud de base de datos a la DNIT

Solicitud conjunta (entre el viceministerio de MIPYMES y el INE) a la DNIT de la base de datos de contribuyentes de IRE al corte del año fiscal de referencia Primer análisis de la consistencia de la base Solicitud de correcciones y/o aclaraciones y recepción de estas Solicitud de datos a la Dirección de Aporte Obrero Patronal y al MTESS sobre la base completa. Los campos IPS y MTESS son completados remitiendo la base de datos a los responsable de cada institución, como respuesta la DAOP deberá completar 3 campos: IPS (Si: cuenta con registro activo en el IPS, No: no cuenta con registro activo en el IPS) y los campos T_hombres: Total hombres y T_mujeres: total mujeres. Análogamente el MTESS llena el campo MTESS (si, no)

3.4 Procedimiento de Carga y Guardado de Datos

A continuación se presentan los codigos para para cargar y guardar datos desde un archivo Excel a un formato comprimido de datos (RDS) para su posterior uso eficiente. El procedimiento consta de los siguientes pasos:

  suppressWarnings({
library(readxl)
   
datos <- read_excel("C:/Users/Gustavo/Desktop/mipymes/BASE_DNIT_2022.xlsx", col_types = rep("text", 15))
  })

names(datos)
##  [1] "Ruc"                     "Dv"                     
##  [3] "Cod Act Economica Princ" "Fecha Constitucion_anio"
##  [5] "Tipo Sociedad"           "Tipo Contribuyente"     
##  [7] "DPTO"                    "DISTRITO"               
##  [9] "Estado"                  "Impuesto"               
## [11] "CATEGORÍA"               "MTESS"                  
## [13] "IPS"                     "T_hombres"              
## [15] "T_mujeres"
str(datos)
## tibble [996,629 × 15] (S3: tbl_df/tbl/data.frame)
##  $ Ruc                    : chr [1:996629] "742789" "869846" "3892223" "4604816" ...
##  $ Dv                     : chr [1:996629] "1" "5" "1" "2" ...
##  $ Cod Act Economica Princ: chr [1:996629] "13000" "13000" "13000" "13000" ...
##  $ Fecha Constitucion_anio: chr [1:996629] NA NA NA NA ...
##  $ Tipo Sociedad          : chr [1:996629] NA NA NA NA ...
##  $ Tipo Contribuyente     : chr [1:996629] "FISICO" "FISICO" "FISICO" "FISICO" ...
##  $ DPTO                   : chr [1:996629] "CAPITAL" "ITAPUA" "ALTO PARANA" "ITAPUA" ...
##  $ DISTRITO               : chr [1:996629] "ASUNCION (DISTRITO)" "HOHENAU" "SANTA RITA" "PIRAPO" ...
##  $ Estado                 : chr [1:996629] "ACTIVO" "ACTIVO" "ACTIVO" "ACTIVO" ...
##  $ Impuesto               : chr [1:996629] "IRE SIMPLE" "IRE SIMPLE" "IRE SIMPLE" "IRE SIMPLE" ...
##  $ CATEGORÍA              : chr [1:996629] "Micro" "Micro" "Micro" "Pequeña" ...
##  $ MTESS                  : chr [1:996629] "NO" "NO" "NO" "NO" ...
##  $ IPS                    : chr [1:996629] "NO" "NO" "NO" "NO" ...
##  $ T_hombres              : chr [1:996629] "0" "0" "0" "0" ...
##  $ T_mujeres              : chr [1:996629] "0" "0" "0" "0" ...
nrow(datos)
## [1] 996629

Nota: use la opcion disponible en la pestaña Code, luego “Comment/Uncoment lines” para comentar o descomentar lineas en caso de necesidad

  1. Lectura de Datos desde el Archivo Excel: Se utiliza la función read_excel() del paquete readxl para leer los datos del archivo Excel especificado. Los datos se cargan en un formato tabular en R.

  2. Transformación de Formato (Opcional): Si es necesario, se pueden realizar transformaciones de formato en los datos, como cambiar tipos de datos, renombrar columnas, eliminar columnas no deseadas, entre otros.

  3. Guardado en Formato RDS: Una vez que los datos están en el formato deseado, se utilizan las funciones saveRDS() para guardar los datos en un archivo comprimido de datos (RDS). Este archivo contiene una representación binaria de los objetos R que pueden ser cargados rápidamente en futuras sesiones de R.

Este proceso de carga y guardado de datos en formato RDS permite una eficiente gestión de los datos, reduciendo los tiempos de carga y optimizando el uso de recursos en el análisis posterior.

3.5 Ronombrado de variables

datos <- datos %>%
  rename(
    RUC = Ruc,
    DV = Dv,
    CodigoActividadEconomica = `Cod Act Economica Princ`,
    Fechaconstitucionanio= `Fecha Constitucion_anio`,
    TipoSociedad = `Tipo Sociedad`,
    TipoContribuyente = `Tipo Contribuyente`,
    Departamento = DPTO,
    Distrito = DISTRITO,
    Estado = Estado,
    Impuesto = Impuesto,
    Categoria = CATEGORÍA
  )
#View(datos)

3.6 Recodificado de la variable Estado

# Suponiendo que tu dataframe se llama 'datos'
datos <- datos %>%
  mutate(Estado_recode = case_when(
    Estado == "ACTIVO"                 ~ "Activo",
    Estado == "BLOQUEADO"              ~ "Bloqueado",
    Estado == "CANCELADO"              ~ "Cancelado",
    Estado == "CANCELADO DEFINITIVO"   ~ "Cancelado",
    Estado == "SUSPENSION TEMPORAL"    ~ "Suspension Temporal",
    TRUE                               ~ as.character(Estado) # Conserva el valor original para cualquier otro caso
  ))

3.7 Desduplicado por la variable RUC

#DESDUPLICADO
# Eliminar duplicados basados en la columna Ruc, manteniendo el primer registro
datos2 <- distinct(datos , RUC, .keep_all = TRUE)

# Contar el número de casos únicos basados en la columna Ruc
total_casos_unicos <- nrow(distinct(datos2, RUC))
total_casos_unicos
## [1] 989407

3.7.1 Tabla 1

########### TABLA 1 ###################

tabla1=table(datos2$Estado_recode, datos2$Impuesto)
 # Agregar los totales a la tabla
tabla1 <- addmargins(tabla1, margin = 1:2)
tabla1
##                      
##                       IRE GENERAL IRE RESIMPLE IRE SIMPLE    Sum
##   Activo                   117255        13196     278602 409053
##   Bloqueado                 14636          298       6929  21863
##   Cancelado                  2463       357721      13953 374137
##   Suspension Temporal       62669         8235     113450 184354
##   Sum                      197023       379450     412934 989407
# Escribir datos en las hojas respectivas
writeData(wb, sheet = "Tabla1", x = tabla1, startRow =3 )
writeData(wb, sheet = "Tabla1", x = "Cantidad total de empresas por obligación tributaria según estado del RUC. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  
############################################

3.8 Aplicación del filtro por tipo de Estado

############################################################
##############  FILTRO 1 ###################################
############################################################
## Filtro por la variable Estado="Activo"


datos3 <- datos2 %>%
  filter(Estado == "ACTIVO")

#############################################################
nrow(datos3)
## [1] 409053

3.9 Aplicación del segundo filtro por tipo de Pesonería Jurídica

Para aplicar el filtro por Personería Jurídica se deberá revisar las personerías presentes y deberán coincidir con lo nombres utilizados a continuación. En caso de cambios, se deberá excluir e incluir en la lista presentada a continuación.

############################################################
##############  FILTRO 2 ###################################
############################################################
# Crear un vector con los tipos de sociedad a excluir

tipos_a_excluir <- c(
  "ASOCIACION_CAPACIDAD_RESTRINGIDA", 
  "ASOCIACION_UTILIDAD_PUBLICA", 
  "CAUSA_JUDICIAL_SENABICO", 
  "COOPERATIVA", 
  "EA_EM", 
  "FIDEICOMISO",
  "FONDOS_MUTUOS_EJT", 
  "FONDOS_PATRIMONIALES_INVERSION_EJT", 
  "FUNDACION", 
  "GUBERNAMENTAL", 
  "MOVIMIENTOS_INTERNOS_PARTIDARIOS", 
  "MUNICIPAL",
  "SIN_FINES_LUCRO", 
  "SUCESIONES", 
  "UNIDAD_PRODUCTIVA_CONJUNTA_UPC", 
  "UNIVERSIDAD"
)
# Crear una nueva variable para clasificar TipoSociedad

datos3$ExcluirTipoSociedad <- ifelse(datos3$TipoSociedad %in% tipos_a_excluir,
 "Excluir", "No excluir")

#reemplazar los valores vacíos en TipoSociedad por  "PERSONA FÍSICA"
datos3$TipoSociedad <- ifelse(is.na(datos3$TipoSociedad),
 "PERSONA FÍSICA", datos3$TipoSociedad)

table(datos3$ExcluirTipoSociedad)
## 
##    Excluir No excluir 
##      20194     388859

3.9.1 Tabla 2

########### TABLA 2 ###################
datos4 <- datos3 %>%
  filter(ExcluirTipoSociedad == "Excluir")
nrow(datos4)
## [1] 20194
#cuales son los tipos excluidos
tabla2=table(datos4$TipoSociedad)
tabla2 <- addmargins(tabla2, margin = 1)
tabla2
## 
##   ASOCIACION_CAPACIDAD_RESTRINGIDA        ASOCIACION_UTILIDAD_PUBLICA 
##                               4734                               1000 
##            CAUSA_JUDICIAL_SENABICO                        COOPERATIVA 
##                                  1                                606 
##                              EA_EM                        FIDEICOMISO 
##                                 26                               2963 
##                  FONDOS_MUTUOS_EJT FONDOS_PATRIMONIALES_INVERSION_EJT 
##                                 10                                 20 
##                          FUNDACION                      GUBERNAMENTAL 
##                                304                                 25 
##   MOVIMIENTOS_INTERNOS_PARTIDARIOS                          MUNICIPAL 
##                                  3                                  2 
##                    SIN_FINES_LUCRO                         SUCESIONES 
##                              10354                                 60 
##     UNIDAD_PRODUCTIVA_CONJUNTA_UPC                        UNIVERSIDAD 
##                                 57                                 29 
##                                Sum 
##                              20194
tabla2<-data.frame(tabla2)
tabla2
nuevos_nombres <- c("Personería Jurídica","Cantidad")  # Define los nuevos nombres que quieras asignar

# Asignar los nuevos nombres a las columnas del data.frame
colnames(tabla2) <- nuevos_nombres
tabla2
# Escribir datos en las hojas respectivas
writeData(wb, sheet = "Tabla2", x = tabla2, startRow =3 )
writeData(wb, sheet = "Tabla2", x = "Excepciones aplicadas por tipo de personería jurídica. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

############################################
######################   APLICACIÓN DEL FILTRO POR TIPOSOCIEDAD   #########

datos5 <- datos3 %>%
  filter(ExcluirTipoSociedad == "No excluir")
nrow(datos5)
## [1] 388859
#########################################################################
# Crear un vector de recodificación de tiposociedad no excluidos

recodificacion <- c(
  "CONDOMINIO" = "Condominio",
  "CONSORCIO_COPROPIETARIOS" = "Consorcio Copropietarios",
  "CONSORCIOS_REALIZACION_OBRA_PUBLICA" = "Consorcios Realización Obra Pública",
  "CONSORCIOS_UNIONES_TEMPORALES" = "Consorcios Uniones Temporales",
  "CONSORCIOS_UT" = "Consorcios Uniones Temporales",
  "CONTRATO_SOCIETARIO_RURAL_EJT" = "Contrato Societario Rural",
  "EAS" = "Empresa de Acciones Simplificadas (EAS)",
  "EAS_UNIPERSONAL" = "EAS Unipersonal",
  "EIRL" = "Empresa Individual de Responsabilidad Limitada",
  "FIRMA_EXTRANJERA" = "Firma Extranjera",
  "OTROS" = "Otros",
  "PERSONA FÍSICA" = "Persona Física",
  "SAECA" = "Sociedad Anónima Emisora de Capital Abierto",
  "SOCIEDAD_ANONIMA" = "Sociedad Anónima",
  "SOCIEDAD_COLECTIVA" = "Sociedad Colectiva",
  "SOCIEDAD_COMANDITA" = "Sociedad Comandita",
  "SOCIEDAD_SIMPLE" = "Sociedad Simple",
  "SRL" = "Sociedad de Responsabilidad Limitada"
)

datos5 <- datos5 %>%
  mutate(TipoSociedad_rec = if_else(TipoSociedad %in% names(recodificacion),
                                    recodificacion[TipoSociedad],
                                    TipoSociedad))

3.9.2 Tabla 3

########### TABLA 3 ###################

tabla3=table(datos5$TipoSociedad_rec)

tabla3 <- addmargins(tabla3, margin = 1)
tabla3=data.frame(tabla3)
nuevos_nombres <- c("Personería Jurídica","Cantidad")  # Define los nuevos nombres que quieras asignar

# Asignar los nuevos nombres a las columnas del data.frame
colnames(tabla3) <- nuevos_nombres
tabla3
# Escribir datos en las hojas respectivas
writeData(wb, sheet = "Tabla3", x = tabla3, startRow =3 )
writeData(wb, sheet = "Tabla3", x = "Personerías jurídicas no excluidas de la BDMIPYMES." ,  startRow =1 , startCol= "B",  borders = "all")  


############################################

3.10 Aplicación del tercer filtro por tipo de Actividad Económica Principal

3.10.1 Tabla 4

########### TABLA 4 ###################
########### 
########### descripciones_actividades <-
library(dplyr)

referencias <- read_delim("C:/Users/Gustavo/Desktop/mipymes/descripciones_actividades.csv", delim = ";")
## Rows: 699 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (5): CodigoActividadEconomica, ExcluyeActividadEconomica, DescripcionAct...
## dbl (2): Cod Act Economica Princ_2dig, Cod Act Economica Princ_2digNUM
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Eliminar duplicados
referencias <- distinct(referencias)

# Verificar nombres de columnas

str(referencias$CodigoActividadEconomica)
##  chr [1:699] "13000" "154100" "179999" "182004" "202200" "271003" "342000" ...
# Unir las descripciones con tu data frame principal basado en el código de actividad económica
datos6 <- datos5 %>%
left_join(referencias, by = c("CodigoActividadEconomica" = "CodigoActividadEconomica")) %>%
distinct()
nrow(datos6)
## [1] 388859
######################################################################
datos6a <- datos6 %>%
  filter(ExcluyeActividadEconomica == "SÍ excluido por actividad")
nrow(datos6a)
## [1] 14063
############################################################
######################################################################
datos6b <- datos6 %>%
  filter(ExcluyeActividadEconomica == "NO excluido por actividad")
nrow(datos6b)
## [1] 374796
############################################################
#table(datos_con_descripcionessifil$CodigoActividadEconomica)
tabla4=(addmargins(table(datos6a$`Cod Act Economica Princ_2dig`),1))
tabla4=data.frame(tabla4)
tabla4
nombres<-c("AEP","Cantidad")
colnames(tabla4)<-nombres

tabla4
writeData(wb, sheet = "Tabla4", x = tabla4, startRow =3 )
writeData(wb, sheet = "Tabla4", x = "Excepciones aplicadas por actividad económica principal. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  


############################################
######################################################################
datos7 <- datos6 %>%
  filter(ExcluyeActividadEconomica == "NO excluido por actividad")
nrow(datos7)
## [1] 374796
############################################################
tabla4.2=addmargins(table(datos7$Categoria))

tabla4.2<-data.frame(tabla4.2)

tabla4.2
colnames(tabla4.2)<-c("Categoría","Cantidad")
tabla4.2

3.11 Aplicación del cuarto filtro por Categoría de empresa

############################################################
##############  FILTRO 4: CATEGORIA (tamaño de empresa) ####
############################################################


############################################################
bdmipymes<- datos7  %>%
  filter(datos7$Categoria != "Grande")
nrow(bdmipymes)
## [1] 366977
############################################################

3.11.1 Figura 1

########### FIGURA 1 ############################
# El elemento en la fila 3 y la columna 2
valor1 <- tabla1[5, 4]
valor1
## [1] 989407
valor2 <- tabla1[4, 4]
valor2
## [1] 184354
valor3 <- tabla1[1, 4]
valor3
## [1] 409053
valor4 <- tabla1[2, 4]
valor4
## [1] 21863
valor5 <- tabla1[1, 4]
valor5
## [1] 409053
valor5a <- tabla1[1, 4]
valor5a
## [1] 409053
valor6 <- tabla2[17,2]
valor6
## [1] 20194
valor7 <- as.vector(tabla4[10,2])
valor7
## [1] 14063
valor8 <- (tabla4.2)[1,2]
valor8 #"Excluidos por categoría"
## [1] 7819
valor9<-(valor3 - valor6 - valor7 - valor8)
valor9
## [1] 366977
valoresfig1 <- c(valor1 , valor2 , valor3 ,valor4 , valor5 , valor5a, valor6 , valor7 , valor8, valor9)
valoresfig1
##  [1] 989407 184354 409053  21863 409053 409053  20194  14063   7819 366977
nombres <- c("Base inicial","Suspensión Temporal","Activos","Bloqueado","Cancelado","Categorizados" ,"Excluidos por personería jurídica","Excluidos por actividad económica","Excluidos por categoría","BDMIPYMES")
valoresfigura1<-data.frame( nombres ,valoresfig1)
valoresfigura1
############################################
writeData(wb, sheet = "Figura1", x = valoresfigura1,  startRow =3, startCol= "B",  borders = "all")  

writeData(wb, sheet = "Figura1", x = "Proceso de obtención de la BDMIPYMES. Año fiscal 2022.
" ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.2 Figura 2

#TABLA PARA FIGURA 2
distabs<- addmargins(table(datos7$Categoria))
cbind(distabs)
##         distabs
## Grande     7819
## Mediana    9023
## Micro    321137
## Pequeña   36817
## Sum      374796
writeData(wb, sheet = "Figura2", x = distabs ,  startRow =4 , startCol= "B",  borders = "all")  

writeData(wb, sheet = "Figura2", x = "Distribución absoluta y porcentual de las empresas que conforman la BDMIPYMES y empresas grandes (Total de empresas 374.807). Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.3 Figura 3

################  FIGURA 3 #######################################
#### SOLO MIPYMES  ###

#TABLA PARA FIGURA 3
distabs<- addmargins(table(bdmipymes$Categoria),1)
distabs=data.frame(distabs)
colnames(distabs)<-c("Categoría","Cantidad")
#dim(distabs)
distabs
writeData(wb, sheet = "Figura3", x = distabs ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura3", x = "Distribución absoluta y porcentual de las empresas que conforman la BDMIPYMES y empresas grandes (Total de empresas 374.807). Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.4 Figura 4

################  FIGURA 4 #######################################
# Distribución porcentual de mipymes por sectores de la economía, según categoría. Año fiscal 2022.
# 

bdmipymesfil <- bdmipymes %>%
filter(bdmipymes$sectores3 != "Sin código equivalente")


# Calcular la tabla de frecuencias y escribir los datos en un archivo Excel
distabsf4 <- table(bdmipymesfil$Categoria,bdmipymesfil$sectores3)
orden_categorias <- c("Micro", "Pequeña", "Mediana")
distabsf4 <- distabsf4[orden_categorias,]
distabsf4
##          
##           Primario Secundario Servicios
##   Micro      26334      44151    248581
##   Pequeña     8263       4846     23693
##   Mediana     2112       1193      5717
# Calcular la distribución porcentual y ordenar las categorías
distporf4 <- round(addmargins(prop.table(distabsf4,margin=1),margin=2)* 100, 1)

distporf4
##          
##           Primario Secundario Servicios   Sum
##   Micro        8.3       13.8      77.9 100.0
##   Pequeña     22.5       13.2      64.4 100.0
##   Mediana     23.4       13.2      63.4 100.0
# Escribir los resultados en el archivo Excel
writeData(wb, sheet = "Figura4", x = distporf4, startRow = 3, startCol = "B", borders = "all")
writeData(wb, sheet = "Figura4", x = "Distribución porcentual de mipymes por sectores de la economía, según categoría. Año fiscal 2022.", startRow = 1, startCol = "B", borders = "all")

3.11.5 Figura 5

################  FIGURA 5 #######################################
# Crear dataframe
bdmipymes_filtrado <- bdmipymes[bdmipymes$sectores4 != "Sin código equivalente", ]

distabsf5 <- table(bdmipymes_filtrado$sectores4, bdmipymes_filtrado$Categoria)
distporf5 <- round(prop.table(distabsf5) * 100, 1)

# Vector con el orden deseado de las categorías y sectores
orden_categorias <- c("Micro", "Pequeña", "Mediana")
orden_sectores <- c("Primario", "Secundario", "Servicios", "Comercio")

# Ordenar las filas de la tabla distabsf5 según el orden de las categorías
distabsf5 <- distabsf5[orden_sectores, orden_categorias]

fig5 <- round(addmargins(prop.table(table(bdmipymes_filtrado$Categoria, bdmipymes_filtrado$sectores4), margin = 1), margin = c(1,2)) * 100, 2)

# Ordenar las columnas de la tabla de frecuencias según el orden de los sectores
fig5 <- fig5[, orden_sectores]
fig5 <- fig5[orden_categorias, ]

fig5
##          
##           Primario Secundario Servicios Comercio
##   Micro       8.25      13.84     40.50    37.41
##   Pequeña    22.45      13.17     23.64    40.74
##   Mediana    23.41      13.22     20.16    43.21
writeData(wb, sheet = "Figura5", x = fig5 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura5", x = "Distribución porcentual de las mipymes por categoría, según sectores de la economía. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.6 Figura 6

################  FIGURA 6 #######################################
# Distribución porcentual de mipymes por departamentos

bdmipymes <- bdmipymes %>%
  mutate(Departamentorec= recode(Departamento,
                                "CAPITAL" = "Asunción",
                                "ITAPUA" = "Itapúa",
                                "ALTO PARANA" = "Alto Paraná",
                                "BOQUERON" = "Boquerón",
                                "CENTRAL" = "Central",
                                "NEEMBUCU" = "Ñeembucú",
                                "CAAGUAZU" = "Caaguazú",
                                "CANINDEYU" = "Canindeyú",
                                "CONCEPCION" = "Concepción",
                                "PARAGUARI" = "Paraguarí",
                                "PTE. HAYES" = "Presidente Hayes",
                                "MISIONES" = "Misiones",
                                "CORDILLERA" = "Cordillera",
                                "GUAIRA" = "Guairá",
                                "SAN PEDRO" = "San Pedro",
                                "AMAMBAY" = "Amambay",
                                "CAAZAPA" = "Caazapá",
                                "ALTO PARAGUAY" = "Alto Paraguay",
                                "CHACO" = "Alto Paraguay"
                                ))

# Calcula la tabla de frecuencias y convierte los porcentajes
distabsf6 <- round(prop.table(table(bdmipymes$Departamentorec)) * 100, 2)

# Ordena las categorías del Departamento según el porcentaje de mayor a menor
distabsf6 <- distabsf6[order(distabsf6, decreasing = TRUE)]

# Crea un data frame con el resultado
distabsf6 <- as.data.frame(distabsf6)

# Renombra la columna
colnames(distabsf6) <- c("Departamento","Porcentaje")

# Muestra el resultado
distabsf6
writeData(wb, sheet = "Figura6", x = distabsf6 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura6", x = "Distribución porcentual de las mipymes por departamentos. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.7 Figura 7

################  FIGURA 7 #######################################

bdmipymes_filtrado <- bdmipymes[bdmipymes$sectores4 != "Sin código equivalente", ]

fig7 <- table(bdmipymes_filtrado$sectores4, bdmipymes_filtrado$Departamentorec)
fig7 <- round(prop.table(fig7) * 100, 1)

# Vector con el orden deseado de las categorías y sectores
orden_categorias <- c("Micro", "Pequeña", "Mediana")

# Ordenar las filas de la tabla fig7 según el orden de las categorías
fig7 <- fig7[orden_categorias]

fig7 <- round(prop.table(table(bdmipymes_filtrado$Departamentorec, bdmipymes_filtrado$sectores4), margin = 1) * 100, 2)

# Ordenar las columnas de la tabla de frecuencias según el orden de los sectores
fig7 <- fig7[, orden_sectores]
fig7
##                   
##                    Primario Secundario Servicios Comercio
##   Alto Paraguay       42.37       5.92     19.21    32.50
##   Alto Paraná         12.85      12.42     33.30    41.44
##   Amambay             14.11       8.83     31.31    45.76
##   Asunción             3.59      10.98     52.96    32.47
##   Boquerón            45.65      10.88     25.91    17.56
##   Caaguazú            19.50      14.32     26.92    39.25
##   Caazapá             22.37      11.08     25.96    40.59
##   Canindeyú           25.66       9.10     27.92    37.31
##   Central              1.27      16.83     43.63    38.28
##   Concepción          11.40      12.37     32.91    43.32
##   Cordillera           5.79      16.81     33.81    43.59
##   Guairá              18.69      13.80     28.04    39.46
##   Itapúa              19.85      13.69     31.00    35.47
##   Misiones             9.73      14.56     37.44    38.27
##   Ñeembucú            16.03      15.80     26.20    41.97
##   Paraguarí            7.52      15.63     30.27    46.58
##   Presidente Hayes    29.97      11.36     26.14    32.53
##   San Pedro           22.11       9.91     27.07    40.90
writeData(wb, sheet = "Figura7", x = fig7 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura7", x = "Distribución porcentual de las mipymes por sector económico, según departamentos. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.8 Figura 8

################  FIGURA 8 #######################################
distabsf8a <- as.vector(cbind(addmargins(table(bdmipymes$IPS),1)))
valor1=distabsf8a[3]
valor1
## [1] 366977
valor2=distabsf8a[1] #sin ips
valor2
## [1] 310706
valor3=distabsf8a[2] # con ips
valor3
## [1] 56271
distporf8b <- as.vector(cbind(prop.table(table(bdmipymes$IPS)), 1) * 100)

valor4=distporf8b[1] #porcentaje sin ips
valor4
## [1] 84.66634
valor5=distporf8b[2] #porcentaje con ips
valor5
## [1] 15.33366
# Crear un nuevo campo de clasificación
bdmipymesips <- filter(bdmipymes, IPS == "SI")
distabsf8c <- as.vector((table(bdmipymesips$MTESS)))

valor7=distabsf8c[1] #sin mtess
valor7
## [1] 13022
valor8=distabsf8c[2] # con mtess
valor8
## [1] 43249
distporf8d <- as.vector((prop.table(table(bdmipymesips$MTESS))) * 100)

valor9=distporf8d[1] #porcentaje IPS sin mtess
valor10=distporf8d[2] #porcentaje IPS con mtess
valor9
## [1] 23.14158
valor10
## [1] 76.85842
valor11=valor7/valor1*100 #porcentaje BDMIPYMES con MTESS
valor12=valor8/valor1*100  #porcentaje BDMIPYMES SIN MTESS
valor11
## [1] 3.548451
valor12
## [1] 11.78521
valores=round(c(valor1, valor2, valor3, valor4, valor5,  valor7, valor8, valor11, valor12, valor9, valor10),1.01)

nombres=c("BDMIPYMES","Sin IPS","Con IPS","% sin IPS sobre BDMIPYMES","% con IPS sobre BDMIPYMES","Sin MTESSS","Con MTESS","% con MTESS sobre BDMIPYMES","% sin MTESS sobre BDMIPYMES", "% con MTESS sobre IPS","% sin MTESS sobre IPS")

figura8=data.frame(valores, nombres)
figura8
writeData(wb, sheet = "Figura8", x = figura8 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura8", x = "Determinación de las empresas que pueden formar parte del RENAMIPYMES. Año fiscal 2022.
" ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.9 Figura 9

################  FIGURA 9 #######################################

renamipymes <- subset(bdmipymes, IPS=="SI" & MTESS=="SI")
fig9=cbind(addmargins(table(renamipymes$Categoria )))
orden_categorias <- c("Micro", "Pequeña", "Mediana")
fig9 <- cbind(fig9[orden_categorias, ])
fig9
##          [,1]
## Micro   23866
## Pequeña 13567
## Mediana  5816
writeData(wb, sheet = "Figura9", x = fig9 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura9", x = "Distribución absoluta y porcentual de las mipymes (RENAMIPYMES) según categoría de empresa. Año fiscal 2022" ,  startRow =1 , startCol= "B",  borders = "all")  
# Clasificacion entre Empresas Formalizadas y No formalizadas
# 
library(dplyr)

bdmipymes <- bdmipymes %>%
  mutate(empresaformal = ifelse(IPS == "SI" & MTESS == "SI", "Formalizadas", "No formalizadas"))

tabla9a=addmargins(table(bdmipymes$empresaformal),margin=1)
tabla9a
## 
##    Formalizadas No formalizadas             Sum 
##           43249          323728          366977

3.11.10 Figura 10

################  FIGURA 10 #######################################

bdmipymes <- bdmipymes[bdmipymes$sectores3 != "Sin código equivalente", ]

figura10 <- table(bdmipymes$Categoria, bdmipymes$empresaformal)
figura10 <- addmargins(round(prop.table(figura10,margin=1) * 100, 1),2)
# Vector con el orden deseado de las categorías
orden_categorias <- c("Micro", "Pequeña", "Mediana")

# Reordenar las columnas de la tabla de resultados según el orden de las categorías
figura10 <- figura10[orden_categorias, ]
figura10
##          
##           Formalizadas No formalizadas   Sum
##   Micro            7.5            92.5 100.0
##   Pequeña         36.9            63.1 100.0
##   Mediana         64.5            35.5 100.0
writeData(wb, sheet = "Figura10", x = figura10 ,  startRow =5 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura10", x = "Distribución absoluta y porcentual de las mipymes (RENAMIPYMES) según categoría de empresa. Año fiscal 2022" ,  startRow =1 , startCol= "B",  borders = "all") 

writeData(wb, sheet = "Figura10", x = tabla9a ,  startRow =2 , startCol= "B",  borders = "all") 

3.11.11 Figura 11

################  FIGURA 11 #######################################

dpto1=data.frame(table(renamipymes$Departamentorec))
dpto1
dpto2=data.frame(table(bdmipymes$Departamentorec))
dpto2
porcen=round(dpto1$Freq/dpto2$Freq*100,0)

dpto=dpto1$Var1
fig11=data.frame(dpto,porcen)

fig11 <- fig11[order(fig11$porcen),  ]

fig11 <- fig11 %>% arrange(desc(porcen))

colnames(fig11) <- c("Departamento", "Porcentaje")

fig11
writeData(wb, sheet = "Figura11", x = fig11 ,  startRow =5 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura11", x = "Distribución absoluta y porcentual de las mipymes (RENAMIPYMES) según categoría de empresa. Año fiscal 2022" ,  startRow =1 , startCol= "B",  borders = "all") 

3.11.12 Figura 12

################  FIGURA 12 #######################################
renamipymes_filtrado <- renamipymes[renamipymes$sectores3 != "Sin código equivalente", ]

distabsf12 <- table(renamipymes_filtrado$sectores3, renamipymes_filtrado$Categoria)
distporf12 <- round(prop.table(distabsf12) * 100, 1)

# Vector con el orden deseado de las categorías
orden_categorias <- c("Micro", "Pequeña", "Mediana")

# Reordenar las columnas de la tabla de resultados según el orden de las categorías
distabsf12 <- distabsf12[, orden_categorias]

# Ordenar las filas de la tabla de frecuencias según el orden de las categorías primarias
frecuencias_por_sector_fig12 <- round(addmargins(prop.table(table(renamipymes_filtrado$Categoria, renamipymes_filtrado$sectores3), margin = 1), margin = c(1,2)) * 100, 2)
frecuencias_por_sector_fig12 <- frecuencias_por_sector_fig12[orden_categorias, ]
frecuencias_por_sector_fig12
##          
##           Primario Secundario Servicios    Sum
##   Micro       7.97      16.54     75.49 100.00
##   Pequeña    15.54      16.57     67.89 100.00
##   Mediana    18.61      15.41     65.98 100.00
writeData(wb, sheet = "Figura12", x = frecuencias_por_sector_fig12 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura12", x = "Distribución porcentual de las mipymes formalizadas (RENAMIPYMES) por categoría según sectores de la economía y total. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.13 Figura 13

################  FIGURA 13 #######################################

renamipymes_filtrado <- renamipymes[renamipymes$sectores4 != "Sin código equivalente", ]

distabsf13 <- table(renamipymes_filtrado$sectores4, renamipymes_filtrado$Categoria)

# Vector con el orden deseado de las categorías y sectores
orden_categorias <- c("Micro", "Pequeña", "Mediana")
orden_sectores <- c("Primario", "Secundario", "Servicios", "Comercio")

# Ordenar las filas de la tabla distabsf13 según el orden de las categorías
distabsf13 <- distabsf13[orden_sectores, orden_categorias]

fig13 <- round(addmargins(prop.table(table(renamipymes_filtrado$Categoria, renamipymes_filtrado$sectores4), margin = 1), margin = c(1,2)) * 100, 2)

# Ordenar las columnas de la tabla de frecuencias según el orden de los sectores
fig13 <- fig13[, orden_sectores]
fig13 <- fig13[orden_categorias, ]

fig13
##          
##           Primario Secundario Servicios Comercio
##   Micro       7.97      16.54     39.94    35.55
##   Pequeña    15.54      16.57     27.89    40.00
##   Mediana    18.61      15.41     22.29    43.70
writeData(wb, sheet = "Figura13", x = fig13 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Figura13", x = "Distribución porcentual de las mipymes formalizadas (RENAMIPYMES) por categoría según sectores de la economía. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  
# Calcular la antigüedad de la empresa en años
# 
# # Filtrar la base de datos
bdmipymesfil <- bdmipymes %>% 
  filter(Fechaconstitucionanio > 0 & Fechaconstitucionanio < 2023)
bdmipymesfil$Antiguedad <- 2022 - as.numeric(bdmipymesfil$Fechaconstitucionanio)
table(bdmipymesfil$Antiguedad)
## 
##    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
## 4281 3446 2018 2099 2168 1876 1701 1751 1687 1663 1314 1135  994  848  937  756 
##   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31 
##  721  798  475  391  345  307  348  338  311  302  285  312  265  167  156  134 
##   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47 
##  108   91   68   47   43   52   44   36   33   33   40   51   36   35   45   25 
##   48   49   50   51   52   53   54   55   56   57   58   59   60   61   62   63 
##   27   28   15   16   15   14   11    9    7    3    9    5    9    8    5    5 
##   64   65   66   67   68   69   70   71   72   74   75   77   78   79   81   84 
##    3    9    4    4    3    4    9    4    2    1    2    1    2    1    2    2 
##   86   88   93  102  106  107  108  111  112 
##    1    1    1    1    1    1    1    1    1

3.11.14 Tabla 5

################  TABLA 5 #######################################


library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
# Calcular el valor promedio de la antigüedad por Departamento y Categoría
antiguedad_promedio <- aggregate(bdmipymesfil$Antiguedad,
                                 by = list(Departamentorec = bdmipymesfil$Departamentorec,
                                           Categoria = bdmipymesfil$Categoria),
                                 FUN = mean,
                                 na.rm = TRUE)

# Usar dcast para crear la tabla de contingencia con el valor promedio de la antigüedad
tabla5 <- dcast(antiguedad_promedio, Departamentorec ~ Categoria, value.var = "x")

# Mostrar la tabla de contingencia
print(tabla5)
##     Departamentorec   Mediana     Micro   Pequeña
## 1     Alto Paraguay 11.600000 10.000000 12.411765
## 2       Alto Paraná 10.417460  6.806452  9.183099
## 3           Amambay  9.980198  7.569378  9.878205
## 4          Asunción 12.651708  7.786615 11.470570
## 5          Boquerón  9.256000  8.218750  7.835616
## 6          Caaguazú  8.785714  9.553571 10.253968
## 7           Caazapá 15.470588 10.952830 16.451613
## 8         Canindeyú  9.328125  7.802292  9.748031
## 9           Central 11.734756  7.697985 10.311069
## 10       Concepción 13.129630  8.312102 11.965116
## 11       Cordillera 10.972973 11.130312 12.402985
## 12           Guairá 15.957447  8.027027 11.975000
## 13           Itapúa 10.804651  8.132440 10.946548
## 14         Misiones 14.526316 13.081871 16.360000
## 15         Ñeembucú 13.086957 23.620690 15.096774
## 16        Paraguarí 12.173913 11.455497 11.888889
## 17 Presidente Hayes 14.370370 10.772727 16.777778
## 18        San Pedro 11.555556  8.887550 12.933333
writeData(wb, sheet = "Tabla5", x = tabla5 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Tabla5", x = "Antigüedad promedio según categoría de empresa, por departamentos. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.15 Tabla 6

################  TABLA 6 #######################################

# Contar el número de empresas por categoría
renamipymes$ref<-1
recuento <- aggregate(as.integer(ref) ~ Categoria, data = renamipymes, FUN = sum)

# Renombrar las columnas
colnames(recuento) <- c("Categoria", "Total_empresas")

# Imprimir el resultado
recuento
totalempre <- sum(as.integer(recuento$Total_empresas), na.rm = TRUE)
totalempre
## [1] 43249
################  TABLA 6 hombres #######################################

# Contar el número de empresas por categoría

recuentoH <- aggregate(as.integer(T_hombres) ~ Categoria, data = renamipymes, FUN = sum )

# Imprimir el resultado
recuentoH
################  TABLA 6 mujeres #######################################

# Contar el número de empresas por categoría
recuentoM <- aggregate(as.integer(T_mujeres) ~ Categoria, data = renamipymes, FUN = sum )

# Imprimir el resultado
recuentoM
################  TABLA 6 total #######################################

# Contar el número de empresas por categoría
renamipymes$T_total=as.integer(renamipymes$T_hombres)+as.integer(renamipymes$T_mujeres)

recuentoG <- aggregate(as.integer(T_total) ~ Categoria, data = renamipymes, FUN = sum )

# Imprimir el resultado
recuentoG
porcentajesH=recuentoH$`as.integer(T_hombres)`/recuentoG$`as.integer(T_total)`
porcH=data.frame(porcentajesH)
porcH
porcentajesM=recuentoM$`as.integer(T_mujeres)`/recuentoG$`as.integer(T_total)`

porcM=data.frame(porcentajesM)
porcM
# promedio empleados
# 

promedioemple=recuentoG$`as.integer(T_total)`/recuento$Total_empresas
promemple=data.frame(promedioemple)
promemple
# Agregar los valores únicos de la variable "Categoria"

tabla6 <- data.frame(Categoria = recuento$Categoria, Total_empleados = recuentoG$`as.integer(T_total)`, porcentajesH = porcH$porcentajesH, porcentajesM = porcM$porcentajesM, Promedio_empleados = promemple$promedioemple)

tabla6
writeData(wb, sheet = "Tabla6", x = tabla6 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Tabla6", x = "Número de empleados, distribución porcentual por género y promedio de empleados de mipymes formalizadas (RENAMIPYMES), según categoría de empresa. Año fiscal 2022.
" ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.16 Tabla 7

################  TABLA 7 #######################################

# Contar el número de empresas por categoría
# 
tabla7a=table(datos7$Categoria)
tabla7a
## 
##  Grande Mediana   Micro Pequeña 
##    7819    9023  321137   36817
datos7a <- datos7[datos7$Categoria == "Grande" & datos7$IPS == "SI" & datos7$MTESS == "SI", ]

tabla7b <- data.frame(table(datos7a$Categoria))
tabla7b
################  TABLA 6 hombres #######################################

# Contar el número de empresas por categoría

recuentoH <- aggregate(as.integer(T_hombres) ~ Categoria, data = datos7a, FUN = sum )

# Imprimir el resultado
recuentoH<-data.frame(recuentoH)
recuentoH
################  TABLA 6 mujeres #######################################

# Contar el número de empresas por categoría
recuentoM <- aggregate(as.integer(T_mujeres) ~ Categoria, data = datos7a, FUN = sum )

# Imprimir el resultado
recuentoM
################  TABLA 6 total #######################################

# Contar el número de empresas por categoría
datos7a$T_total=as.integer(datos7a$T_hombres)+as.integer(datos7a$T_mujeres)

recuentosoloG <- aggregate(as.integer(T_total) ~ Categoria, data = datos7a, FUN = sum )

# Imprimir el resultado
recuentosoloG
porcentajessoloG_H=recuentoH$as.integer.T_hombres./recuentosoloG$`as.integer(T_total)`
porcentajessoloG_H=data.frame(porcentajessoloG_H)
porcentajessoloG_H
porcentajessoloG_M=recuentoM$`as.integer(T_mujeres)`/recuentosoloG$`as.integer(T_total)`
porcentajessoloG_M=data.frame(porcentajessoloG_M)
porcentajessoloG_M
# promedio empleados
# 

promediosoloG=recuentosoloG$`as.integer(T_total)`/tabla7b$Freq
promediosoloG=data.frame(promediosoloG)
promediosoloG
# Agregar los valores únicos de la variable "Categoria"

tabla7 <- data.frame(Categoria = recuentosoloG$Categoria, Total_empleados = recuentosoloG$`as.integer(T_total)`, porcentajesH = porcentajessoloG_H$porcentajessoloG_H, porcentajesM = porcentajessoloG_M$porcentajessoloG_M, Promedio_empleados = promediosoloG$promediosoloG)

tabla7
writeData(wb, sheet = "Tabla7", x = tabla7 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Tabla7", x = "Número de empleados, distribución porcentual por género y promedio de empleados con seguro IPS e inscriptos en el MTESS de empresas categorizadas como grandes. Año fiscal 2022.
" ,  startRow =1 , startCol= "B",  borders = "all")  
table=table(renamipymes$sectores3)
table
## 
##   Primario Secundario  Servicios 
##       5091       7090      31055
length(renamipymes$sectores3)
## [1] 43249
length(renamipymes$sectores3)
## [1] 43249
length(renamipymes$Categoria)
## [1] 43249
length(renamipymes$T_total)
## [1] 43249
################  TABLA 8 #######################################

library(reshape2)


# Calcular el valor promedio de la antigüedad por Departamento y Categoría
# Calcular el recuento de observaciones por Departamento y Categoría


# Calcular el recuento de observaciones por Departamento y Categoría

renamipymes$ref<-1
totalemple <- aggregate(renamipymes$ref,
                        by = list(Sectores3 = renamipymes$sectores3, 
                                  Categoria = renamipymes$Categoria),
                        FUN = sum,
                        na.rm = TRUE)


totalemple
writeData(wb, sheet = "Tabla5", x = tabla5 ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Tabla5", x = "Antigüedad promedio según categoría de empresa, por departamentos. Año fiscal 2022." ,  startRow =1 , startCol= "B",  borders = "all")  

3.11.17 Tabla 8

################  TABLA 8 #######################################
# Crear dataframe

distabst8 <- table(renamipymes$sectores4, renamipymes$Categoria)
distabst8 <- round(prop.table(distabst8) * 100, 1)

# Vector con el orden deseado de las categorías y sectores
orden_categorias <- c("Micro", "Pequeña", "Mediana")
orden_sectores <- c("Primario", "Secundario", "Servicios", "Comercio")

# Ordenar las filas de la tabla distabsf4 según el orden de las categorías
distabst8 <- distabst8[orden_sectores, orden_categorias]

tabla8a <- round((prop.table(table(renamipymes$Categoria, renamipymes$sectores4))) * 100, 2)

# Ordenar las columnas de la tabla de frecuencias según el orden de los sectores
tabla8b <- tabla8a[, orden_sectores]
tabla8b <- tabla8a[orden_categorias, ]

tabla8b
##          
##           Comercio Primario Secundario Servicios
##   Micro      19.62     4.40       9.13     22.03
##   Pequeña    12.55     4.88       5.20      8.75
##   Mediana     5.88     2.50       2.07      3.00
writeData(wb, sheet = "Tabla8", x = tabla8b ,  startRow =3 , startCol= "B",  borders = "all")  
writeData(wb, sheet = "Tabla8", x = "Distribución porcentual de las mipymes por categoría, según sectores de la economía. Año fiscal 2022.
" ,  startRow =1 , startCol= "B",  borders = "all")  
##########################################################
# GUARDAR LOS RESULTADOS EN EL EXCEL

library(openxlsx)

saveWorkbook(wb, "C:/Users/Gustavo/Desktop/mipymes/resultadosActualizados2023vf.xlsx" , overwrite = TRUE)
##########################################################