InstroducciĂ³n

En Colombia, la mediciĂ³n del Producto Interno Bruto (PIB) es llevada a cabo por el Departamento Administrativo Nacional de EstadĂ­stica (DANE). Este organismo clasifica la actividad econĂ³mica en 12 grandes ramas, ademĂ¡s de un rubro adicional para la generaciĂ³n de impuestos, conformando un total de 13 agrupaciones.

El archivo PIBpc.xlsx contiene datos sobre el PIB per cĂ¡pita, expresados en miles de millones de pesos, para los 32 departamentos del paĂ­s y el Distrito Capital, BogotĂ¡.

En este anĂ¡lisis, se llevarĂ¡ a cabo un AnĂ¡lisis de Componentes Principales (PCA) para reducir la dimensionalidad de los datos y simplificar su interpretaciĂ³n. Posteriormente, se emplearĂ¡ el mĂ©todo de k-means clustering para agrupar los departamentos segĂºn la similitud en sus estructuras econĂ³micas, identificando patrones comunes entre ellos.

Cargue y limpieza de datos

Se cargan los datos del archivo PIBpc.xlsx como un data frame. La columna Abreviatura se utiliza como identificador para las filas, representando los departamentos, y se eliminan las dos primeras columnas para trabajar Ăºnicamente con los valores numĂ©ricos. Finalmente, se verifica la estructura del data frame y la calidad de los datos, evidenciando que no hay valores faltantes.

library(readxl)
library("easypackages")

lib_req<-c("MASS","visdat","car","HSAUR2","corrplot","plotrix","cluster","factoextra", "FactoMineR")# Listado de librerias requeridas por el script
easypackages::packages(lib_req)
wd="C:\\Users\\ferna\\Documents\\Maestría\\Métodos Cuantitativos"
PIB <-as.data.frame(read_excel("Laboratorios/Lab3/PIBpc.xlsx"))
row.names(PIB) = PIB$Abreviatura
PIB <- PIB[,-c(1, 2)]
str(PIB)
## 'data.frame':    33 obs. of  13 variables:
##  $ Agricultura  : num  1.06e-03 1.59e-04 1.77e-06 6.49e-04 2.06e-03 ...
##  $ ExptMin      : num  3.45e-04 4.16e-05 4.49e-05 3.49e-04 1.45e-03 ...
##  $ Manufactura  : num  0.00317 0.00236 0.00261 0.00235 0.00237 ...
##  $ Sum_Dist     : num  0.000826 0.00097 0.000564 0.000404 0.00108 ...
##  $ Construccion : num  0.00162 0.00112 0.00148 0.00154 0.00212 ...
##  $ Comercio     : num  0.00316 0.00291 0.00577 0.00256 0.00343 ...
##  $ Info_Com     : num  0.000562 0.0004 0.001321 0.000284 0.000302 ...
##  $ Fin_Seg      : num  0.00097 0.000648 0.002616 0.000348 0.000368 ...
##  $ Inmobiliarias: num  0.0017 0.001061 0.004024 0.000968 0.001067 ...
##  $ Prof_Cien    : num  0.001726 0.001084 0.002642 0.00101 0.000827 ...
##  $ Admin_Pub_Def: num  0.0022 0.00225 0.00448 0.00255 0.00247 ...
##  $ Arte         : num  0.000465 0.000368 0.001219 0.000215 0.000209 ...
##  $ Impuestos    : num  0.00173 0.00146 0.00306 0.00166 0.00132 ...
visdat::vis_miss(PIB)

VisualizciĂ³n de datos general

Se visualiza la correlaciĂ³n entre las variables mediante un grĂ¡fico de dispersiĂ³n para cada par de variables.

#Se visualizan las correlaciones 
pairs(PIB,pch=20,cex=1.5,lower.panel = NULL)

En los grĂ¡ficos de dispersiĂ³n se observa la presencia de valores atĂ­picos que podrĂ­an influir en los resultados del AnĂ¡lisis de Componentes Principales (PCA). Para identificar los departamentos mĂ¡s atĂ­picos, se grafican los pares de variables con mayor comportamiento irregular: Comercio vs Manufactura y Arte vs Admin_Pub_Def.

# Crear el grĂ¡fico de dispersiĂ³n
par(mfrow=c(1,2))
plot(PIB$Comercio, PIB$Manufactura, pch = 20, cex = 1.5, xlab = "Comercio", 
     ylab = "Manufactura", main = "PIB por Departamento")
