“Relación entre la Densidad Poblacional y el Tamaño de la Población en las Tendencias Electorales: Un Análisis de Regresión Simple”
El análisis sobre la relación entre la concentración poblacional y la preferencia de voto en Estados Unidos puede beneficiarse al considerar no solo la cantidad absoluta de población sino también la densidad poblacional y la urbanización. Estudios previos han evidenciado que las zonas urbanas, que tienden a tener mayor concentración poblacional, presentan una mayor propensión al voto demócrata, mientras que las zonas rurales, con menor densidad y dispersión poblacional, tienden a favorecer al partido republicano (Bafumi & Shapiro, 2012; Rodden, 2019).
Además, es importante considerar la heterogeneidad demográfica que se concentra en las áreas urbanas, como la diversidad racial y socioeconómica, la educación y la edad, que también influyen en la preferencia electoral (Frey, 2018). Esta complejidad es un factor mediador que debe tenerse en cuenta en análisis posteriores.
Podemos por tanto vamos a realizar un análisis sobre: la tendencia de la composicion demografica sobre las preferencias de voto en los Estados Unidos.
Nuestro objetivo en esta practica es ofrecer algunos análisis acerca de las elecciones de Estados Unidos del 2020. El análisis de las Elecciones de Estados Unidos en el 2020 esta destinado a profundizar nuestros conocimientos sobre las tendencias socio-demográficas en el comportamiento electoral, especialmente, si los patrones de asentamiento o el tamaño de la población esta relacionada con un tipo de voto especifico.
De manera que, nuestra pregunta inicial de investigación es:
1.¿Existe alguna relación entre la estructura demográfica y la preferencia de voto (demócrata, republicano u otros) en los Estados Unidos?“/”
Operativamente esta pregunta es muy compleja porque atiende a consideraciones del tipo de la edad, sexo, tamaño, densidad, composición racial, entre otras variables. Sin embargo, en esta trabajo nos vamos a enfocar especialmente en responder acerca de los patrones de concentración o tamaño población con respecto a la preferencia del voto.
Para responder esta pregunta es necesario que respondamos a cuestiones acerca de la distribución del voto entre los Estados y pueblos, a conocer la relación entre la densidad de población de esos estados, así como el tamaño de la población. De esta manera, podemos derivar la pregunta inicial de investigación en una hipótesis subyacente: la concentración de la población suele generar una tendencia de voto demócrata.
Para contrastar esta hipótesis debemos responder algunas cuestiones relacionadas a la proporción de la población en los pueblos y la proporción de los votos en los estados. Principalmente, buscaremos conocer si la tendencia del voto de los Demócratas o Republicanos están relacionados con la densidad de población, por un lado, y con la población total, por el otro. Para ello, haremos un análisis de correlación lineal simple considerando las variables de votación por partido las variables demográficas en los Estados y en los pueblos.
Para operativizar estos cálculos tecnológicamente ejecutaremos los siguientes procedimientos:
En el caso del almacenamiento de los datos, tenemos la ventaja de contar con un conjunto de datos de Repositorio de datos abiertos Kaggle. Este conjunto de datos seleccionado sobre las elecciones de Estados Unidos en 2020 cuenta con los registros de una serie de variables geográficas, demográficas, socio-educativas y económicas relacionadas con la tendencias electorales. Al contar con el software R mediante Rstudio, el almacenamiento sera una ejecución posterior de la carga de datos, en una variable manipularle para las siguientes actividades (Pre procesamiento y procesamiento de datos).
En el pre-procesamiento de los datos dividiremos la actividad en tareas complementarias. Las tareas complementarias son: análisis de la estructura de los datos, tanto como están organizados, como la composición de los datos.
Para el procesamiento de datos vamos a realizar una serie de cálculos orientados al análisis de correlación final entre nuestra variable dependiente (Las variaciones del voto demócrata o republicano), con respecto a la población o densidad población.
De manera que buscaremos conocer el porcentaje de votos obtenidos en las variables sobre la votación entre los demócratas o la votación entre los republicanos. Para calcular el porcentaje con la proporción adecuada aplicaremos la siguiente formula:
\[ \text{Porcentaje} = \left( \frac{\text{Parte}}{\text{Total}} \right) \times 100 \]
A su vez, como nos interesa también conocer la distribución de las votaciones de los demócratas y republicanos con respecto a la densidad de población o la cantidad poblacional por Estados, y no unicamente por los pueblos (asumiendo que el conjunto de datos ofrece los registros por los pueblos) calcularemos la densidad poblacional. Este indicador muestra cuántas personas hay por unidad de área en un lugar determinado. Es una medida de concentración de población.
La ecuación se calcula como:
\[\text{Densidad Poblacional} = \frac{\text{Población Total}}{\text{Área Total}}\]
Donde: * Población Total: El número total de habitantes en un área específica. * Área Total: La superficie de esa área, generalmente expresada en kilómetros cuadrados (\(\text{km}^2\)) o millas cuadradas (\(\text{mi}^2\)).
Luego del tratamiento de estas variables, podremos aplicar nuestro analisis principal: la regresion lineal simple. La ecuación fundamental de la regresión lineal simple busca modelar la relación lineal entre dos variables, ajustando una línea recta a los datos. Nos permite predecir el valor de una variable (dependiente) basándonos en el valor de otra (independiente). Se expresa de la siguiente manera:
\[\hat{y} = \beta_0 + \beta_1 x\]
Donde: * \(\hat{y}\) es el valor predicho de la variable dependiente. * \(x\) es el valor de la variable independiente. * \(\beta_0\) es la intercepción (o intercepto), que representa el valor de \(\hat{y}\) cuando \(x\) es igual a cero. * \(\beta_1\) es la pendiente (o coeficiente de regresión), que indica cuánto cambia \(\hat{y}\) por cada unidad de cambio en \(x\).
Interpretación de la Pendiente (\(\beta_1\)): * Si \(\beta_1\) es positivo (\(+\)), indica una relación positiva: a medida que \(x\) aumenta, \(\hat{y}\) también tiende a aumentar. * Si \(\beta_1\) es negativo (\(-\)), indica una relación negativa: a medida que \(x\) aumenta, \(\hat{y}\) tiende a disminuir.
Nuestro enfoque de visualización de datos se baso en las exploración de los resultados obtenidos de acuerdo a nuestros objetivos de investigación propuesto. Dejando a un lado los gráficos exploratorios, procedimos a gráficas nuestros análisis descriptivos con histogramas para conocer la distribución de los votos demócratas y republicanos, al cual añadimos un diagrama de caja de bigotes. El histograma también sirvió para conocer la distribución de la densidad poblacional y la población total.
Esos mismos gráficos fueron utiles para conocer los valores de distribución de la densidad poblacional la población total, y los votos de los partidos por Estado.
En el caso de la regresión lineal, para observar la tendencia negativa o positiva de las votaciones de los partidos Demócrata y Republicano, presentamos un gráfico de punto.
Asimismo, es importante mencionar la configuración de los Chunks para la adecuación visual de los gráficos de la siguiente manera:
| Opción | Descripción |
|---|---|
fig.width = 7 |
Ancho del gráfico en pulgadas (más ancho que el valor por defecto). |
fig.height = 5 |
Alto del gráfico en pulgadas. |
out.width = '70%' |
Escala el ancho del gráfico al 70% del ancho del texto del documento. |
out.height = '400px' |
Controla la altura visual del gráfico en píxeles. |
fig.align = 'center' |
Centra el gráfico horizontalmente en la página. |
dev = 'png' |
Genera el gráfico en formato PNG (útil para exportación o control visual). |
fig.show = 'hold' |
Muestra todos los gráficos juntos en un solo bloque si hay varios en el chunk. |
Posteriormente a los análisis hechos buscaremos obtener una conclusión acerca de la relación entre la densidad de la población y la cantidad de población en los Pueblos y los Estados con respecto a las tendencias de votación en las elecciones del 2020. Nuestros procedimientos buscaran conocer si efectivamente nuestra hipótesis se confirma: *la existencia de una relación entre la concentración urbana y la dispersión urbana con respecto al tipo de votación.
La primera tarea es cargar el conjunto de datos, para que posteriormente se puedan almacenar en un objeto en R.
##
## 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(ggplot2)
library(readr)
# --- Opción 1 (Recomendada): Usar barras inclinadas normales (/) ---
# Esta es la forma más segura y portable en R.
ruta_zip_corregida <- "C:/Users/user/Downloads/archive (3).zip"
nombre_csv_dentro_zip <- "US_Election_dataset_v1.csv"
datos_directo <- read.csv(unz(ruta_zip_corregida, nombre_csv_dentro_zip), header = TRUE, sep = ",")
# --- Ahora sí, muestra los datos ---
print("\nDatos leídos con Lectura directa (corregido):")## [1] "\nDatos leídos con Lectura directa (corregido):"
A continuación presentaremos una breve exploración del conjunto de datos. La exploración del conjunto de datos se caracterizara por algunas tareas básicas. Las tareas básicas de la exploración de los datos se dividirá en: 1) La exploración de la estructura del data frame y 2) la exploración de la estructura de la información.
En la exploración de la estructura del data frame empezaremos por conocer las características principales la composicion del data frame. Esta exploración busca conocer las dimensiones del data frame (el numero de las variables y el numero de los registros y observaciones), el nombre de las variables, la presencia de registros duplicados, identificacion de las claves primarias, y el tipo de objeto de las variables, el tipo de almacenamiento interno de las variables,
## [1] "### Dimensiones del Data Frame\n"
cat("El data frame tiene", nrow(datos_directo), "filas (registros u observaciones) y", ncol(datos_directo), "columnas (variables).\n\n")## El data frame tiene 3143 filas (registros u observaciones) y 35 columnas (variables).
## ### Nombres de las Variables
## [1] "X"
## [2] "county"
## [3] "state"
## [4] "X2020.Democrat.vote.raw"
## [5] "X2020.Democrat.vote.."
## [6] "X2020.Republican.vote.raw"
## [7] "X2020.Republican.vote.."
## [8] "X2020.other.vote.raw"
## [9] "X2020.other.vote.."
## [10] "Population.with.less.than.9th.grade.education"
## [11] "Population.with.9th.to.12th.grade.education..no.diploma"
## [12] "High.School.graduate.and.equivalent"
## [13] "Some.College.No.Degree"
## [14] "Associates.Degree"
## [15] "Bachelors.Degree"
## [16] "Graduate.or.professional.degree"
## [17] "Gini.Index"
## [18] "Median.income..dollars."
## [19] "Mean.income..dollars."
## [20] "Area.in.square.Km"
## [21] "Density.per.square.km"
## [22] "Total.Population"
## [23] "Hispanic.or.Latino.percentage"
## [24] "NH.White.percentage"
## [25] "NH.Black.percentage"
## [26] "NH.American.Indian.and.Alaska.Native.percentage"
## [27] "NH.Asian.percentage"
## [28] "NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage"
## [29] "NH.Some.Other.Race.percentage"
## [30] "NH.Two.or.More.Races.percentage"
## [31] "Percentage.engaged.in.Management..business..science..and.arts.occupations"
## [32] "Percentage.engaged.in.Service.Occupations"
## [33] "Percentage.engaged.in.Sales.and.Office"
## [34] "Percentage.engaged.in.Resources.and.Construction"
## [35] "Percentage.engaged.in.Transportation"
## ### Tipos de Datos de Cada Variable
# Muestra la estructura concisa del data frame, incluyendo el tipo de datos de cada columna
# 'str()' es excelente para obtener un resumen rápido y completo
sapply(datos_directo, class)## X
## "character"
## county
## "character"
## state
## "character"
## X2020.Democrat.vote.raw
## "numeric"
## X2020.Democrat.vote..
## "numeric"
## X2020.Republican.vote.raw
## "integer"
## X2020.Republican.vote..
## "numeric"
## X2020.other.vote.raw
## "integer"
## X2020.other.vote..
## "numeric"
## Population.with.less.than.9th.grade.education
## "character"
## Population.with.9th.to.12th.grade.education..no.diploma
## "character"
## High.School.graduate.and.equivalent
## "character"
## Some.College.No.Degree
## "character"
## Associates.Degree
## "character"
## Bachelors.Degree
## "character"
## Graduate.or.professional.degree
## "character"
## Gini.Index
## "numeric"
## Median.income..dollars.
## "character"
## Mean.income..dollars.
## "character"
## Area.in.square.Km
## "numeric"
## Density.per.square.km
## "numeric"
## Total.Population
## "integer"
## Hispanic.or.Latino.percentage
## "numeric"
## NH.White.percentage
## "numeric"
## NH.Black.percentage
## "numeric"
## NH.American.Indian.and.Alaska.Native.percentage
## "numeric"
## NH.Asian.percentage
## "numeric"
## NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage
## "numeric"
## NH.Some.Other.Race.percentage
## "numeric"
## NH.Two.or.More.Races.percentage
## "numeric"
## Percentage.engaged.in.Management..business..science..and.arts.occupations
## "numeric"
## Percentage.engaged.in.Service.Occupations
## "numeric"
## Percentage.engaged.in.Sales.and.Office
## "numeric"
## Percentage.engaged.in.Resources.and.Construction
## "numeric"
## Percentage.engaged.in.Transportation
## "numeric"
## ### Tipos de almacenamiento de Cada Variable
## X
## "character"
## county
## "character"
## state
## "character"
## X2020.Democrat.vote.raw
## "double"
## X2020.Democrat.vote..
## "double"
## X2020.Republican.vote.raw
## "integer"
## X2020.Republican.vote..
## "double"
## X2020.other.vote.raw
## "integer"
## X2020.other.vote..
## "double"
## Population.with.less.than.9th.grade.education
## "character"
## Population.with.9th.to.12th.grade.education..no.diploma
## "character"
## High.School.graduate.and.equivalent
## "character"
## Some.College.No.Degree
## "character"
## Associates.Degree
## "character"
## Bachelors.Degree
## "character"
## Graduate.or.professional.degree
## "character"
## Gini.Index
## "double"
## Median.income..dollars.
## "character"
## Mean.income..dollars.
## "character"
## Area.in.square.Km
## "double"
## Density.per.square.km
## "double"
## Total.Population
## "integer"
## Hispanic.or.Latino.percentage
## "double"
## NH.White.percentage
## "double"
## NH.Black.percentage
## "double"
## NH.American.Indian.and.Alaska.Native.percentage
## "double"
## NH.Asian.percentage
## "double"
## NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage
## "double"
## NH.Some.Other.Race.percentage
## "double"
## NH.Two.or.More.Races.percentage
## "double"
## Percentage.engaged.in.Management..business..science..and.arts.occupations
## "double"
## Percentage.engaged.in.Service.Occupations
## "double"
## Percentage.engaged.in.Sales.and.Office
## "double"
## Percentage.engaged.in.Resources.and.Construction
## "double"
## Percentage.engaged.in.Transportation
## "double"
## ### Vista Previa de las Primeras Filas
# Muestra las primeras 6 filas del data frame. Puedes cambiar 'n=10' para ver más.
print(head(datos_directo))## X county state X2020.Democrat.vote.raw
## 1 Autauga County, Alabama Autauga County Alabama 7503
## 2 Baldwin County, Alabama Baldwin County Alabama 24578
## 3 Barbour County, Alabama Barbour County Alabama 4816
## 4 Bibb County, Alabama Bibb County Alabama 1986
## 5 Blount County, Alabama Blount County Alabama 2640
## 6 Bullock County, Alabama Bullock County Alabama 3446
## X2020.Democrat.vote.. X2020.Republican.vote.raw X2020.Republican.vote..
## 1 27.02 19838 71.44
## 2 22.41 83544 76.17
## 3 45.79 5622 53.45
## 4 20.70 7525 78.43
## 5 9.57 24711 89.57
## 6 74.70 1146 24.84
## X2020.other.vote.raw X2020.other.vote..
## 1 429 1.54
## 2 1557 1.42
## 3 80 0.76
## 4 84 0.88
## 5 237 0.86
## 6 21 0.46
## Population.with.less.than.9th.grade.education
## 1 1.70%
## 2 2.00%
## 3 7.30%
## 4 6.40%
## 5 7.10%
## 6 9.90%
## Population.with.9th.to.12th.grade.education..no.diploma
## 1 7.90%
## 2 6.40%
## 3 16.20%
## 4 14.70%
## 5 11.10%
## 6 16.70%
## High.School.graduate.and.equivalent Some.College.No.Degree Associates.Degree
## 1 31.10% 21.00% 8.70%
## 2 27.80% 21.70% 9.60%
## 3 36.80% 19.90% 7.90%
## 4 40.90% 19.10% 8.00%
## 5 35.30% 20.70% 11.00%
## 6 41.30% 19.50% 3.20%
## Bachelors.Degree Graduate.or.professional.degree Gini.Index
## 1 16.70% 12.80% 0.4541
## 2 20.00% 12.50% 0.4648
## 3 6.60% 5.30% 0.5098
## 4 6.60% 4.30% 0.4553
## 5 9.40% 5.30% 0.4475
## 6 6.90% 2.50% 0.5058
## Median.income..dollars. Mean.income..dollars. Area.in.square.Km
## 1 68,315 90,372 1539.63
## 2 71,039 96,027 4117.73
## 3 39,712 60,128 2292.16
## 4 50,669 65,131 1612.19
## 5 57,440 75,954 1670.26
## 6 36,136 52,269 1613.08
## Density.per.square.km Total.Population Hispanic.or.Latino.percentage
## 1 38.17 58805 3.60
## 2 56.69 231767 5.47
## 3 10.85 25223 5.99
## 4 13.80 22293 3.32
## 5 35.37 59134 9.76
## 6 6.40 10357 4.86
## NH.White.percentage NH.Black.percentage
## 1 70.71 19.30
## 2 80.47 7.77
## 3 43.95 46.98
## 4 73.75 19.69
## 5 84.15 1.40
## 6 22.02 71.33
## NH.American.Indian.and.Alaska.Native.percentage NH.Asian.percentage
## 1 0.31 1.48
## 2 0.56 0.88
## 3 0.23 0.41
## 4 0.17 0.12
## 5 0.32 0.29
## 6 0.01 0.09
## NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage
## 1 0.04
## 2 0.05
## 3 0.00
## 4 0.04
## 5 0.02
## 6 0.07
## NH.Some.Other.Race.percentage NH.Two.or.More.Races.percentage
## 1 0.31 4.23
## 2 0.33 4.47
## 3 0.25 2.19
## 4 0.21 2.69
## 5 0.17 3.89
## 6 0.30 1.32
## Percentage.engaged.in.Management..business..science..and.arts.occupations
## 1 36.39
## 2 35.62
## 3 27.73
## 4 22.22
## 5 26.75
## 6 20.73
## Percentage.engaged.in.Service.Occupations
## 1 14.24
## 2 17.14
## 3 20.16
## 4 15.32
## 5 12.98
## 6 18.19
## Percentage.engaged.in.Sales.and.Office
## 1 22.02
## 2 24.20
## 3 19.49
## 4 20.57
## 5 22.73
## 6 9.83
## Percentage.engaged.in.Resources.and.Construction
## 1 9.99
## 2 9.91
## 3 12.53
## 4 16.43
## 5 15.81
## 6 16.88
## Percentage.engaged.in.Transportation
## 1 17.36
## 2 13.13
## 3 20.09
## 4 25.47
## 5 21.73
## 6 34.38
## ### Vista Previa de las Últimas Filas
# Muestra las últimas 6 filas del data frame. Puedes cambiar 'n=10' para ver más.
print(tail(datos_directo))## X county state
## 3138 Sublette County, Wyoming Sublette County Wyoming
## 3139 Sweetwater County, Wyoming Sweetwater County Wyoming
## 3140 Teton County, Wyoming Teton County Wyoming
## 3141 Uinta County, Wyoming Uinta County Wyoming
## 3142 Washakie County, Wyoming Washakie County Wyoming
## 3143 Weston County, Wyoming Weston County Wyoming
## X2020.Democrat.vote.raw X2020.Democrat.vote.. X2020.Republican.vote.raw
## 3138 882 17.75 3957
## 3139 3823 23.03 12229
## 3140 9848 67.10 4341
## 3141 1591 16.92 7496
## 3142 651 16.23 3245
## 3143 360 10.16 3107
## X2020.Republican.vote.. X2020.other.vote.raw X2020.other.vote..
## 3138 79.62 131 2.64
## 3139 73.66 551 3.32
## 3140 29.58 488 3.32
## 3141 79.73 315 3.35
## 3142 80.88 116 2.89
## 3143 87.72 75 2.12
## Population.with.less.than.9th.grade.education
## 3138 0.40%
## 3139 2.40%
## 3140 2.40%
## 3141 2.10%
## 3142 1.40%
## 3143 2.00%
## Population.with.9th.to.12th.grade.education..no.diploma
## 3138 3.70%
## 3139 4.60%
## 3140 1.70%
## 3141 3.50%
## 3142 3.90%
## 3143 6.90%
## High.School.graduate.and.equivalent Some.College.No.Degree
## 3138 28.00% 31.20%
## 3139 32.70% 25.80%
## 3140 16.70% 16.70%
## 3141 36.30% 27.40%
## 3142 28.50% 34.60%
## 3143 36.90% 23.10%
## Associates.Degree Bachelors.Degree Graduate.or.professional.degree
## 3138 11.10% 19.30% 6.30%
## 3139 14.60% 12.40% 7.60%
## 3140 2.30% 38.90% 21.40%
## 3141 11.50% 13.50% 5.60%
## 3142 10.60% 13.30% 7.90%
## 3143 13.50% 12.80% 4.80%
## Gini.Index Median.income..dollars. Mean.income..dollars. Area.in.square.Km
## 3138 0.5244 85,960 1,26,919 12655.93
## 3139 0.4433 79,375 99,929 27005.75
## 3140 0.5431 1,08,279 1,82,050 10351.78
## 3141 0.3615 78,164 85,497 5391.63
## 3142 0.3882 61,875 74,491 5798.15
## 3143 0.4784 71,800 92,279 6210.80
## Density.per.square.km Total.Population Hispanic.or.Latino.percentage
## 3138 0.70 8728 7.29
## 3139 1.56 42272 16.46
## 3140 2.26 23331 14.12
## 3141 3.81 20450 9.71
## 3142 1.33 7685 13.92
## 3143 1.11 6838 4.31
## NH.White.percentage NH.Black.percentage
## 3138 87.66 0.19
## 3139 76.56 0.83
## 3140 80.38 0.21
## 3141 85.30 0.24
## 3142 81.56 0.16
## 3143 89.30 0.41
## NH.American.Indian.and.Alaska.Native.percentage NH.Asian.percentage
## 3138 0.50 0.53
## 3139 0.61 0.67
## 3140 0.28 1.32
## 3141 0.60 0.53
## 3142 0.59 0.43
## 3143 1.35 0.38
## NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage
## 3138 0.11
## 3139 0.14
## 3140 0.01
## 3141 0.13
## 3142 0.01
## 3143 0.13
## NH.Some.Other.Race.percentage NH.Two.or.More.Races.percentage
## 3138 0.52 3.20
## 3139 0.35 4.38
## 3140 0.42 3.24
## 3141 0.37 3.11
## 3142 0.56 2.77
## 3143 0.50 3.63
## Percentage.engaged.in.Management..business..science..and.arts.occupations
## 3138 32.59
## 3139 30.80
## 3140 46.14
## 3141 31.19
## 3142 34.84
## 3143 32.32
## Percentage.engaged.in.Service.Occupations
## 3138 11.09
## 3139 15.47
## 3140 23.75
## 3141 17.86
## 3142 16.97
## 3143 16.34
## Percentage.engaged.in.Sales.and.Office
## 3138 28.36
## 3139 19.47
## 3140 17.91
## 3141 20.48
## 3142 18.43
## 3143 10.74
## Percentage.engaged.in.Resources.and.Construction
## 3138 15.77
## 3139 20.34
## 3140 5.81
## 3141 17.38
## 3142 14.84
## 3143 20.40
## Percentage.engaged.in.Transportation
## 3138 12.19
## 3139 13.92
## 3140 6.40
## 3141 13.09
## 3142 14.92
## 3143 20.20
## ### Detección de Filas Duplicadas
# Comprueba si hay filas completamente duplicadas en el data frame
num_duplicados <- sum(duplicated(datos_directo))
if (num_duplicados == 0) {
cat("No se encontraron filas completamente duplicadas en el data frame.\n")
} else {
cat("Se encontraron", num_duplicados, "filas completamente duplicadas.\n")
# Opcional: Para ver las filas duplicadas (mostrará la segunda y siguientes ocurrencias)
# print(datos[duplicated(datos), ])
}## No se encontraron filas completamente duplicadas en el data frame.
# Suponiendo que tu dataframe se llama 'datos'
cat("### Análisis de Unicidad de Valores por Columna\n")## ### Análisis de Unicidad de Valores por Columna
cat("Se verifica si cada columna, de forma individual, contiene solo valores únicos y, por lo tanto, podría funcionar como un identificador único o clave primaria.\n\n")## Se verifica si cada columna, de forma individual, contiene solo valores únicos y, por lo tanto, podría funcionar como un identificador único o clave primaria.
# Bucle para iterar sobre cada columna del dataframe
for (col_name in names(datos_directo)) {
# Calcula el número de valores únicos en la columna actual
num_valores_unicos <- length(unique(datos_directo[[col_name]]))
# Obtiene el número total de filas del dataframe
num_filas_df <- nrow(datos_directo)
cat(paste0("--- Columna: '", col_name, "' ---\n"))
cat(paste0(" - Tipo de datos: ", class(datos_directo[[col_name]]), "\n"))
cat(paste0(" - Número de valores únicos: ", num_valores_unicos, "\n"))
cat(paste0(" - Número total de filas: ", num_filas_df, "\n"))
if (num_valores_unicos == num_filas_df) {
cat(paste0(" -> ¡Esta columna contiene solo valores únicos! Podría ser un **identificador único o clave primaria**.\n"))
} else {
cat(paste0(" -> Esta columna NO contiene solo valores únicos (faltan ", num_filas_df - num_valores_unicos, " valores si fuera única).\n"))
}
cat("\n") # Salto de línea para separar la salida de cada columna
}## --- Columna: 'X' ---
## - Tipo de datos: character
## - Número de valores únicos: 3143
## - Número total de filas: 3143
## -> ¡Esta columna contiene solo valores únicos! Podría ser un **identificador único o clave primaria**.
##
## --- Columna: 'county' ---
## - Tipo de datos: character
## - Número de valores únicos: 1878
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1265 valores si fuera única).
##
## --- Columna: 'state' ---
## - Tipo de datos: character
## - Número de valores únicos: 51
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 3092 valores si fuera única).
##
## --- Columna: 'X2020.Democrat.vote.raw' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 2751
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 392 valores si fuera única).
##
## --- Columna: 'X2020.Democrat.vote..' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 2349
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 794 valores si fuera única).
##
## --- Columna: 'X2020.Republican.vote.raw' ---
## - Tipo de datos: integer
## - Número de valores únicos: 2952
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 191 valores si fuera única).
##
## --- Columna: 'X2020.Republican.vote..' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 2377
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 766 valores si fuera única).
##
## --- Columna: 'X2020.other.vote.raw' ---
## - Tipo de datos: integer
## - Número de valores únicos: 1235
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1908 valores si fuera única).
##
## --- Columna: 'X2020.other.vote..' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 406
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2737 valores si fuera única).
##
## --- Columna: 'Population.with.less.than.9th.grade.education' ---
## - Tipo de datos: character
## - Número de valores únicos: 177
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2966 valores si fuera única).
##
## --- Columna: 'Population.with.9th.to.12th.grade.education..no.diploma' ---
## - Tipo de datos: character
## - Número de valores únicos: 181
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2962 valores si fuera única).
##
## --- Columna: 'High.School.graduate.and.equivalent' ---
## - Tipo de datos: character
## - Número de valores únicos: 381
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2762 valores si fuera única).
##
## --- Columna: 'Some.College.No.Degree' ---
## - Tipo de datos: character
## - Número de valores únicos: 228
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2915 valores si fuera única).
##
## --- Columna: 'Associates.Degree' ---
## - Tipo de datos: character
## - Número de valores únicos: 182
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2961 valores si fuera única).
##
## --- Columna: 'Bachelors.Degree' ---
## - Tipo de datos: character
## - Número de valores únicos: 303
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2840 valores si fuera única).
##
## --- Columna: 'Graduate.or.professional.degree' ---
## - Tipo de datos: character
## - Número de valores únicos: 258
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2885 valores si fuera única).
##
## --- Columna: 'Gini.Index' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1286
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1857 valores si fuera única).
##
## --- Columna: 'Median.income..dollars.' ---
## - Tipo de datos: character
## - Número de valores únicos: 3020
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 123 valores si fuera única).
##
## --- Columna: 'Mean.income..dollars.' ---
## - Tipo de datos: character
## - Número de valores únicos: 3063
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 80 valores si fuera única).
##
## --- Columna: 'Area.in.square.Km' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 3124
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 19 valores si fuera única).
##
## --- Columna: 'Density.per.square.km' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 2427
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 716 valores si fuera única).
##
## --- Columna: 'Total.Population' ---
## - Tipo de datos: integer
## - Número de valores únicos: 3085
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 58 valores si fuera única).
##
## --- Columna: 'Hispanic.or.Latino.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1499
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1644 valores si fuera única).
##
## --- Columna: 'NH.White.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 2329
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 814 valores si fuera única).
##
## --- Columna: 'NH.Black.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1358
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1785 valores si fuera única).
##
## --- Columna: 'NH.American.Indian.and.Alaska.Native.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 471
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2672 valores si fuera única).
##
## --- Columna: 'NH.Asian.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 553
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2590 valores si fuera única).
##
## --- Columna: 'NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 114
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 3029 valores si fuera única).
##
## --- Columna: 'NH.Some.Other.Race.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 119
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 3024 valores si fuera única).
##
## --- Columna: 'NH.Two.or.More.Races.percentage' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 637
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2506 valores si fuera única).
##
## --- Columna: 'Percentage.engaged.in.Management..business..science..and.arts.occupations' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1800
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1343 valores si fuera única).
##
## --- Columna: 'Percentage.engaged.in.Service.Occupations' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1242
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1901 valores si fuera única).
##
## --- Columna: 'Percentage.engaged.in.Sales.and.Office' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1083
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 2060 valores si fuera única).
##
## --- Columna: 'Percentage.engaged.in.Resources.and.Construction' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1327
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1816 valores si fuera única).
##
## --- Columna: 'Percentage.engaged.in.Transportation' ---
## - Tipo de datos: numeric
## - Número de valores únicos: 1675
## - Número total de filas: 3143
## -> Esta columna NO contiene solo valores únicos (faltan 1468 valores si fuera única).
La exploración inicial nos dejo ver que el data frame tiene 3143 filas (registros u observaciones) y 35 columnas (variables). La mayoría de las variables tenían espacios y fueron leídas con un punto entre cada palabra.
Las variables se refieren en general a datos sobre las elecciones de estados unidos según el condado, el estado, el votos por partido, características educativas, económicas (excepto la mediana o media del ingreso), demográficas y socio-labrarles.
De acuerdo a la exploración del tipo de objeto las variables sobre las unidades político administrativas y educativas eran de tipo carácter, el resto numéricas. En cuanto al tipo de almacenamiento, las de tipo carácter, eran carácter, y las numéricas doble, excepto por unas de elecciones y el total de la población que eran integer.
No se encontraron filas completamente duplicadas en el data frame. Es importante, porque en primera instancia nos va a permitir iniciar las operaciones entre las variables sin preocupación, y ademas, verificando la legitimidad de las claves primarias.
Según nuestro análisis sobre la existencia de los valores únicos, la única de las variables que mantienen su unicidad es la variable X. Previamente observamos que la variable X puede estar referida al nombre de las unidades administrativas. Por tanto podemos asegurar con este análisis que el data set se refiere a las características electorales, partido-políticas, demográficas, económicas, socio-educativas, socio-laborales de unas elecciones en el 2020.
Por lo pronto, el pre-procesamiento requiere que cambiemos el nombre de las variables para su mejor manipulación. Asimismo, siendo coherentes con los objetivos de la investigación planteados, después de esta exploración podremos hacer una selección de las variables de estudio. En términos técnicos, esto permitirá reducir las tareas de pre-procesamiento, y asimismo, las exigencias de computo.
En esta sección se presenta la selección del conjunto de datos Elecciones con las siguientes variables escogidas:
En la siguiente tabla se definen las variables:
| Variable | Descripción |
|---|---|
| Pueblo | variable sobre la unidad política administrativa mínima |
| Estado | variable sobre la unidad política administrativa máxima |
| Voto Demócrata | variable sobre la cantidad de votos |
| Voto Republicano | variable sobre la cantidad de votos |
| Voto otros | variable sobre la cantidad de votos |
| Total de población | variable sobre la cantidad de personas |
| Densidad de población | variable sobre la cantidad de personas por km2 |
Para ello empezaremos por renombrar las columnas que nos interesan, y luego, hacer una selección de esas variables en un nuevo data frame, optimizando su futura manipulación.
# install.packages("dplyr")
library(dplyr)
# Usando 'datos_elecciones_usa'
# Rename multiple columns clearly:
datos_elecciones_usa <- datos_directo %>%
rename(
`Pueblo` = X,
`Estado` = state,
`Voto democrata` = X2020.Democrat.vote.raw,
`Voto republicano` = X2020.Republican.vote.raw,
`Voto otros` = X2020.other.vote.raw,
`Total de poblacion` = Total.Population,
`Superficie_KM2` = `Area.in.square.Km`,
`Densidad de poblacion` = Density.per.square.km # Corrected: used `=` instead of `:` and backticks for new name
)
cat("Nombres de columnas cambiados con dplyr::rename(). Nuevos nombres:\n")## Nombres de columnas cambiados con dplyr::rename(). Nuevos nombres:
## [1] "Pueblo"
## [2] "county"
## [3] "Estado"
## [4] "Voto democrata"
## [5] "X2020.Democrat.vote.."
## [6] "Voto republicano"
## [7] "X2020.Republican.vote.."
## [8] "Voto otros"
## [9] "X2020.other.vote.."
## [10] "Population.with.less.than.9th.grade.education"
## [11] "Population.with.9th.to.12th.grade.education..no.diploma"
## [12] "High.School.graduate.and.equivalent"
## [13] "Some.College.No.Degree"
## [14] "Associates.Degree"
## [15] "Bachelors.Degree"
## [16] "Graduate.or.professional.degree"
## [17] "Gini.Index"
## [18] "Median.income..dollars."
## [19] "Mean.income..dollars."
## [20] "Superficie_KM2"
## [21] "Densidad de poblacion"
## [22] "Total de poblacion"
## [23] "Hispanic.or.Latino.percentage"
## [24] "NH.White.percentage"
## [25] "NH.Black.percentage"
## [26] "NH.American.Indian.and.Alaska.Native.percentage"
## [27] "NH.Asian.percentage"
## [28] "NH.Native.Hawaiian.and.Other.Pacific.Islander.percentage"
## [29] "NH.Some.Other.Race.percentage"
## [30] "NH.Two.or.More.Races.percentage"
## [31] "Percentage.engaged.in.Management..business..science..and.arts.occupations"
## [32] "Percentage.engaged.in.Service.Occupations"
## [33] "Percentage.engaged.in.Sales.and.Office"
## [34] "Percentage.engaged.in.Resources.and.Construction"
## [35] "Percentage.engaged.in.Transportation"
Luego del cambio de los nombres de las variables podemos realizar la reducción de las dimensiones variables de nuestro conjunto de datos, buscando mantener las categorías de interés.
# Asegúrate de que el paquete 'dplyr' esté cargado
library(dplyr)
# Asumiendo que 'datos_elecciones_usa' es tu dataframe con los nombres de columna ya cambiados.
# Si aún no lo has ejecutado, usa el bloque de código anterior para renombrar las columnas primero.
# Crea un nuevo dataframe seleccionando solo las columnas deseadas por sus NUEVOS NOMBRES.
datos_elecciones_recortado <- datos_elecciones_usa %>%
select(
`Pueblo`,
`Estado`,
`Voto democrata`,
`Voto republicano`,
`Voto otros`,
`Total de poblacion`,
`Superficie_KM2`,
`Densidad de poblacion`
)
cat("¡Listo! Se ha creado un nuevo dataframe 'datos_elecciones_recortado' con solo las columnas especificadas.\n")## ¡Listo! Se ha creado un nuevo dataframe 'datos_elecciones_recortado' con solo las columnas especificadas.
## Nuevas dimensiones del dataframe recortado:
## [1] 3143 8
## Nombres de las columnas en el nuevo dataframe:
## [1] "Pueblo" "Estado" "Voto democrata"
## [4] "Voto republicano" "Voto otros" "Total de poblacion"
## [7] "Superficie_KM2" "Densidad de poblacion"
## Pueblo Estado Voto democrata Voto republicano Voto otros
## 1 Autauga County, Alabama Alabama 7503 19838 429
## 2 Baldwin County, Alabama Alabama 24578 83544 1557
## 3 Barbour County, Alabama Alabama 4816 5622 80
## 4 Bibb County, Alabama Alabama 1986 7525 84
## 5 Blount County, Alabama Alabama 2640 24711 237
## 6 Bullock County, Alabama Alabama 3446 1146 21
## Total de poblacion Superficie_KM2 Densidad de poblacion
## 1 58805 1539.63 38.17
## 2 231767 4117.73 56.69
## 3 25223 2292.16 10.85
## 4 22293 1612.19 13.80
## 5 59134 1670.26 35.37
## 6 10357 1613.08 6.40
Luego de la simplificación del data frame podremos hacer una exploración del comportamiento inicial de los datos. En este sentido, nos interesa conocer la posible presencia de valores nulos, la distribución de las variables numéricas, y, la cardinalidad de las variables carácter.
## ### Valores Faltantes (Missing Values) por Columna
## named numeric(0)
## No se encontraron valores faltantes (NA) en ninguna columna.
No se encontraron valores faltantes (NA) en ninguna columna. De manera que, es preciso empezar a realizar una revisión de la distribución de las variables numéricas, y posteriormente, la cardinalidad de las variables categorías.
library(dplyr)
library(tidyr)
library(ggplot2)
cat("### Histograma Combinado con Bins Ajustados (Intento 2)\n")## ### Histograma Combinado con Bins Ajustados (Intento 2)
datos_numericos_solo <- datos_elecciones_recortado %>%
select_if(is.numeric)
datos_largos_numericos <- datos_numericos_solo %>%
pivot_longer(
cols = everything(),
names_to = "Variable",
values_to = "Valor"
)
p_combinado_mejorado_2 <- ggplot(datos_largos_numericos, aes(x = Valor)) +
geom_histogram(aes(y = after_stat(density)),
fill = "steelblue",
color = "black",
bins = 100, # <--- Intentamos con 100 bins
alpha = 0.7) +
geom_density(color = "red", linetype = "dashed", linewidth = 0.8) +
facet_wrap(~ Variable, scales = "free", ncol = 3) +
labs(
title = "Distribución de Variables Numéricas (Más Bins)",
x = "Valor de la Variable",
y = "Densidad"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
strip.text = element_text(size = 8, face = "bold"),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7)
)
print(p_combinado_mejorado_2) La
distribución de las variables densidad de población, poblacion, votos
por partido exponen un comportamiento asimétrico que corresponde a la
cantidad de habitantes en cada uno de los pueblos y los Estados. De modo
que, es pertinente observar los valores únicos de las variables
categóricas, principalmente, el atributo categorico que marca la
referencia general de las otras variables.
# Asegúrate de que tu dataframe se llama 'datos_elecciones_recortado'
# O el nombre del dataframe donde tienes la columna de estado.
# --- 1. Conocer el número de valores únicos de la columna de estado ---
# Reemplaza 'State_Name' por el nombre exacto de tu columna de estado si es diferente
num_estados_unicos <- length(unique(datos_elecciones_recortado$Estado))
cat("### Cardinalidad de la Variable 'Estado'\n")## ### Cardinalidad de la Variable 'Estado'
## La columna 'Estado' contiene **51** valores únicos.
# --- 2. Listar todos los valores únicos de la columna de estado ---
cat("Los valores únicos presentes en la columna 'Estado' son:\n")## Los valores únicos presentes en la columna 'Estado' son:
valores_unicos_estados <- unique(datos_elecciones_recortado$Estado)
# Puedes imprimir la lista completa
print(valores_unicos_estados)## [1] "Alabama" "Alaska" "Arizona"
## [4] "Arkansas" "California" "Colorado"
## [7] "Connecticut" "Delaware" "DistrictofColumbia"
## [10] "Florida" "Georgia" "Hawaii"
## [13] "Idaho" "Illinois" "Indiana"
## [16] "Iowa" "Kansas" "Kentucky"
## [19] "Louisiana" "Maine" "Maryland"
## [22] "Massachusetts" "Michigan" "Minnesota"
## [25] "Mississippi" "Missouri" "Montana"
## [28] "Nebraska" "Nevada" "NewHampshire"
## [31] "NewJersey" "NewMexico" "NewYork"
## [34] "NorthCarolina" "NorthDakota" "Ohio"
## [37] "Oklahoma" "Oregon" "Pennsylvania"
## [40] "RhodeIsland" "SouthCarolina" "SouthDakota"
## [43] "Tennessee" "Texas" "Utah"
## [46] "Vermont" "Virginia" "Washington"
## [49] "WestVirginia" "Wisconsin" "Wyoming"
El resumen de la exploración de los datos se refiere a la información sobre el comportamiento electoral en los Estados Unidos en el 2020. La información que nos interesa es la relacionada con el comportamiento electoral, y su relación con la densidad y la cantidad de personas en los pueblos de cada Estado de ese país.
Luego de la reducción de dimensiones de las variables, retuvimos un conjunto de datos con un total de 3143 registros y 7 categorías primarias. Estas categorías son numéricas, excepto la referida a los Estados y los Pueblos que son caracteres, y, coherentemente, su tipo de almacenamiento es integer o numérico para las variables continuas, y carácter para las categorías.
Las diferencias de residentes en cada uno de los pueblos y Estados explica la simetría de la densidad, la totalidad de la población, y, por supuesto, los votos allí registrados. El origen de estos registros responden al comportamiento demográfico y electoral del 2020..
Para responder Objetivo propuesto realizaremos las siguientes tareas de análisis: 1) análisis descriptivo sobre la distribución de los votos, y sobre la distribución de la densidad y población.
Posteriormente, haremos un análisis comparativo sobre las distribución demográfica (densidad y tamaño de la población) y la distribución del voto por Estado.
Finalizaremos con un análisis de correlación para conocer si existe algunos patrones demográficos sobre la preferencia del voto.
1. Análisis Descriptivo
Comenzaremos por entender la distribución de cada variable.
Distribución de votos: Calcularemos el porcentaje de voto para cada partido (Voto demócrata, Voto republicano, Voto otros) sobre el total de votos en cada pueblo. Esto te permitirá comparar la proporción de votos.
Población y densidad: Observaremos la distribución de Total de población y Densidad de población para entender las características demográficas de los pueblos en tu dataset.
2. Análisis Comparativo Compararemos los resultados entre diferentes categorías.
Voto por Estado: Agruparemos los datos por Estado y calcula el total de votos demócratas y republicanos por estado. Puedes visualizar esto con gráficos de barras.
Densidad de población vs. Voto: Divideremos los pueblos en categorías según su densidad de población (e.g., baja, media, alta) y compara los patrones de voto en cada categoría. Esto puede revelar si las áreas urbanas, suburbanas o rurales tienen tendencias de voto distintas.
Pueblo vs. Estado: Compararemos el patrón de voto de un pueblo específico con el promedio de su estado para ver si hay desviaciones significativas.
3. Análisis de Correlación Examinaremos las relaciones entre variables numéricas.
Correlación entre densidad y voto: Calcularemos la correlación entre Densidad de población y el porcentaje de voto demócrata y republicano. ¿Tienden los pueblos más densos a votar de una manera y los menos densos de otra?
Correlación entre población y voto: De manera similar, investiga la correlación entre Total de población y las preferencias de voto.
4. Visualizaciones
Siendo reiterativos, en nuestro esquema de visualización aplicamos las siguientes técnicas:
Histogramas para ver la distribución de variables numéricas como Densidad de población o Total de población.
Gráficos de barras para comparar el total de votos por partido en diferentes estados o para mostrar el porcentaje de voto por categoría de densidad.
Gráficos de dispersión: Para visualizar la relación entre dos variables numéricas, como Densidad de población y Voto demócrata (en porcentaje). Podrías añadir una línea de regresión para ver la tendencia.
Partiendo del conjunto de datos a continuacion:
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
kbl(head(datos_elecciones_recortado),
caption = "Tabla: Cálculos por Estado",
booktabs = TRUE) %>%
kable_styling(full_width = FALSE, position = "center", font_size = 12)| Pueblo | Estado | Voto democrata | Voto republicano | Voto otros | Total de poblacion | Superficie_KM2 | Densidad de poblacion |
|---|---|---|---|---|---|---|---|
| Autauga County, Alabama | Alabama | 7503 | 19838 | 429 | 58805 | 1539.63 | 38.17 |
| Baldwin County, Alabama | Alabama | 24578 | 83544 | 1557 | 231767 | 4117.73 | 56.69 |
| Barbour County, Alabama | Alabama | 4816 | 5622 | 80 | 25223 | 2292.16 | 10.85 |
| Bibb County, Alabama | Alabama | 1986 | 7525 | 84 | 22293 | 1612.19 | 13.80 |
| Blount County, Alabama | Alabama | 2640 | 24711 | 237 | 59134 | 1670.26 | 35.37 |
| Bullock County, Alabama | Alabama | 3446 | 1146 | 21 | 10357 | 1613.08 | 6.40 |
En el primer momento del análisis vamos a realizar una descripcion de los datos con los cuales vamos a realizar los posteriores hallazgos. La descripcion de los datos se va a centrar especificamente en la observacion del comportamiento variable de cada una de las categorias escogidas para la investigacion; tanto las carateristicas demograficas, las caracteristicas electorales y las unidades de analisis que serian los Estados.
Nuestra primera descripcion sera en torno a la distribucion de los votos, con sus distintas variaciones.
# Cargar la librería dplyr (si no la tienes instalada, usa install.packages("dplyr"))
library(dplyr)
# Asumiendo que 'datos_elecciones_recortado' es tu dataframe en R
# Paso 1: Calcular el Total de Votos por Pueblo
# Y luego, calcular los porcentajes de cada tipo de voto
datos_elecciones_recortado <- datos_elecciones_recortado %>%
mutate(
# Calcular el total de votos para cada pueblo
Total_Votos_Pueblo = `Voto democrata` + `Voto republicano` + `Voto otros`,
# Calcular el porcentaje de voto demócrata
`% Voto Democrata` = (`Voto democrata` / Total_Votos_Pueblo) * 100,
# Calcular el porcentaje de voto republicano
`% Voto Republicano` = (`Voto republicano` / Total_Votos_Pueblo) * 100,
# Calcular el porcentaje de voto de otros partidos
`% Voto Otros` = (`Voto otros` / Total_Votos_Pueblo) * 100
)
# Opcional: Manejar posibles NaNs o Infinitos si Total_Votos_Pueblo fuera 0
# Esto no debería ser común con datos electorales reales, pero es una buena práctica.
# Si un pueblo tiene 0 votos en total, los porcentajes darán NaN. Puedes convertirlos a 0.
datos_elecciones_recortado <- datos_elecciones_recortado %>%
mutate(
`% Voto Democrata` = replace_na(`% Voto Democrata`, 0),
`% Voto Republicano` = replace_na(`% Voto Republicano`, 0),
`% Voto Otros` = replace_na(`% Voto Otros`, 0)
)
# Mostrar las primeras filas del dataframe con las nuevas columnas
print(head(datos_elecciones_recortado))## Pueblo Estado Voto democrata Voto republicano Voto otros
## 1 Autauga County, Alabama Alabama 7503 19838 429
## 2 Baldwin County, Alabama Alabama 24578 83544 1557
## 3 Barbour County, Alabama Alabama 4816 5622 80
## 4 Bibb County, Alabama Alabama 1986 7525 84
## 5 Blount County, Alabama Alabama 2640 24711 237
## 6 Bullock County, Alabama Alabama 3446 1146 21
## Total de poblacion Superficie_KM2 Densidad de poblacion Total_Votos_Pueblo
## 1 58805 1539.63 38.17 27770
## 2 231767 4117.73 56.69 109679
## 3 25223 2292.16 10.85 10518
## 4 22293 1612.19 13.80 9595
## 5 59134 1670.26 35.37 27588
## 6 10357 1613.08 6.40 4613
## % Voto Democrata % Voto Republicano % Voto Otros
## 1 27.018365 71.43680 1.5448326
## 2 22.409030 76.17137 1.4195972
## 3 45.788173 53.45123 0.7606009
## 4 20.698280 78.42626 0.8754560
## 5 9.569378 89.57155 0.8590692
## 6 74.701929 24.84284 0.4552352
# Mostrar un resumen estadístico de las nuevas columnas de porcentaje
print(summary(datos_elecciones_recortado %>%
select(`% Voto Democrata`, `% Voto Republicano`, `% Voto Otros`)))## % Voto Democrata % Voto Republicano % Voto Otros
## Min. : 3.091 Min. : 4.139 Min. : 0.000
## 1st Qu.:20.971 1st Qu.:55.501 1st Qu.: 1.208
## Median :30.051 Median :68.164 Median : 1.668
## Mean :33.417 Mean :64.788 Mean : 1.795
## 3rd Qu.:42.565 3rd Qu.:77.380 3rd Qu.: 2.201
## Max. :95.833 Max. :96.182 Max. :12.997
Como se puede observar en el código anterior, anexamos algunas columnas sobre el porcentaje electoral de los Estados Unidos en el 2020. Asimismo, la salidas nos muestran las mas importantes descripciones sobre estos porcentajes. Por ejemplo, podemos observar que en promedio el partido demócrata logra el 33% de los votos en los estados y el partido republicano el 64% de los votos. La distribución promedio es interesante, porque, la diferencia es mucha. Lo cual requiere que se hagan las descripciones por Estado, porque, los registros son sobre los Pueblos, lo que nos puede indicar que el partido republicano abulta sus resultados electorales en las zonas geográficamente mas dispersas. Números que se confirman si se atiende la mediana de las observaciones. En cuanto a los puntos máximos de porcentaje y los puntos mínimos tenemos que las observaciones son cercanas entre ambos partidos.
# Asegúrate de tener ggplot2 cargado
library(ggplot2)
# --- Histograma del Porcentaje de Voto Demócrata ---
ggplot(datos_elecciones_recortado, aes(x = `% Voto Democrata`)) +
geom_histogram(binwidth = 5, fill = "steelblue", color = "black", alpha = 0.8) + # binwidth 5 para rangos de 5%
labs(
title = "Distribución del Porcentaje de Voto Demócrata",
x = "Porcentaje de Voto Demócrata",
y = "Número de Pueblos"
) +
theme_minimal() +
scale_x_continuous(limits = c(0, 100)) # Asegura que el eje X vaya de 0 a 100## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).
# --- Histograma del Porcentaje de Voto Republicano ---
ggplot(datos_elecciones_recortado, aes(x = `% Voto Republicano`)) +
geom_histogram(binwidth = 5, fill = "firebrick", color = "black", alpha = 0.8) +
labs(
title = "Distribución del Porcentaje de Voto Republicano",
x = "Porcentaje de Voto Republicano",
y = "Número de Pueblos"
) +
theme_minimal() +
scale_x_continuous(limits = c(0, 100))## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).
# --- Histograma del Porcentaje de Voto Otros ---
ggplot(datos_elecciones_recortado, aes(x = `% Voto Otros`)) +
geom_histogram(binwidth = 2, fill = "darkgray", color = "black", alpha = 0.8) + # Binwidth más pequeño, ya que suelen ser porcentajes menores
labs(
title = "Distribución del Porcentaje de Voto Otros",
x = "Porcentaje de Voto Otros",
y = "Número de Pueblos"
) +
theme_minimal() +
scale_x_continuous(limits = c(0, 100)) # Aunque es probable que la mayoría estén en el rango bajo## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).
# --- Boxplots de Porcentajes de Voto (para comparar) ---
# Puedes combinar los boxplots de los tres partidos para una comparación rápida.
# Primero, "transformamos" los datos a un formato largo para ggplot.
library(tidyr) # Para la función pivot_longer
datos_votos_largos <- datos_elecciones_recortado %>%
select(`Pueblo`, `% Voto Democrata`, `% Voto Republicano`, `% Voto Otros`) %>%
pivot_longer(
cols = c(`% Voto Democrata`, `% Voto Republicano`, `% Voto Otros`),
names_to = "Partido",
values_to = "Porcentaje_Voto"
)
ggplot(datos_votos_largos, aes(x = Partido, y = Porcentaje_Voto, fill = Partido)) +
geom_boxplot(alpha = 0.8) +
labs(
title = "Boxplots del Porcentaje de Voto por Partido",
x = "Partido",
y = "Porcentaje de Voto"
) +
theme_minimal() +
theme(legend.position = "none") # Quita la leyenda si el color ya está en el eje XDistribución de votos por partido
En la próxima sección realizaremos las descripciones de los Estados para considerar el comportamiento de los datos con respecto a las tendencias asimiladas por la totalidad de los Estados.
Por los momentos se continua con el análisis sobre las descripciones mas representativas tanto de la densidad poblacional como de la población total. Lo cual nos puede sugerir que en promedio hay una densidad de población de 17.27 personas por KM2, aunque el punto medio de la distribución sea 106.44 personas por KM2. Con respecto a los datos poblacionales, el promedio de población es de 105456 con un punto medio de 25698 en los pueblos de Estados Unidos.
library(dplyr)
# Resumen estadístico de Total de población y Densidad de población
cat("Resumen estadístico de 'Total de población':")## Resumen estadístico de 'Total de población':
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 64 10832 25698 105456 67946 10014009
##
## Resumen estadístico de 'Densidad de población':
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.01 6.22 17.27 106.44 45.60 28048.18
Tal como se observa en el siguiente grafico
library(ggplot2)
# --- Histograma de la Densidad de Población (Escala Logarítmica) ---
# Si el histograma anterior está muy sesgado, esta versión ayuda a ver mejor los detalles
# en el rango de densidades bajas y medias. log1p(x) es log(1+x) y maneja valores cero.
ggplot(datos_elecciones_recortado, aes(x = log1p(`Densidad de poblacion`))) +
geom_histogram(binwidth = 0.2, fill = "lightcoral", color = "black", alpha = 0.8) +
labs(
title = "Distribución de la Densidad de Población (Escala Logarítmica)",
x = "Log(1 + Densidad de Población)",
y = "Número de Pueblos"
) +
theme_minimal()Distribucion de la densidad poblacional
En el presente análisis buscaremos agrupar las votaciones alrededor de unidades político administrativas mas grandes (Estados) para observar el comportamiento electoral. El comportamiento electoral en unidades político administrativas mas grande nos ofrecerán algunos indicios acerca de la dispersión del voto de los republicanos y la concentración del voto de los demócratas, demográfica y geográficamente hablando.
Por lo cual, es importante que agrupemos las variables en un data frame paralelo sobre observaciones en los Estados del país norteamericano.
library(dplyr)
# --- Paso 1: Agrupar por Estado para sumar población y obtener la superficie del estado ---
datos_estados_calculados <- datos_elecciones_recortado %>%
group_by(Estado) %>%
summarise(
Poblacion_Total_Estado = sum(`Total de poblacion`, na.rm = TRUE),
# Asumimos que Superficie_KM2 es la superficie del estado y es constante para cada pueblo en el mismo estado.
# Usamos max() o mean() para asegurarnos de tomar ese valor único por estado.
Superficie_Total_Estado_KM2 = sum(`Superficie_KM2`, na.rm = TRUE),
# Sumamos los votos para el cálculo de porcentajes a nivel estatal
Voto_Democrata_Estado = sum(`Voto democrata`, na.rm = TRUE),
Voto_Republicano_Estado = sum(`Voto republicano`, na.rm = TRUE),
Voto_Otros_Estado = sum(`Voto otros`, na.rm = TRUE),
.groups = 'drop' # Esto quita la agrupación después de la operación
) %>%
# --- Paso 2: Calcular la Densidad Real del Estado y los Porcentajes de Voto Estatal ---
mutate(
# Calcular la Densidad Real del Estado
# Asegúrate de manejar la división por cero si Superficie_Total_Estado_KM2 fuera 0
Densidad_Real_Estado = ifelse(Superficie_Total_Estado_KM2 > 0,
Poblacion_Total_Estado / Superficie_Total_Estado_KM2,
0), # O NA, dependiendo de cómo quieras tratar los estados con superficie 0
# Calcular el Total de Votos del Estado
Total_Votos_Estado = Voto_Democrata_Estado + Voto_Republicano_Estado + Voto_Otros_Estado,
# Calcular los Porcentajes de Voto
`% Voto Democrata Estado` = (Voto_Democrata_Estado / Total_Votos_Estado) * 100,
`% Voto Republicano Estado` = (Voto_Republicano_Estado / Total_Votos_Estado) * 100,
`% Voto Otros Estado` = (Voto_Otros_Estado / Total_Votos_Estado) * 100
) %>%
# --- Paso 3: Manejar posibles NaNs (por ejemplo, si Total_Votos_Estado fuera 0) ---
mutate(
`% Voto Democrata Estado` = replace_na(`% Voto Democrata Estado`, 0),
`% Voto Republicano Estado` = replace_na(`% Voto Republicano Estado`, 0),
`% Voto Otros Estado` = replace_na(`% Voto Otros Estado`, 0)
)
library(kableExtra)
kbl(datos_estados_calculados,
caption = "Tabla: Cálculos por Estado",
booktabs = TRUE) %>%
kable_styling(full_width = FALSE, position = "center", font_size = 12)| Estado | Poblacion_Total_Estado | Superficie_Total_Estado_KM2 | Voto_Democrata_Estado | Voto_Republicano_Estado | Voto_Otros_Estado | Densidad_Real_Estado | Total_Votos_Estado | % Voto Democrata Estado | % Voto Republicano Estado | % Voto Otros Estado |
|---|---|---|---|---|---|---|---|---|---|---|
| Alabama | 5024279 | 131185.10 | 849648 | 1441168 | 32488 | 38.2991590 | 2323304 | 36.57068 | 62.030970 | 1.3983534 |
| Alaska | 733391 | 1479016.90 | 153985 | 189925 | 15453 | 0.4958638 | 359363 | 42.84943 | 52.850460 | 4.3001088 |
| Arizona | 7151502 | 294366.12 | 1672143 | 1661686 | 53497 | 24.2945825 | 3387326 | 49.36469 | 49.055981 | 1.5793284 |
| Arkansas | 3011524 | 134660.48 | 423932 | 760647 | 34490 | 22.3638294 | 1219069 | 34.77506 | 62.395730 | 2.8292082 |
| California | 39538223 | 403673.31 | 11109764 | 6005961 | 380181 | 97.9460916 | 17495906 | 63.49922 | 34.327808 | 2.1729712 |
| Colorado | 5773714 | 268418.72 | 1804352 | 1364607 | 87994 | 21.5101018 | 3256953 | 55.40000 | 41.898271 | 2.7017277 |
| Connecticut | 3605944 | 12178.67 | 1080831 | 714717 | 28309 | 296.0868469 | 1823857 | 59.26073 | 39.187118 | 1.5521502 |
| Delaware | 989948 | 5046.71 | 296268 | 200603 | 7139 | 196.1571004 | 504010 | 58.78217 | 39.801393 | 1.4164401 |
| DistrictofColumbia | 689545 | 158.32 | 39041 | 1725 | 915 | 4355.3878221 | 41681 | 93.66618 | 4.138576 | 2.1952448 |
| Florida | 21538187 | 138963.82 | 5297045 | 5668731 | 101680 | 154.9913280 | 11067456 | 47.86145 | 51.219820 | 0.9187297 |
| Georgia | 10711908 | 149485.25 | 2473633 | 2461854 | 62229 | 71.6586285 | 4997716 | 49.49527 | 49.259582 | 1.2451488 |
| Hawaii | 1455271 | 16634.43 | 366153 | 196865 | 11475 | 87.4854744 | 574493 | 63.73498 | 34.267606 | 1.9974134 |
| Idaho | 1839106 | 214049.87 | 287021 | 554119 | 26966 | 8.5919510 | 868106 | 33.06290 | 63.830799 | 3.1063027 |
| Illinois | 12812508 | 143778.36 | 3471915 | 2446891 | 120037 | 89.1129096 | 6038843 | 57.49305 | 40.519202 | 1.9877483 |
| Indiana | 6785528 | 92786.64 | 1242495 | 1729852 | 60851 | 73.1304421 | 3033198 | 40.96320 | 57.030632 | 2.0061664 |
| Iowa | 3190369 | 144659.32 | 759061 | 897672 | 34138 | 22.0543619 | 1690871 | 44.89172 | 53.089325 | 2.0189595 |
| Kansas | 2937880 | 211753.76 | 558669 | 758100 | 32798 | 13.8740394 | 1349567 | 41.39617 | 56.173573 | 2.4302610 |
| Kentucky | 4505836 | 102266.54 | 772474 | 1326646 | 37648 | 44.0597286 | 2136768 | 36.15151 | 62.086572 | 1.7619133 |
| Louisiana | 4657757 | 111930.43 | 856034 | 1255776 | 36252 | 41.6129644 | 2148062 | 39.85146 | 58.460882 | 1.6876608 |
| Maine | 1362359 | 79888.28 | 430473 | 359899 | 32162 | 17.0533024 | 822534 | 52.33498 | 43.754909 | 3.9101119 |
| Maryland | 6177224 | 25151.76 | 1985023 | 976414 | 75593 | 245.5980814 | 3037030 | 65.36066 | 32.150292 | 2.4890436 |
| Massachusetts | 7029917 | 20204.33 | 2382202 | 1167202 | 108601 | 347.9411097 | 3658005 | 65.12298 | 31.908158 | 2.9688587 |
| Michigan | 10077331 | 146620.00 | 2804040 | 2649852 | 85410 | 68.7309439 | 5539302 | 50.62082 | 47.837291 | 1.5418910 |
| Minnesota | 5706494 | 206244.54 | 1717077 | 1484065 | 76029 | 27.6685822 | 3277171 | 52.39510 | 45.284942 | 2.3199583 |
| Mississippi | 2961279 | 121533.55 | 539398 | 756764 | 19020 | 24.3659385 | 1315182 | 41.01318 | 57.540629 | 1.4461877 |
| Missouri | 6154913 | 178052.23 | 1253014 | 1718736 | 54212 | 34.5680197 | 3025962 | 41.40878 | 56.799656 | 1.7915625 |
| Montana | 1084225 | 376973.18 | 244786 | 343602 | 17362 | 2.8761330 | 605750 | 40.41040 | 56.723401 | 2.8661989 |
| Nebraska | 1961504 | 198949.63 | 374583 | 556846 | 24950 | 9.8592996 | 956379 | 39.16679 | 58.224407 | 2.6087984 |
| Nevada | 3104614 | 284537.05 | 703486 | 669890 | 32000 | 10.9111063 | 1405376 | 50.05678 | 47.666247 | 2.2769707 |
| NewHampshire | 1377529 | 23190.13 | 424937 | 365660 | 13236 | 59.4015213 | 803833 | 52.86384 | 45.489548 | 1.6466107 |
| NewJersey | 9288994 | 19049.20 | 2608335 | 1883274 | 72625 | 487.6317116 | 4564234 | 57.14727 | 41.261557 | 1.5911761 |
| NewMexico | 2117522 | 314198.59 | 501614 | 401894 | 20457 | 6.7394383 | 923965 | 54.28929 | 43.496669 | 2.2140449 |
| NewYork | 20201249 | 122049.06 | 5244006 | 3250230 | 119310 | 165.5174485 | 8613546 | 60.88092 | 37.733937 | 1.3851438 |
| NorthCarolina | 10439388 | 125935.88 | 2684292 | 2758773 | 81736 | 82.8944698 | 5524801 | 48.58622 | 49.934342 | 1.4794379 |
| NorthDakota | 779094 | 178694.35 | 114902 | 235595 | 11322 | 4.3599252 | 361819 | 31.75676 | 65.114049 | 3.1291889 |
| Ohio | 11799448 | 105823.83 | 2679165 | 3154834 | 88203 | 111.5008595 | 5922202 | 45.23934 | 53.271300 | 1.4893616 |
| Oklahoma | 3959353 | 177664.48 | 503890 | 1020280 | 36529 | 22.2855632 | 1560699 | 32.28617 | 65.373272 | 2.3405538 |
| Oregon | 4237256 | 248630.41 | 1340383 | 958448 | 75490 | 17.0423883 | 2374321 | 56.45332 | 40.367246 | 3.1794353 |
| Pennsylvania | 13002700 | 115881.85 | 3459923 | 3378263 | 87069 | 112.2065276 | 6925255 | 49.96095 | 48.781785 | 1.2572678 |
| RhodeIsland | 1097379 | 2677.76 | 306210 | 199837 | 10336 | 409.8123058 | 516383 | 59.29901 | 38.699376 | 2.0016151 |
| SouthCarolina | 5118425 | 77866.01 | 1091541 | 1385103 | 36685 | 65.7337521 | 2513329 | 43.43009 | 55.110294 | 1.4596179 |
| SouthDakota | 886667 | 196341.52 | 150471 | 261043 | 11095 | 4.5159424 | 422609 | 35.60525 | 61.769390 | 2.6253582 |
| Tennessee | 6910840 | 106792.30 | 1143913 | 1852948 | 57673 | 64.7129053 | 3054534 | 37.44967 | 60.662216 | 1.8881112 |
| Texas | 29145505 | 676686.20 | 5259126 | 5890347 | 168438 | 43.0709315 | 11317911 | 46.46729 | 52.044472 | 1.4882428 |
| Utah | 3271616 | 213921.87 | 560282 | 865140 | 62867 | 15.2935088 | 1488289 | 37.64605 | 58.129839 | 4.2241124 |
| Vermont | 643077 | 23872.56 | 242826 | 112708 | 15292 | 26.9379153 | 370826 | 65.48246 | 30.393770 | 4.1237669 |
| Virginia | 8631393 | 102258.16 | 2413568 | 1962430 | 84526 | 84.4078653 | 4460524 | 54.10952 | 43.995504 | 1.8949792 |
| Washington | 7705281 | 172118.78 | 2369612 | 1584651 | 133368 | 44.7672299 | 4087631 | 57.97030 | 38.766978 | 3.2627211 |
| WestVirginia | 1793716 | 62266.54 | 235984 | 545382 | 13286 | 28.8070607 | 794652 | 29.69652 | 68.631552 | 1.6719268 |
| Wisconsin | 5893718 | 140292.64 | 1630673 | 1610065 | 56614 | 42.0101725 | 3297352 | 49.45402 | 48.829030 | 1.7169535 |
| Wyoming | 576851 | 251458.15 | 73491 | 193559 | 9715 | 2.2940239 | 276765 | 26.55357 | 69.936228 | 3.5101982 |
En este sentido, haciendo las observaciones descriptivas acerca de las medidas sobre las tendencias electorales, considerando como unidad de análisis los Estados vemos que las observaciones centrales se acercan entre los Demócratas y los Republicanos, ofreciéndonos un indicio de lo que anteriormente insinuábamos: la concentración de las tendencias medias y medianas cuando se observan unidades político administrativas inferiores, hay una clara preferencia en el voto republicano, como indica la tabla anterior.
# --- Resúmenes de los votos que pediste ---
print("\nResumen estadístico de % Voto Democrata Estado:")## [1] "\nResumen estadístico de % Voto Democrata Estado:"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 26.55 40.13 49.36 48.62 56.80 93.67
## [1] "\nResumen estadístico de % Voto Republicano Estado:"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.139 40.890 49.260 49.163 57.835 69.936
## [1] "\nResumen estadístico de % Voto Otros Estado:"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9187 1.5657 2.0016 2.2178 2.6635 4.3001
Mientras que en esta observación descriptiva observamos un estrechamiento de las medidas medias y mediana que oscilan entre 48.5 y 49.6 puntos. En el caso de las observaciones máximas y mínimas, tienden a favorecer a los demócratas con un 26 puntos en la votación de los Estados, y desfavorecer a los republicanos con menos de 1 punto. Las observaciones máximas nos ofrecen las mismas tendencias con respecto a los demócratas en contraste con los republicanos.
Estos descriptivos, comparado con los anteriores Análisis descriptivo nos ofrecen varios indicios de que la concentración de la población en ciertas zonas residenciales tienden a favorecer a los demócratas sobre los republicanos. Estas intuiciones las esperamos confirmar con un análisis de distribución de las votaciones en los Estados, pero también, con un análisis de correlación, considerando tanto la densidad de la población como la población total.
De momento, es importante realizar una descripción de la densidad de población para observar el comportamiento estadístico de la dispersión y concentración de las personas en el país, considerando, esta vez, como unidad de análisis unidades político administrativas mas grandes.
# Opcional: Resumen de las nuevas variables clave
print("\nResumen estadístico de Densidad Real del Estado:")## [1] "\nResumen estadístico de Densidad Real del Estado:"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.496 19.282 42.010 163.738 88.299 4355.388
Las descripciones sobre la densidad de la población nos muestra un promedio de densidad de 42 personas por km2, y una mediana de 163 personas por km2. Estas observaciones consideran diferentes Estados con dimensiones completamente contrarias en cuanto a la superficie en km2 del país. De manera que, podemos considerar que el país norteamericano es una nación densamente poblada. Como bien se observa en el siguiente gráfico
# Instalar y cargar librerías necesarias
library(ggplot2)
ggplot(datos_estados_calculados, aes(x = reorder(Estado, Densidad_Real_Estado), y = Densidad_Real_Estado)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = round(Densidad_Real_Estado, 1)),
hjust = -0.1, size = 2) + # etiquetas al final
coord_flip() +
labs(
title = "Densidad Poblacional Real por Estado",
x = "Estado",
y = "Habitantes por km²"
) +
theme_minimal() +
theme(axis.text.y = element_text(size = 6)) + # para mejor visibilidad
ylim(0, max(datos_estados_calculados$Densidad_Real_Estado) * 1.1) # margen para las etiquetasDensidad poblacional x Estado
Pues, vemos que el top cinco de los Estados mas densos geográficamente corresponde con Estados geográficamente mas pequeños. A veces esas observaciones coinciden con el numero poblacional absoluto, como es el caso de New York, New Jersey, u otros, como se aprecia en el siguiente gráfico de barras:
ggplot(datos_estados_calculados, aes(x = reorder(Estado, Poblacion_Total_Estado), y = Poblacion_Total_Estado)) +
geom_bar(stat = "identity", fill = "darkgreen") +
geom_text(aes(label = round(Poblacion_Total_Estado, 1)),
hjust = -0.1, size = 2) + # etiquetas al final
coord_flip() +
labs(
title = "Población Total por Estado",
x = "Estado",
y = "Población"
) +
theme_minimal() +
theme(axis.text.y = element_text(size = 6)) + # para mejor visibilidad
ylim(0, max(datos_estados_calculados$Poblacion_Total_Estado) * 1.1) # margen para las etiquetasPoblacion x Estado
Por otro lado, considerando el voto de los partidos, también podemos observar en el siguiente gráfico las preferencias electorales en cada uno. Estas observaciones pueden proporcionalmente respaldar nuestras hipótesis, en la que los Estados mas poblados o densamente poblados suelen tener un voto hacia los partidos democráticos, como se puede observar si contrastamos con los anteriores.
library(tidyr)
# Convertir datos a formato largo para el gráfico de porcentajes
votos_porcentajes <- datos_estados_calculados %>%
select(
Estado,
`% Voto Democrata Estado`,
`% Voto Republicano Estado`,
`% Voto Otros Estado`
) %>%
pivot_longer(
cols = -Estado,
names_to = "Partido",
values_to = "Porcentaje"
)
ggplot(votos_porcentajes, aes(x = reorder(Estado, Porcentaje), y = Porcentaje, fill = Partido)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
labs(
title = "Porcentaje de Votos por Estado y Partido",
x = "Estado",
y = "Porcentaje (%)",
fill = "Partido"
) +
theme_minimal() +
theme(axis.text.y = element_text(size = 6)) + # para mejor visibilidad
ylim(0, max(votos_porcentajes$Porcentaje) * 1.1) # margen para las etiquetasPorcentaje de voto por Estados
No obstante, antes de contrastar las tablas entre si, y pecar de situaciones estadisticamente contingente, realizaremos el análisis de correlación entre las tendencias electorales y la concentración de población o la presencia absoluta de la población.
El análisis de correlación aspira hallar alguna relación positiva con respecto a la concentración de la población en Estados y pueblos con respecto a los votos demócratas (debido a nuestras primeras observaciones descriptivas, anteriormente planteadas, y algunas revisiones bibliográficas). Asimismo, es importante que, basados en estas contrastaciones podamos evaluar la tendencia negativa de la votación republicana con respecto a las preferencias electorales.
En el presente análisis de correlación aplicaremos un modelo de regresión simple mediante el codigo lm, como se indica en el siguiente codigo:
# Escalar variables para visualización (opcional)
datos_estados_calculados <- datos_estados_calculados %>%
mutate(
Densidad_Scaled = scale(Densidad_Real_Estado),
VotoDem_Scaled = scale(`% Voto Democrata Estado`)
)
# Ajustar modelo lineal simple
modelo <- lm(`% Voto Democrata Estado` ~ Densidad_Real_Estado, data = datos_estados_calculados)
cat("Correlación lineal simple")## Correlación lineal simple
##
## Call:
## lm(formula = `% Voto Democrata Estado` ~ Densidad_Real_Estado,
## data = datos_estados_calculados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.1279 -6.9353 0.9373 7.6401 18.5052
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 46.653903 1.419594 32.864 <2e-16 ***
## Densidad_Real_Estado 0.012004 0.002276 5.275 3e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.782 on 49 degrees of freedom
## Multiple R-squared: 0.3622, Adjusted R-squared: 0.3491
## F-statistic: 27.82 on 1 and 49 DF, p-value: 2.998e-06
# Calcular correlación Pearson
correlacion <- cor(datos_estados_calculados$Densidad_Real_Estado,
datos_estados_calculados$`% Voto Democrata Estado`,
use = "complete.obs", method = "pearson")
cat("Correlación Pearson entre Densidad y % Voto Demócrata:", round(correlacion, 3), "\n")## Correlación Pearson entre Densidad y % Voto Demócrata: 0.602
El análisis de correlación simple aplicado en los datos sobre la densidad poblacional de los datos en el nivel de los Estados nos exponen que existe una relación positiva y estadísticamente significativa entre la densidad de población de un estado y el porcentaje de voto demócrata en ese estado.
Esa relación se observa con el valor intercept, que la predicción del % Voto Demócrata Estado cuando la Densidad_Real_Estado es cero. En este contexto, significa que en estados con densidad de población nula (hipotéticamente), el porcentaje de voto demócrata promedio sería de aproximadamente 46.65%. De manera que, mientras disminuye la densidad poblacional, tiende a decrecer el voto demócrata, siendo favorable la concentración poblacional para el partido demócrata.
El signo positivo (0.012004) confirma la hipótesis de una relación positiva entre la concentración de población y el voto demócrata.
Una relación estadisticamente significativa como se expone con el p-valor tanto del intercept como de la variable independiente Densidad del Estado.
No obstante, la bondad de ajuste sugiere que con el siguiente valor 0.3491 hay una variabilidad importante no contemplada por las cuestiones demográficas. Aunque la relación es significativa, este factor explica alrededor del 36.22% de la variabilidad en el voto demócrata, lo que sugiere que hay otros factores importantes que también influyen en las preferencias electorales a nivel estatal.
## [1] "Estado" "Poblacion_Total_Estado"
## [3] "Superficie_Total_Estado_KM2" "Voto_Democrata_Estado"
## [5] "Voto_Republicano_Estado" "Voto_Otros_Estado"
## [7] "Densidad_Real_Estado" "Total_Votos_Estado"
## [9] "% Voto Democrata Estado" "% Voto Republicano Estado"
## [11] "% Voto Otros Estado" "Densidad_Scaled"
## [13] "VotoDem_Scaled"
# Escalar variables para visualización (opcional)
datos_estados_calculados <- datos_estados_calculados %>%
mutate(
Densidad_Scaled = scale(Densidad_Real_Estado),
VotoDem_Scaled = scale(`% Voto Republicano Estado`)
)
# Ajustar modelo lineal simple
modelo <- lm(`% Voto Republicano Estado` ~ Densidad_Real_Estado, data = datos_estados_calculados)
cat("Correlación lineal simple")## Correlación lineal simple
##
## Call:
## lm(formula = `% Voto Republicano Estado` ~ Densidad_Real_Estado,
## data = datos_estados_calculados)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.4010 -7.5336 -0.1929 6.9915 18.8475
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 51.116113 1.418913 36.025 < 2e-16 ***
## Densidad_Real_Estado -0.011929 0.002275 -5.244 3.33e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.778 on 49 degrees of freedom
## Multiple R-squared: 0.3595, Adjusted R-squared: 0.3464
## F-statistic: 27.5 on 1 and 49 DF, p-value: 3.33e-06
# Calcular correlación Pearson
correlacion <- cor(datos_estados_calculados$Densidad_Real_Estado,
datos_estados_calculados$`% Voto Republicano Estado`,
use = "complete.obs", method = "pearson")
cat("Correlación Pearson entre Densidad y % Voto Republicano", round(correlacion, 3), "\n")## Correlación Pearson entre Densidad y % Voto Republicano -0.6
Con relación al voto republicano se observa mas bien una relación negativa entre la densidad de la población y la preferencia al voto. Esa relación se observa con el valor intercept, que la predicción del % Voto Republicano Estado cuando la Densidad_Real_Estado es cero. En el mismo contexto, significa que el porcentaje del voto republicano tiende aumentar a un 51% cuando la densidad es 0. De manera que, mientras disminuye la densidad de la población aumenta el voto republicano.
El signo negativo (-0.011929) en la estimación de la densidad población confirma la hipótesis de una relación negativa entre la concentración de población y el voto republicano.
El coeficiente de regresión para la densidad, significa que, por cada unidad de aumento en la Densidad_Real_Estado, el % Voto Republicano Estado se reduce en aproximadamente 0.011929 puntos porcentuales.
Así como en el caso anterior sobre el voto demócrata, la relación es estadisticamente significativa como se expone con el p-valor tanto del intercept como de la variable independiente Densidad del Estado.
Sin embargo, igual que en el caso anterior, la bondad de ajuste sugiere con un valor de 0.3464 esta variable solo explica un 34.46% del voto republicano, sugiriendo la necesidad de considerar otros factores en el análisis.
Buscando ampliar las observaciones y mejorar la visualización, nos limitaremos a exponer los resultados de la regresión simple con respecto a la tendencias electorales y la densidad de población con los siguientes gráficos de barras, reservando los gráficos de dispersión para el análisis por pueblo, ampliando las observaciones y haciendo mas nítida las tendencias. Por los momentos con los siguientes gráficos de barras podremos ver una relación entre el porcentaje de voto y la densidad de población entre los Estados como se aprecia a continuación:
# Asegúrate de que ggplot2 y dplyr estén cargados
library(ggplot2)
library(dplyr)
# Asegúrate de que 'datos_estados_calculados' esté disponible y tenga las columnas correctas
# y que 'Densidad_Real_Estado' haya sido calculada correctamente en pasos anteriores.
# Ordenar los estados por su Densidad Real (de menor a mayor)
datos_estados_ordenados_densidad <- datos_estados_calculados %>%
arrange(Densidad_Real_Estado) %>%
# Convertir 'Estado' a un factor ordenado para que ggplot respete el orden
mutate(Estado = factor(Estado, levels = Estado))
# Grafico de barras: % Voto Demócrata por Estado, ordenado por Densidad Real
ggplot(datos_estados_ordenados_densidad, aes(x = Estado, y = `% Voto Democrata Estado`)) +
geom_col(fill = "steelblue", color = "black") + # geom_col es un atajo para geom_bar(stat="identity")
labs(
title = "% Voto Demócrata por Estado (Ordenado por Densidad Real)",
x = "Estado",
y = "% Voto Demócrata"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 8)) + # Rota las etiquetas del eje X
scale_y_continuous(limits = c(0, 100)) # Asegura que el eje Y vaya de 0 a 100
# --- Opcional: También para el voto Republicano, para comparar ---
ggplot(datos_estados_ordenados_densidad, aes(x = Estado, y = `% Voto Republicano Estado`)) +
geom_col(fill = "firebrick", color = "black") +
labs(
title = "% Voto Republicano por Estado (Ordenado por Densidad Real)",
x = "Estado",
y = "% Voto Republicano"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 8)) +
scale_y_continuous(limits = c(0, 100))Grafico de Poblacion x Votacion en cuanto a la densidad
Ahora bien, para ampliar los resultados del análisis de regresión simple de los Estados, incorporaremos un análisis de regresion simple pero considerando unidades político administrativas mas pequeñas, que al incorporar mas observaciones, hace de mayor utilidad la visualización de gráficos de dispersión de las tendencias electorales segun la densidad de la población.
datos_elecciones_recortado <- datos_elecciones_recortado %>%
mutate(., Poblacion_Scaled = scale(`Densidad de poblacion`), VotoDem_Scaled = scale(`Voto democrata`))
# Ajustar modelo lineal simple
modelo <- lm(`% Voto Democrata` ~ `Densidad de poblacion`, data = datos_elecciones_recortado)
cat("Correlación lineal simple con respecto a poblacion y voto democrataa")## Correlación lineal simple con respecto a poblacion y voto democrataa
##
## Call:
## lm(formula = `% Voto Democrata` ~ `Densidad de poblacion`, data = datos_elecciones_recortado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -113.990 -11.940 -2.908 9.172 63.044
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.278e+01 2.792e-01 117.39 <2e-16 ***
## `Densidad de poblacion` 5.988e-03 3.922e-04 15.27 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.48 on 3141 degrees of freedom
## Multiple R-squared: 0.06909, Adjusted R-squared: 0.06879
## F-statistic: 233.1 on 1 and 3141 DF, p-value: < 2.2e-16
# Ajustar modelo lineal simple
modelo2 <- lm(`% Voto Republicano` ~ `Densidad de poblacion`, data = datos_elecciones_recortado)
cat("Correlación lineal simple con respecto a poblacion y voto republicano")## Correlación lineal simple con respecto a poblacion y voto republicano
##
## Call:
## lm(formula = `% Voto Republicano` ~ `Densidad de poblacion`,
## data = datos_elecciones_recortado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -61.246 -9.434 3.010 12.085 113.867
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 65.4222297 0.2829361 231.23 <2e-16 ***
## `Densidad de poblacion` -0.0059554 0.0003974 -14.99 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 15.68 on 3141 degrees of freedom
## Multiple R-squared: 0.06673, Adjusted R-squared: 0.06643
## F-statistic: 224.6 on 1 and 3141 DF, p-value: < 2.2e-16
Con el modelo de regresión simple se confirman las relaciones positiva en el voto demócrata y negativa en el voto republicano. Ademas como se observan en los valores p, las relaciones tienden a ser significativas entre la densidad de población y el voto partidario, lo cual es consistente con tus análisis a nivel estatal.
Pero es importante señalar que las observaciones con respecto al partido republicano nos muestra un mayor poder explicativo, en este caso sobre la relación negativa y la densidad de población. En el intercept, se observa que a nivel de condados y pueblos, mientras mas disminuye la concentración de la población el porcentaje del voto republicano crece. Ese porcentaje de voto republicano predicho en un pueblo o condado con densidad de población cero (hipotéticamente). En esas condiciones, el voto republicano promedio sería de aproximadamente 65.42%.
Como se muestran en los gráficos anteriores, se pude visualizar las tendencias positivas o negativas de las preferencias electorales según la densidad de población, con una pendiente positiva para el voto demócrata y una pendiente negativa para el voto republicano
library(ggplot2)
# --- Gráficos de Dispersión con Escala Logarítmica para Población ---
# Si la población total está muy sesgada, usa la escala logarítmica.
ggplot(datos_elecciones_recortado, aes(x = log1p(`Densidad de poblacion`), y = `% Voto Democrata`)) +
geom_point(alpha = 0.5, color = "steelblue") +
geom_smooth(method = "lm", col = "darkblue", se = FALSE) +
labs(
title = "Voto Demócrata vs. Log(Densidad de poblacion)",
x = "Log(1 + Total de Población)",
y = "Porcentaje de Voto Demócrata"
) +
theme_minimal()## `geom_smooth()` using formula = 'y ~ x'
ggplot(datos_elecciones_recortado, aes(x = log1p(`Densidad de poblacion`), y = `% Voto Republicano`)) +
geom_point(alpha = 0.5, color = "firebrick") +
geom_smooth(method = "lm", col = "darkred", se = FALSE) +
labs(
title = "Voto Republicano vs. Log(Densidad de poblacion)",
x = "Log(1 + Total de Poblacion)",
y = "Porcentaje de Voto Republicano"
) +
theme_minimal()## `geom_smooth()` using formula = 'y ~ x'
Gráficos de Dispersión de densidad x votacion en Pueblos
En los gráficos de dispersión se aprecia una nube de puntos que tiende a ascender de izquierda a derecha para el caso demócrata, y a descender en el caso republicano. Esto indica una relación positiva entre la densidad de población y el porcentaje de voto demócrata. Los municipios con mayor densidad tienden a tener un mayor porcentaje de votos demócratas; así como una relación negativa entre la densidad de la población y el voto republicano. Intuiciones confirmadas con las lineas diagonales ascendentes (en el caso del gráfico de dispersión demócrata) y descendentes (en el caso del gráfico de dispersión republicano) que muestran las tendencias de la preferencia del voto en el caso de que aumente la densidad de la población (mas voto demócrata) o que disminuya (mas voto republicano)
No obstante, en el caso demócrata hay que destacar que también se observa menor poder explicativo a nivel granular. El R-squared es mucho menor (0.0691 o 6.91%) en este modelo de pueblo/condado en comparación con el modelo a nivel estatal (donde era alrededor del 36%).
Esto es un hallazgo común e importante: mientras que la densidad de población es un predictor significativo de las tendencias de voto a nivel estatal, su capacidad para explicar la variabilidad en el voto individual de pueblos o condados es mucho menor.
Esto sugiere que a un nivel más granular, otros factores (como la composición socio económica específica del pueblo, la presencia de industrias, el historial político local, etc.) juegan un papel mucho más importante en la explicación de las preferencias de voto que la densidad de población por sí sola.
Por otro lado la magnitud del Coeficiente (0.005988) es menor que el 0.012004 de la densidad a nivel estatal. Esto también es esperable, ya que la “densidad de población” se interpreta de manera diferente en la escala de un pueblo frente a la escala de un estado completo.
Como ya ha sido demostrado por diversos estudios, las zonas urbanas más densas tienden a votar por el Partido Demócrata, mientras que las zonas rurales favorecen al Partido Republicano (Bishop, 2009; Gimpel & Schuknecht, 2020; Rodden, 2019). La exploración sobre el conjunto de datos de las elecciones del 2020 tienden a confirmar estos antecedentes.
Por otro lado nuestro Análisis de correlacionLa tendencia positiva entre la densidad y el voto demócrata, y una tendencia negativa entre el voto republicano y la densidad de la población. Estos sugiere que mientras mas dispersa este la población, su preferencia electoral es republicano, y contrariamente, la concentración poblacional favorece el voto demócrata.
No obstante, un importante poder explicativo de la relaciones entre la preferencia del voto y la densidad solo se conservan en el caso del partido republicano. En el caso demócrata, un hallazgo importante salta a la vista: a nivel estatal la tendencia del voto tiende a favorecer el voto demócrata, no así a nivel granular. No obstante, es importante, considerar que, esto obedece mas a un análisis de concentración y dispersión de las zonas residenciales que le ofrezca mayores detalles al análisis, que solamente restringir la variabilidad demográfica a la estructura de densidad.
Pero, nos parece adecuado señalar que esta exploración es un indicio sobre la tendencia al voto y las estructuras demográficas en los Estados Unidos. Esta relación entre urbanización y preferencia electoral también se ve mediada por la diversidad demográfica presente en las grandes ciudades (Brown & Lopez, 2020; Frey, 2018), incluyendo nivel educativo y estructura etaria (Gelman et al., 2008).
La creciente polarización territorial ha sido analizada como un fenómeno que afecta no solo las decisiones políticas sino también la cohesión social (Hochschild, 2016; Tobler, 2021).
El análisis sobre la relación entre la concentración poblacional y la preferencia de voto en Estados Unidos sugiere que las áreas urbanas densamente pobladas presentan una mayor inclinación hacia el voto demócrata, mientras que las zonas rurales, menos pobladas, tienden a favorecer al partido republicano. Este patrón ha sido identificado por múltiples estudios empíricos que destacan la influencia de la urbanización en las actitudes políticas y el comportamiento electoral (Bafumi & Shapiro, 2012; Rodden, 2019).
Además, la diversidad demográfica que caracteriza a las zonas urbanas —como la presencia de grupos raciales y étnicos diversos, niveles más altos de educación y mayor movilidad social— se asocia con una mayor probabilidad de apoyo al Partido Demócrata (Florida, 2017; Frey, 2018). En contraste, las áreas rurales tienden a ser más homogéneas en términos étnicos y educativos, lo que contribuye a la estabilidad del voto republicano (Bishop, 2009).
En consecuencia, nuestros hallazgos empíricos respaldan la hipótesis planteada: la concentración de la población, y particularmente la densidad urbana, tiene una influencia significativa sobre la distribución del voto partidista en Estados Unidos. La densidad de población tiene efectos opuestos en los porcentajes de voto demócrata y republicano a nivel de pueblo/condado. A medida que la densidad aumenta, el voto demócrata sube y el voto republicano baja.
Este patrón no solo tiene implicancias para entender las dinámicas electorales actuales, sino también para analizar cómo los cambios demográficos y los procesos de urbanización futura podrían alterar el mapa político del país (Florida, 2017; Rodden, 2019).