library(readxl)
data <- read_excel("Data Chile/Data (5).xlsx",
sheet = "Base de datos")
View(data)
Explicación de la base de datos: Comuna: Nombre de la comuna chilena. total_votos2020: Total de votos emitidos en la comuna durante el plebiscito de 2020. votos_aprobacion1: Número de votos a favor de la opción “Apruebo” en el plebiscito de 2020. votos_Aprueba: Proporción de votos a favor de la opción “Apruebo” en el plebiscito de 2020 (calculado como votos_aprobacion1 / total_votos2020).
total_votos2017: Total de votos emitidos en la comuna durante las elecciones de 2017. votos_candidato1: Número de votos recibidos por el candidato Sebastián Piñera en las elecciones de 2017. votos_Sebastian: Proporción de votos recibidos por Sebastián Piñera en las elecciones de 2017 (calculado como votos_candidato1 / total_votos2017).
FemeninoVotoP: Proporción de votos emitidos por mujeres en la comuna durante el plebiscito de 2020. Voto18a24P: Proporción de votos emitidos por personas de 18 a 24 años en la comuna durante el plebiscito de 2020.
FemeninoPadronP: Proporción de mujeres en el padrón electoral de la comuna. de18a24Padron: Proporción de personas de 18 a 24 años en el padrón electoral de la comuna. totalPadron: Total de personas en el padrón electoral de la comuna. IDC: Índice de Desarrollo Comunal, que mide el nivel de desarrollo de la comuna. Tasa_Delicuencial: Tasa de delincuencia en la comuna.
#Pregunta de Investigación: ¿Qué factores influyeron en el voto a favor del “apruebo” durante el Plebiscito Nacional Chileno sobre Constitución Política en el año 2020?
#Hipotesis: La participación de los jóvenes (18-24 años) y la participación femenina tuvieron un efecto significativo en el porcentaje de votos a favor del apruebo. Asimismo, de forma contraria, a menor IDC, mayor incremento de la tasa de delincuencia, generó una mayor inclinación por aprobar una reforma constitucional.
#Modelo 1:
library(rio)
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(ggfortify)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
library(see)
## Warning: package 'see' was built under R version 4.3.3
library(patchwork)
library(performance)
## Warning: package 'performance' was built under R version 4.3.3
library(nortest)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ lubridate 1.9.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ✔ readr 2.1.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ car::recode() masks dplyr::recode()
## ✖ purrr::some() masks car::some()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
exploracion de la data #nuestra variable dependiente es Porcentaje del voto a favor del “apruebo”
summary(data$votos_Aprueba)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2500 0.6940 0.7780 0.7587 0.8290 0.9130
El primer modelo trabaja la regresión lineal múltiple solo con variables relacionadas al plebiscito (usar variables de18a24Padron y FemeninoVotoP ) y hacer supuestos Nuestra variable dependiente es el porcentaje de votos a favor del apruebo durante el Plebiscito Nacional Chileno sobre Constitución Política en el año 2020 (votos_Aprueba) EN ESE SENTIDO LA HIPOTESIS QUE MANEJAMOS PARA EL PRIMER MODELO ES QUE TANTO EL VOTO DE LOS JOVENES Y EL VOTO FEMENINO TUVIERON RELEVANCIA Y SIRVEN PARA EXPLICAR EL PORCENTAJE QUE VOTO A FAVOR DEL APRUEBO EN LAS COMUNAS
##Prueba de Correlación para las variables del primer modelo:
cor.test(data$votos_Aprueba, data$de18a24Padron)
##
## Pearson's product-moment correlation
##
## data: data$votos_Aprueba and data$de18a24Padron
## t = 5.7448, df = 343, p-value = 2.032e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1968317 0.3896606
## sample estimates:
## cor
## 0.2962622
cor.test(data$votos_Aprueba, data$FemeninoVotoP)
##
## Pearson's product-moment correlation
##
## data: data$votos_Aprueba and data$FemeninoVotoP
## t = 3.308, df = 343, p-value = 0.001039
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.07157257 0.27628964
## sample estimates:
## cor
## 0.1758315
En ambos casos , en esta exploracion preliminar de la relacion entre nuestras variables podemos observar una baja correlacion directa , que mientras Y sube X también sube. Es importante destacar que esto de la correlacion no indica causalidad pero si que tan asociada esta una variable con la otra ##Primer modelo
library(tidyverse)
library(dplyr)
modelo1 <- data %>% lm(votos_Aprueba ~ de18a24Padron + FemeninoVotoP, data=. )
summary(modelo1)
##
## Call:
## lm(formula = votos_Aprueba ~ de18a24Padron + FemeninoVotoP, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.47683 -0.05346 0.00239 0.06378 0.18603
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.4412 0.1526 2.892 0.00407 **
## de18a24Padron 0.9024 0.1845 4.891 1.55e-06 ***
## FemeninoVotoP 0.4695 0.2998 1.566 0.11817
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09223 on 342 degrees of freedom
## Multiple R-squared: 0.09427, Adjusted R-squared: 0.08897
## F-statistic: 17.8 on 2 and 342 DF, p-value: 4.434e-08
Interpretación: Rápidamente respondemos algunas preguntas que nos plantea este resultado Seguimos nuestro flujograma para evaluar el modelo: a. Nos preguntamos si el modelo es válido: ● Si el p-value es menor a 0.05 significa que rechazamos la hipótesis nula, lo cual probaría que nuestro modelo sí funciona. ● Al tener un p-value de 4.434e-08 nuestro modelo sí funciona. b. ¿Qué tanto explica el modelo? ● Revisamos el R cuadrado ajustado que va de 0 a 1 (0% a 100%) ● En este caso las variables (en conjunto) explican el 8.89% de la variabilidad de la dependiente, entonces el modelo tiene un bajo nivel explicativo c. ¿Las variables independientes aportan al modelo? ● Nos enfocamos en el p-value de cada independiente, corroboramos que solamente la variable del porcentaje de voto de los jovenes rechaza la hipótesis nula al ser menor que 0.05. El de voto femenino no
modelo1$coefficients
## (Intercept) de18a24Padron FemeninoVotoP
## 0.4412321 0.9023780 0.4695400
Formula: y = 0,4412321+ de18a24Padron(0,90237)+FemeninoVotoP(0,4695400)
##Modelo2
modelo2<-lm(votos_Aprueba ~votos_Sebastian +Tasa_Delicuencial, data = data)
summary(modelo2)
##
## Call:
## lm(formula = votos_Aprueba ~ votos_Sebastian + Tasa_Delicuencial,
## data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.191185 -0.038305 0.002928 0.042351 0.141443
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.225e+00 2.251e-02 54.431 <2e-16 ***
## votos_Sebastian -8.962e-01 3.649e-02 -24.562 <2e-16 ***
## Tasa_Delicuencial 7.645e-06 3.034e-06 2.519 0.0122 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05807 on 342 degrees of freedom
## Multiple R-squared: 0.641, Adjusted R-squared: 0.6389
## F-statistic: 305.3 on 2 and 342 DF, p-value: < 2.2e-16
El modelo 2 explica la variabilidad de “votos_Aprueba” en un 63,9% y todas las variables son significativas para el modelo.
modelo2$coefficients
## (Intercept) votos_Sebastian Tasa_Delicuencial
## 1.225231e+00 -8.961580e-01 7.645070e-06
Ecuación: Y=1.22523079363+ X1(-0.89615803259)+ X2(0.00000764507)
#verificacion de supuestos
#Linealidad
cor.test(data$votos_Aprueba, data$votos_Sebastian)
##
## Pearson's product-moment correlation
##
## data: data$votos_Aprueba and data$votos_Sebastian
## t = -24.393, df = 343, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8320672 -0.7542982
## sample estimates:
## cor
## -0.7964527
cor.test(data$votos_Aprueba, data$Tasa_Delicuencial)
##
## Pearson's product-moment correlation
##
## data: data$votos_Aprueba and data$Tasa_Delicuencial
## t = 1.6333, df = 343, p-value = 0.1033
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.01790474 0.19165892
## sample estimates:
## cor
## 0.08784902
El resultado indica que el primer caso presenta una correlación negativa significativa.El segundo caso tiene correlación del 8,7%, por lo cual no se puede concluir que haya una correlación significativa entre la variable “votos_Aprueba” y “Tasa_Delicuencial”.
#Normalidad
library(readxl)
library(ggplot2)
library(tidyverse)
library(ggfortify)
library(see)
library(patchwork)
library(performance)
library(nortest)
library(lmtest)
library(car)
lillie.test(modelo2$resid)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo2$resid
## D = 0.034492, p-value = 0.4072
El p-valor es mayor a 0.05, así que se cumple el supuesto
#Homocedasticidad
bptest(modelo2)
##
## studentized Breusch-Pagan test
##
## data: modelo2
## BP = 19.207, df = 2, p-value = 6.75e-05
El p-valor es menor a 0.05, por lo que el modelo no resulta ser homocedástico
#Independencia de residuos
set.seed(11)
durbinWatsonTest(modelo2,simulate = TRUE,reps = 1000)
## lag Autocorrelation D-W Statistic p-value
## 1 0.05717915 1.883378 0.28
## Alternative hypothesis: rho != 0
El p-valor es mayor a 0.05, de modo que se afirma que los residuos son independientes entre sí
###Modelo 3
modelo3.0<-data %>% lm(votos_Aprueba ~ votos_Sebastian + FemeninoVotoP + Voto18a24P + IDC + Tasa_Delicuencial,data=.)
summary(modelo3.0)
##
## Call:
## lm(formula = votos_Aprueba ~ votos_Sebastian + FemeninoVotoP +
## Voto18a24P + IDC + Tasa_Delicuencial, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.171368 -0.035563 0.002567 0.039910 0.129729
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.148e-01 9.735e-02 9.397 < 2e-16 ***
## votos_Sebastian -8.870e-01 3.584e-02 -24.750 < 2e-16 ***
## FemeninoVotoP 5.655e-01 1.862e-01 3.037 0.00258 **
## Voto18a24P 7.364e-02 3.562e-02 2.067 0.03945 *
## IDC 6.748e-03 2.748e-02 0.246 0.80617
## Tasa_Delicuencial 6.995e-06 2.996e-06 2.335 0.02013 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05686 on 339 degrees of freedom
## Multiple R-squared: 0.6588, Adjusted R-squared: 0.6537
## F-statistic: 130.9 on 5 and 339 DF, p-value: < 2.2e-16
#Interpretación: El modelo de regresión lineal múltiple ajustado para explicar el porcentaje de votos a favor del “Apruebo” en el plebiscito chileno de 2020 utiliza las variables votos_Sebastian, FemeninoVotoP,Voto18a24P, IDC, y `TTasa_Delicuencial. El resultado muestra un R-cuadrado ajustado de 0.6537, lo que indica que aproximadamente el 65.37% de la variabilidad en el porcentaje de votos a favor del “Apruebo” se explica por las variables independientes incluidas en el modelo. El p-valor (< 2.2e-16) indica que el modelo es significativo.
En cuanto a los coeficientes, votos_Sebastian tiene un coeficiente negativo significativo (-0.887) con un p-valor < 2e-16, lo que sugiere que una mayor proporción de votos para Sebastián Piñera en 2017 está asociada con una menor proporción de votos a favor del “Apruebo”. FemeninoVotoPenVoto18a24P también tiene un coeficiente positivo significativo (0.736) con un p-valor de 0.03945, sugiriendo que una mayor participación de votantes jóvenes (18-24 años) se relaciona con un aumento en los votos a favor del “Apruebo”. Tasa_DelicuencialtieneIDCNo
En cuanto al IDC, ese señala que su p-valor asociado es 0.80617. Esto sugiere que, dentro del contexto de este modelo y los datos disponibles, el IDC no tiene un impacto estadísticamente significativo en el porcentaje de votos a favor del “Apruebo”.
Asi que la quitamos de la formula:
modelo3<-data %>% lm(votos_Aprueba ~ votos_Sebastian + FemeninoVotoP + Voto18a24P + Tasa_Delicuencial,data=.)
summary(modelo3)
##
## Call:
## lm(formula = votos_Aprueba ~ votos_Sebastian + FemeninoVotoP +
## Voto18a24P + Tasa_Delicuencial, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.172217 -0.036053 0.002996 0.039623 0.129949
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.098e-01 9.509e-02 9.568 < 2e-16 ***
## votos_Sebastian -8.873e-01 3.576e-02 -24.812 < 2e-16 ***
## FemeninoVotoP 5.798e-01 1.768e-01 3.280 0.00115 **
## Voto18a24P 7.398e-02 3.554e-02 2.081 0.03815 *
## Tasa_Delicuencial 7.068e-06 2.977e-06 2.374 0.01814 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05678 on 340 degrees of freedom
## Multiple R-squared: 0.6587, Adjusted R-squared: 0.6547
## F-statistic: 164.1 on 4 and 340 DF, p-value: < 2.2e-16
El R-cuadrado ajustado para ambos modelos es muy similar: 0.6537 para el modelo con IDC y 0.6547 para el modelo sin IDC. La diferencia es mínima, lo que sugiere que la inclusión del IDC no contribuye significativamente a la capacidad explicativa del modelo.
Al eliminar el IDC del modelo, los coeficientes de las otras variables permanecen prácticamente iguales, tanto en magnitud como en significancia. #Formula
modelo3$coefficients
## (Intercept) votos_Sebastian FemeninoVotoP Voto18a24P
## 9.098402e-01 -8.873239e-01 5.797502e-01 7.397823e-02
## Tasa_Delicuencial
## 7.067849e-06
votos_Aprueba= 0,9098+( − 0,8873×votos_Sebastian)+( 0,5798×FemeninoVotoP )+( 0,7398×Voto18a24P )+( 7.068 e−06×Tasa_Delicuencial)
La fórmula nos dice que las variables votos_Sebastian, FemeninoVotoP, Voto18a24P, y Tasa_Delicuencial tienen todas un impacto significativo en el porcentaje de votos a favor del “Apruebo”. Específicamente, mientras que un mayor apoyo previo a Sebastián Piñera se asocia con una menor proporción de votos a favor del “Apruebo”, una mayor participación de mujeres y jóvenes, así como una mayor tasa de delincuencia, se asocian con un mayor apoyo al “Apruebo”.
##Supuestos
lillie.test(modelo3$resid)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo3$resid
## D = 0.031444, p-value = 0.5579
Es mayor a 0.05, asi que si estamos frente a un caso de distribucción normal de residuos
bptest(modelo3)
##
## studentized Breusch-Pagan test
##
## data: modelo3
## BP = 23.069, df = 4, p-value = 0.0001227
#Multicolinealidad
library(car)
vif(modelo3)
## votos_Sebastian FemeninoVotoP Voto18a24P Tasa_Delicuencial
## 1.004775 1.035400 1.025635 1.006609
#Independencia de Residuos
set.seed(11)
durbinWatsonTest(modelo3,simulate = TRUE,reps = 1000)
## lag Autocorrelation D-W Statistic p-value
## 1 0.0362069 1.924597 0.478
## Alternative hypothesis: rho != 0
Al ser mayor a 0.05, entonces podemos afirmar que los residuos son independientes o que no están autocrrelacionados. El modelo sí pasa este supuesto
#CLUSTERS
library(dplyr)
library(cluster)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(NbClust)
library(tidyr)
library(rio)
library(tidyverse)
data <- data %>%
column_to_rownames("Comuna") %>%
as.data.frame()
library(dplyr)
data1=select(data, "votos_Aprueba","votos_Sebastian", "FemeninoVotoP","de18a24Padron", "Tasa_Delicuencial")
Matriz de correlación
library(corrplot)
## corrplot 0.92 loaded
# Calcular la matriz de correlación
cor_matrix <- cor(data1)
# Visualizar la matriz de correlación utilizando un mapa de calor
corrplot(cor_matrix, method = "color", col = colorRampPalette(c("blue", "white", "red"))(200),
type = "upper", order = "hclust",
addCoef.col = "black", # Añadir coeficientes de correlación
tl.col = "black", tl.srt = 45, # Color y rotación de las etiquetas
number.cex = 0.7, # Tamaño de los números
diag = FALSE) # No mostrar la diagonal
Colores y Significado: Rojo: Correlación positiva (valores más cercanos
a +1 indican una fuerte correlación positiva). Azul: Correlación
negativa (valores más cercanos a -1 indican una fuerte correlación
negativa). Blanco: Correlación cercana a cero (indica poca o ninguna
correlación). El mapa de calor revela que la variable votos_Sebastian
tiene la correlación negativa más fuerte con votos_Aprueba, lo que
sugiere una relación inversa significativa. Las variables FemeninoVotoP
y de18a24Padron muestran correlaciones positivas con votos_Aprueba,
aunque de manera más moderada.
Matriz de distancias
library(factoextra)
library(ggplot2)
m.distancia <- get_dist(data1, method = "euclidean", stand = TRUE)
fviz_dist(m.distancia,gradient = list(low="blue", mid="white", high ="red"))
La matriz de distancias proporciona una visión detallada de cómo las
comunas de Chile se comparan entre sí en términos de las variables
seleccionadas. Las áreas en azul oscuro indican comunas con
características similares, mientras que las áreas en rojo indican
comunas con diferencias significativas
#Elección de numeros de clusters
library(NbClust)
resnumclust=NbClust(data1, distance = "euclidean", min.nc= 2, max.nc= 10,
method = "ward.D")
## *** : The Hubert index is a graphical method of determining the number of clusters.
## In the plot of Hubert index, we seek a significant knee that corresponds to a
## significant increase of the value of the measure i.e the significant peak in Hubert
## index second differences plot.
##
## *** : The D index is a graphical method of determining the number of clusters.
## In the plot of D index, we seek a significant knee (the significant peak in Dindex
## second differences plot) that corresponds to a significant increase of the value of
## the measure.
##
## *******************************************************************
## * Among all indices:
## * 5 proposed 2 as the best number of clusters
## * 5 proposed 3 as the best number of clusters
## * 1 proposed 4 as the best number of clusters
## * 5 proposed 5 as the best number of clusters
## * 1 proposed 9 as the best number of clusters
## * 4 proposed 10 as the best number of clusters
##
## ***** Conclusion *****
##
## * According to the majority rule, the best number of clusters is 2
##
##
## *******************************************************************
#Interpretación: La mayoría de los índices (5 de ellos) propusieron 2 clusters como el número óptimo. Aunque el mismo número de índices también propuso 3 y 5 clusters, la elección de 2 clusters se justifica por la simplicidad y la claridad en la interpretación de los resultados, y también puede ser reforzada por la observación del dendrograma y la matriz de distancia.
#Observamos el dendograma
#Aca especificamos el número de clusters que deseamos
res1 <- hcut(data1, k = 2, stand = TRUE, hc_method = "ward.D")
#Ward: se va agrupando de acuerdo a las menores distancias
#comando de gráfico
#rect= agregar rectangulo punteado
#cex=Tamaño del titulo
fviz_dend(res1, rect = T, cex = 0.5)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Las comunas se dividen claramente en dos clusters principales, uno
representado en rojo y el otro en azul. Esta división sugiere que
existen dos grupos principales de comunas con características
significativamente diferentes basadas en las variables seleccionadas.
Altura del Dendrograma: La altura a la cual se fusionan los clusters
refleja la similitud entre ellos. Los clusters que se fusionan a menor
altura son más similares entre sí, mientras que aquellos que se fusionan
a mayor altura son más diferentes. En este caso, la gran altura a la
cual los dos clusters principales se unen indica una diferencia
significativa entre estos dos grupos.
fviz_cluster(res1, data = data1)
#Caracteristicas del grupo:
data$clus=as.factor(res1$cluster) #Agregamos la asignación a la base de datos inicial
table(data$clus)
##
## 1 2
## 211 134
# Cargar la biblioteca ggplot2
library(ggplot2)
# Crear un boxplot para cada variable por cluster
ggplot(data, aes(x = clus, y = votos_Aprueba, fill = clus)) +
geom_boxplot() +
labs(title = "Distribución de votos_Aprueba por Cluster", x = "Cluster", y = "votos_Aprueba")
ggplot(data, aes(x = clus, y = votos_Sebastian, fill = clus)) +
geom_boxplot() +
labs(title = "Distribución de votos_Sebastian por Cluster", x = "Cluster", y = "votos_Sebastian")
ggplot(data, aes(x = clus, y = FemeninoVotoP, fill = clus)) +
geom_boxplot() +
labs(title = "Distribución de FemeninoVotoP por Cluster", x = "Cluster", y = "FemeninoVotoP")
ggplot(data, aes(x = clus, y = de18a24Padron, fill = clus)) +
geom_boxplot() +
labs(title = "Distribución de de18a24Padron por Cluster", x = "Cluster", y = "de18a24Padron")
ggplot(data, aes(x = clus, y = Tasa_Delicuencial, fill = clus)) +
geom_boxplot() +
labs(title = "Distribución de Tasa_Delicuencial por Cluster", x = "Cluster", y = "Tasa_Delicuencial")
library(dplyr)
clust_car<-data1 %>%
mutate(Cluster = res1$cluster) %>%
group_by(Cluster) %>%
summarise_all("mean")
clust_car
## # A tibble: 2 × 6
## Cluster votos_Aprueba votos_Sebastian FemeninoVotoP de18a24Padron
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 0.804 0.513 0.527 0.0930
## 2 2 0.687 0.603 0.517 0.0585
## # ℹ 1 more variable: Tasa_Delicuencial <dbl>
Conclusión: Los resultados del clustering jerárquico revelan dos grupos distintos de comunas con características diferenciales en términos de comportamiento electoral y demografía:
Cluster 1: Comunas con un mayor apoyo al “Apruebo”, menor apoyo a Sebastián Piñera, mayor participación femenina y mayor proporción de votantes jóvenes. Cluster 2: Comunas con un menor apoyo al “Apruebo”, mayor apoyo a Sebastián Piñera, menor participación femenina y menor proporción de votantes jóvenes.
#MAPA:
library(sf)
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(ggplot2)
library(dplyr)
library(tibble)
library(stringr)
# Especificar la carpeta y archivo del shapefile
folder <- "Data Chile" # Nombre de la carpeta
file <- "comunas.shp" # Nombre del shapefile
# Crear la ruta completa al archivo shapefile
mapaFile <- file.path(folder, file)
# Leer el archivo shapefile
comunas <- st_read(mapaFile, stringsAsFactors = FALSE)
## Reading layer `comunas' from data source
## `C:\Users\Mariano\Desktop\PROYECTO ESTADISTICA 2 BURKILI\Data Chile\comunas.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 346 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -12184470 ymin: -7554436 xmax: -7393642 ymax: -1978920
## Projected CRS: WGS 84 / Pseudo-Mercator
limpiar_nombres <- function(texto) {
texto <- str_replace_all(texto, c(
"Á" = "A", "É" = "E", "Í" = "I", "Ó" = "O", "Ú" = "U",
"á" = "a", "é" = "e", "í" = "i", "ó" = "o", "ú" = "u",
"Ü" = "U", "ü" = "u", "Ñ" = "N", "ñ" = "n"
))
texto <- tolower(texto) # Convertir a minúsculas
return(texto)
}
# Convertir rownames a una columna si es necesario
datamapa <- data %>%
rownames_to_column(var = "Comuna")
# Aplicar la función de limpieza a los nombres de las comunas en ambos datasets
datamapa$Comuna <- limpiar_nombres(datamapa$Comuna)
comunas$Comuna <- limpiar_nombres(comunas$Comuna)
# Unir los datos de clusters con el shapefile
comunasmapa <- comunas %>% left_join(datamapa, by = "Comuna")
# Crear el mapa con ggplot2
ggplot(comunasmapa) +
geom_sf(aes(fill = clus), color = "white") +
scale_fill_manual(values = c("red", "blue"), name = "Cluster") +
labs(title = "Mapa de Comunas por Cluster",
subtitle = "Cluster 1 vs Cluster 2",
caption = "Fuente: Datos de Clusters y Shapefile de Comunas") +
theme_minimal()
Distribución Geográfica del Cluster 1 (Rojo):
Las comunas del Cluster 1, que votaron mayoritariamente a favor del “Apruebo”, se concentran en el norte y en la región central de Chile, así como en algunas áreas del sur. Esto sugiere un apoyo más fuerte al “Apruebo” en estas regiones. Las comunas urbanas y metropolitanas, particularmente alrededor de Santiago y otras ciudades grandes, también muestran un apoyo significativo al “Apruebo”. Distribución Geográfica del Cluster 2 (Azul):
Las comunas del Cluster 2, que no apoyaron mayoritariamente el “Apruebo”, están dispersas a lo largo de todo el país, pero con una notable presencia en la región central y sur. Algunas comunas en las regiones más australes también pertenecen a este cluster, indicando una menor inclinación hacia el “Apruebo”. Regiones de Transición:
Hay una mezcla de clusters en algunas áreas, lo que sugiere una división más equilibrada en las preferencias de voto dentro de esas regiones. Esto puede reflejar diferencias socioeconómicas, culturales y políticas más complejas en estas zonas.
El N.A es de la región de la Antartida, en el cual no lo tomamos en cuenta por motivo que es una comuna en el cual no se cuenta con muchos datos.
#Mapa de calor
# Crear el mapa de calor con ggplot2
ggplot(comunasmapa) +
geom_sf(aes(fill = votos_Aprueba), color = "white") +
scale_fill_gradient(low = "blue", high = "red", name = "Porcentaje Apruebo") +
labs(title = "Mapa de Calor del Porcentaje de Apruebo por Comuna",
subtitle = "Plebiscito Constitucional",
caption = "Fuente: Datos de Porcentaje de Apruebo y Shapefile de Comunas") +
theme_minimal()