text(PIB$Comercio, PIB$Manufactura, labels = rownames(PIB), pos = 1,
     cex = 0.8, col = "blue")
# Crear el grĂ¡fico de dispersiĂ³n
plot(PIB$Arte, PIB$Admin_Pub_Def, pch = 20, cex = 1.5, xlab = "Arte", 
     ylab = "Admin_Pub_Def", main = "PIB por Departamento")
text(PIB$Arte, PIB$Admin_Pub_Def, labels = rownames(PIB), pos = 1, 
     cex = 0.8, col = "blue")

En los grĂ¡ficos de dispersiĂ³n se observa que el Distrito Capital, BogotĂ¡, presenta valores extremos debido a sus elevados aportes al PIB en diversas variables, destacĂ¡ndose significativamente frente a los demĂ¡s departamentos. De manera similar, San AndrĂ©s, Providencia y Santa Catalina exhiben un comportamiento inusual por su alta dependencia del comercio. Dado que estos valores extremos podrĂ­an distorsionar los resultados del AnĂ¡lisis de Componentes Principales (PCA), se decide excluir ambos departamentos del conjunto de datos antes de proceder con el anĂ¡lisis.

PIB_Ajs = PIB[c(-3,-28),]

Correlaciones

A continuaciĂ³n, se construye una matriz de correlaciones utilizando el mĂ©todo de Pearson, dado que las variables son continuas y se asume una relaciĂ³n lineal entre ellas. Para facilitar la interpretaciĂ³n y evitar duplicidad, se grafica Ăºnicamente la parte superior de la matriz, sobre la diagonal principal. AdemĂ¡s, se considera un nivel de significancia menor o igual a 0.01, de modo que solo se muestran las correlaciones estadĂ­sticamente significativas. Las correlaciones no significativas se omiten del grĂ¡fico para mayor claridad.

#Analsis correlacion
PIB.mcor = cor(PIB_Ajs, method = "pearson")

PIB.pcor=corrplot::cor.mtest(PIB.mcor)$p

corrplot::corrplot(PIB.mcor, method = "ellipse",addCoef.col = "black",type="upper",
                   col=c("blue","red"),diag=FALSE,order="hclust",
                   p.mat = PIB.pcor, sig.level = 0.01, insig = "blank"
)

AnĂ¡lisis de Componentes Principales

Se identifican correlaciones tanto positivas como negativas entre las variables del conjunto de datos. Con base en esto, se realiza un AnĂ¡lisis de Componentes Principales (PCA) para reducir la dimensionalidad del conjunto de datos.

Se calculan los valores propios y se grafica la varianza explicada y acumulada, lo que permite determinar cuĂ¡ntos componentes son necesarios para retener la mayor parte de la informaciĂ³n del conjunto de datos.

X = PIB_Ajs
PCA=prcomp(X,center=TRUE,scale=TRUE)

# Cuantas componentes retener? 
PCA$sdev      # Raiz cuadrad de los valores propios
##  [1] 2.7223814 1.4530067 1.0448593 0.8862195 0.6915674 0.5956192 0.5176743
##  [8] 0.3882133 0.3689517 0.3059705 0.2669939 0.1935562 0.1003896
Var_exp=cumsum(PCA$sdev^2)*100/sum(PCA$sdev^2)
Var_exp
##  [1]  57.01047  73.25069  81.64861  87.69004  91.36900  94.09794  96.15938
##  [8]  97.31868  98.36580  99.08594  99.63429  99.92248 100.00000
par(mfrow=c(1,2))
coord=barplot(PCA$sdev^2, xlab="Componente",ylab="Valor Propio")
lines(coord,PCA$sdev^2,col="blue",lwd=2)
abline(h=1,col="red", lty=2)
coord=barplot(Var_exp, xlab="Componente",ylab="Varianza Acumulada")
lines(coord,Var_exp,col="blue",lwd=2)
text(coord,Var_exp,round(Var_exp,2), pos=3,cex=0.6)

Se decide conservar los primeros dos componentes principales, ya que juntos explican el 73.25% de la varianza total del conjunto de datos. Esto indica que una cantidad significativa de la informaciĂ³n original puede ser capturada con solo estos dos componentes, lo que facilita el anĂ¡lisis sin una pĂ©rdida considerable de informaciĂ³n.

print(PCA$rotation[,1:2],3)
##                    PC1      PC2
## Agricultura    0.06237 -0.57677
## ExptMin        0.00812 -0.60134
## Manufactura    0.33275  0.08362
## Sum_Dist       0.29066 -0.00971
## Construccion   0.28237 -0.13034
## Comercio       0.26641 -0.38658
## Info_Com       0.35047  0.06256
## Fin_Seg        0.33226  0.01881
## Inmobiliarias  0.33135  0.02061
## Prof_Cien      0.33708  0.15371
## Admin_Pub_Def -0.05925 -0.19400
## Arte           0.29765  0.25146
## Impuestos      0.31839 -0.05497
par(mfrow=c(2,1))
barplot(PCA$rotation[,1],ylim=c(-0.7,0.7),col=ifelse(PCA$rotation[,1]>0,"green","red"),
        main="Coeficientes estimados PC1")
barplot(PCA$rotation[,2],ylim=c(-0.7,0.7),col=ifelse(PCA$rotation[,2]>0,"green","red"),
        main="Coeficientes estimados PC2")

Se observa que el primer componente principal asigna pesos similares a la mayorĂ­a de las actividades econĂ³micas, lo que permite interpretarlo como una medida del desempeño general de cada departamento en la generaciĂ³n de PIB, reflejando su contribuciĂ³n econĂ³mica global. Por otro lado, el segundo componente presenta pesos negativos altos en actividades extractivistas como Agricultura, GanaderĂ­a y ExplotaciĂ³n Minera, y pesos positivos altos en actividades relacionadas con Arte, Ciencia y TecnologĂ­a. Por lo tanto, este componente se interpreta como un indicador de que tan tradicionales y no tradicionales es economĂ­a de cada departamento.

Para mejorar la interpretaciĂ³n del segundo componente, se invierte su sentido. De esta manera, los valores positivos representarĂ¡n economĂ­as con mayor dependencia de actividades extractivistas y tradicionales, como Agricultura, GanaderĂ­a, ExplotaciĂ³n Minera y comercio, mientras que los valores negativos reflejarĂ¡n economĂ­as mĂ¡s orientadas hacia actividades como Arte, Ciencia y TecnologĂ­a.

PCA$rotation[,2] = - PCA$rotation[,2]
PCA$x[, 2] = -PCA$x[, 2]

Ya con la construcciĂ³n del PCA, se reincorporan los departamentos previamente excluidos y se grafican los valores resultantes de cada departamento en las dos componentes seleccionadas. y se guarda dentro de la variable Desempeno el valor resultante del primer factor y dentro de Extrac el segundo factor

F_PCA=predict(PCA)[,1:2]

# ProyecciĂ³n de un nuevo individuo Bogota
Bog=predict(PCA,newdata=PIB[3,])[1:2]
Bog
## [1] 14.030189 -1.573419
# ProyecciĂ³n de un nuevo individuo San Andres
San=predict(PCA,newdata=PIB[28,])[1:2]
San
## [1] 3.193216 3.789935
F_PCA=rbind(F_PCA,Bog,San)

Desempeno = F_PCA[,1]
Extrac =F_PCA[,2]

Primer factor

Se grafica el primer componente, donde se observa al Distrito Capital como el departamento con el mayor puntaje en desempeño general, con una gran diferencia respecto a los demĂ¡s. En contraste, ChocĂ³, Vichada y VaupĂ©s se encuentran entre los departamentos con los peores puntajes en este componente.

Segundo factor

Se grafica el segundo componente, donde se evidencia a Casanare como el departamento con una economĂ­a mĂ¡s orientada al extractivismo, con menor presencia de actividades tecnolĂ³gicas y tecnificadas. Algo a destacar es que San AndrĂ©s, Providencia y Santa Catalina ocupan el segundo lugar en este componente, debido a que el comercio, que predomina en estas regiones, se asocia con actividades menos tecnificadas.

TambiĂ©n se observa que los tres primeros valores en este segundo componente estĂ¡n relativamente alejados de los demĂ¡s departamentos. Esto provoca que algunos departamentos, cuya economĂ­a depende de actividades tradicionales pero cuyo desempeño general no es tan alto, obtengan un valor por debajo de cero en este componente.

par(mfrow=c(1,2))
# Ordenar los datos por el vector Desempeno
orden_desempeno <- order(Desempeno) # Orden ascendente
Desempeno_ordenado <- Desempeno[orden_desempeno]
rownames_ordenado <- rownames(F_PCA)[orden_desempeno]

# Crear el primer grĂ¡fico ordenado
dotchart(Desempeno_ordenado, labels=rownames_ordenado, pch=20, cex.lab=0.5, 
         main= "PC1 : Desempeño general", cex.lab=0.8)
abline(v=0, col="red", lty=2)

# Ordenar los datos por el vector Extrac
orden_extrac <- order(Extrac) # Orden ascendente
Extrac_ordenado <- Extrac[orden_extrac]
rownames_extrac_ordenado <- rownames(F_PCA)[orden_extrac]

# Crear el segundo grĂ¡fico ordenado
dotchart(Extrac_ordenado, labels=rownames_extrac_ordenado, pch=20, 
         main= "PC2 : EconomĂ­a Tradicional", cex.lab=0.8)
abline(v=0, col="red", lty=2)

CarcaterizaciĂ³n de Departamentos

-Casanare: Este departamento se posiciona en la parte mĂ¡s alta del eje Y, indicando una economĂ­a fuertemente orientada a actividades tradicionales como la agricultura, ganaderĂ­a y explotaciĂ³n minera. Sin embargo, en tĂ©rminos de desempeño general (eje X), se encuentra en un punto neutro, lo que refleja una contribuciĂ³n moderada al PIB total.

-Arauca: Con una economĂ­a tambiĂ©n orientada hacia actividades tradicionales, Arauca muestra un desempeño general bajo, lo que podrĂ­a limitar su desarrollo econĂ³mico en comparaciĂ³n con otros departamentos.

-BogotĂ¡: Destaca significativamente por su alto desempeño general, alejĂ¡ndose de los demĂ¡s departamentos. Su economĂ­a estĂ¡ altamente diversificada y centrada en actividades no tradicionales como el arte, manufactura, ciencia, informaciĂ³n y comunicaciones, consolidĂ¡ndose como el motor econĂ³mico del paĂ­s.

-San AndrĂ©s: Este departamento tiene un buen desempeño general, aunque con una economĂ­a inclinada hacia las actividades tradicionales. Este comportamiento estĂ¡ impulsado principalmente por el comercio, que tiene un peso considerable en su estructura econĂ³mica.

-Valle del Cauca: Presenta un buen desempeño general, enfocado en el desarrollo de una economĂ­a no tradicional. Su diversificaciĂ³n y orientaciĂ³n hacia sectores como la manufactura y el comercio lo posicionan como una regiĂ³n estratĂ©gica en la economĂ­a nacional.

-Antioquia: Similar al Valle del Cauca, Antioquia mantiene un buen desempeño general, con una economĂ­a diversificada y orientada hacia actividades no tradicionales. Su fortaleza en sectores como la industria y la tecnologĂ­a lo ubica como uno de los departamentos lĂ­deres en desarrollo econĂ³mico.

-ChocĂ³: Este departamento tiene un desempeño general bajo, siendo una de las regiones con mayores niveles de pobreza. Su economĂ­a no presenta un enfoque claro en actividades tradicionales ni no tradicionales, lo que refleja un rezago estructural.

-VaupĂ©s: Similar al ChocĂ³, VaupĂ©s no se destaca en ninguna actividad econĂ³mica especĂ­fica. Su desempeño general es bajo, reflejando las dificultades de desarrollo econĂ³mico en regiones apartadas con menor infraestructura y oportunidades.

Observaciones Generales

Los departamentos como BogotĂ¡, Antioquia y Valle del Cauca lideran en tĂ©rminos de desempeño general y diversificaciĂ³n econĂ³mica, mientras que regiones como ChocĂ³ y VaupĂ©s enfrentan retos significativos para desarrollar economĂ­as mĂ¡s dinĂ¡micas. Casanare y Arauca, aunque dependientes de actividades tradicionales, muestran diferencias en su desempeño general, destacando la necesidad de estrategias especĂ­ficas para cada regiĂ³n.

# RepresentaciĂ³n simultĂ¡nea de individuos y variables
biplot(PCA,col=c("grey","blue"),cex=0.8,xlim=c(-0.4,1.3), ylim=c(-0.2,0.65))
# Agregar nuevos puntos (BogotĂ¡ y San AndrĂ©s)
text(Bog[1], Bog[2], labels="Bogota", pos=4, cex=0.8, col="gray")
text(San[1], San[2], labels="San Andres", pos=4, cex=0.8, col="gray")

Cluestering

Con el objetivo de agrupar los departamentos segĂºn estructuras econĂ³micas similares, se utiliza el mĂ©todo de clustering k-means. Este mĂ©todo permite identificar grupos con caracterĂ­sticas homogĂ©neas en funciĂ³n de las componentes principales obtenidas del PCA.

Para determinar el nĂºmero Ă³ptimo de clĂºsteres, se aplica el mĂ©todo del codo, que evalĂºa la variaciĂ³n interna dentro de los grupos a medida que aumenta el nĂºmero de clĂºsteres. Se calcula el error cuadrĂ¡tico total para diferentes nĂºmeros de clĂºsteres (de 2 a 10) y se visualiza la relaciĂ³n entre el nĂºmero de clĂºsteres y el SSE en una grĂ¡fica.

Evaluar_k=function(n_clust,data,iter.max,nstart){
  km <- kmeans(x = data, centers = n_clust, nstart = nstart,iter.max=iter.max)
  return(km$tot.withinss)
}

k.opt=2:10
Eval_k=sapply(k.opt,Evaluar_k,data=F_PCA,iter.max=1000,nstart=50)

plot(k.opt,Eval_k,type="l",xlab="NĂºmero Cluster",ylab="SSE")

Eval_k
## [1] 249.95529 130.49677  76.25743  44.89810  33.04478  26.70560  20.56547
## [8]  15.97189  13.17165

Se determina la formaciĂ³n de cinco clĂºsteres por el mĂ©todo del codo, los cuales el modelo determina con los tamaños siguientes: 1, 3, 17, 3 y 9. El indicador de calidad del modelo, SSE (Suma de los Errores CuadrĂ¡ticos Internos), arroja un valor que explica el 91% de la variaciĂ³n total, lo cual sugiere que la variabilidad entre los grupos es alta y, al mismo tiempo, la variabilidad dentro de los grupos es baja. AdemĂ¡s el silhouette nos muestra que no hay puntos con puntajes negativos que puedan indicar puntos sobrepuestos en la agrupaciĂ³n

Estos resultados indican que los clĂºsteres son representativos y que el modelo logra identificar agrupaciones bien diferenciadas.

K=5                    

set.seed(101)                    # Semilla aleatoria
km_clusters5 <- kmeans(x = F_PCA, centers = K, nstart = 50,iter.max=1000) # ejecuciĂ³n algortimo Kmeans
km_clusters5                      # Resumen resultados de la agrupaciĂ³n 
## K-means clustering with 5 clusters of sizes 1, 3, 17, 3, 9
## 
## Cluster means:
##         PC1        PC2
## 1 14.030189 -1.5734190
## 2  5.599867 -0.6229855
## 3 -2.089883 -0.2560971
## 4  1.750012  4.2369975
## 5  1.852399 -0.2998278
## 
## Clustering vector:
## Anti Atla Boli Boya Cald Caqu Cauc Cesa Cord Cund Choc Huil La G Magd Meta Nari 
##    2    5    5    5    5    3    3    3    3    5    3    5    3    3    4    3 
## Nort Quin Risa Sant Sucr Toli Vall Arau Casa Putu Amaz Guai Guav Vaup Vich  Bog 
##    3    5    5    2    3    5    2    3    4    3    3    3    3    3    3    1 
##  San 
##    4 
## 
## Within cluster sum of squares by cluster:
## [1]  0.000000  3.170371 23.639444  4.981752 13.106530
##  (between_SS / total_SS =  91.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
Grupos5=km_clusters5$cluster

s5 = silhouette(Grupos5, dist(F_PCA))     # Silhoutte plot
plot(s5)

Por Ăºltimo, se presentan los grupos propuestos por el anĂ¡lisis de clustering en el grĂ¡fico a continuaciĂ³n. Estos clĂºsteres permiten identificar departamentos con estructuras econĂ³micas similares, lo que brinda una base para adoptar medidas especĂ­ficas adaptadas a las necesidades y caracterĂ­sticas de cada grupo.

# RepresentaciĂ³n grafica multivariante de los cluster
fviz_cluster(object=km_clusters5, data = F_PCA, show.clust.cent = TRUE,
             ellipse.type = "euclid", star.plot = TRUE, repel = TRUE,
             axes=c(1,2))