Entrega Parcial

Factores que determinan la participación política en las elecciones presidenciales del 2022 en Colombia

Formulación del problema:

El análisis de los factores que determinan la participación electoral en Colombia se inscribe en el campo de las ciencias sociales, especialmente en la ciencia política, la sociología y la psicología social, que buscan explorar qué factores influyen en el comportamiento político. La participación electoral es considerada un indicador determinante para el funcionamiento democrático, ya que refleja el grado de involucramiento ciudadano y la legitimidad del sistema político. Ello es reforzado por Verba, Schlozman y Brady (1995) al afirmar que “la participación política constituye uno de los indicadores más importantes de la vitalidad democrática, pues representa la capacidad de los ciudadanos para expresar sus preferencias y demandas” (p. 271).

En el caso colombiano, la relevancia del tema radica en el carácter voluntario del voto, lo que transforma el acto de sufragar en una decisión influida por factores sociales, culturales y estructurales. Comprender las razones por las que los ciudadanos eligen participar o abstenerse implica considerar tanto las motivaciones individuales como las condiciones del entorno político. Al respecto, Campbell, Converse, Miller y Stokes (1960) consideran que “si estamos interesados en el comportamiento electoral, es probable que deseemos explicar la variación en al menos dos clases de eventos: si un individuo votará y por quién lo hará” (p. 20). Es decir, el estudio del comportamiento tiene orientaciones subjetivas pero también contextuales, que forman parte del estudio de las ciencias sociales. 

Desde esta perspectiva, la participación electoral puede entenderse como un fenómeno multidimensional, resultado de la interacción entre recursos individuales y condiciones contextuales. Por otro lado, el modelo de recursos desarrollado por Verba, Schlozman y Brady (1995) sostiene que el compromiso político depende del acceso a tiempo, dinero y habilidades cívicas, las cuales permiten participar de manera más efectiva. Estas capacidades se adquieren y refuerzan en distintos espacios sociales —como el trabajo, las organizaciones o las iglesias—, lo que explica por qué la desigual distribución de estos recursos genera brechas persistentes de participación. En este sentido, quienes poseen menos capital educativo, económico o asociativo enfrentan mayores barreras para involucrarse políticamente, incluso si muestran interés o motivación (Brady et al., 1995). 

Así también, desde otros estudios sociales, Putnam (2000) enriquece la discusión al incorporar la noción de capital social, entendido como el conjunto de redes, normas y vínculos de confianza que facilitan la cooperación. Según el autor, las sociedades con altos niveles de capital social tienden a mostrar mayor involucramiento cívico y confianza institucional, mientras que su deterioro se asocia con apatía y aislamiento. De ahí que “sin vínculos sociales sólidos, la democracia se vuelve menos eficiente y más frágil” (Putnam, 2000, p. 18). Esta discusión más reciente permite destacar aún más la discusión en las ciencias sociales e identificar factores, que serán desarrollados en un apartado posterior. 

En consecuencia, las discusiones expuestas permiten afirmar que el estudio de la participación electoral se enmarca en el ámbito de las ciencias sociales, ya que aborda un fenómeno colectivo vinculado con las dinámicas políticas, sociales y culturales. Las perspectivas revisadas, que están centradas en las motivaciones individuales, las condiciones estructurales y las relaciones sociales, reflejan la diversidad de enfoques que caracterizan el análisis social del comportamiento político para el voto. De este modo, la literatura previa justifica la relación del caso de estudio en el ámbito de las ciencias sociales, ya que no solo forman parte de discusiones previas del ámbito, sino que estudian al individuo como su contexto social.

Ahondando en el caso, como lo establece la Constitución Política de Colombia (1991), “El voto es un derecho y un deber ciudadano. El Estado velará porque se ejerza sin ningún tipo de coacción y en forma secreta por los ciudadanos en cubículos individuales instalados en cada mesa de votación sin perjuicio del uso de medios electrónicos o informáticos” (art. 258). De esta forma, no solo se menciona la no obligatoriedad del voto, sino que fundamentalmente se busca eliminar cualquier forma de coerción que modifique la decisión de ejercer el voto, suprimiendosé a sí misma en el proceso. 

Sin embargo, Colombia es el país cuya participación en las contiendas electorales no ha sido particularmente alta desde la vigencia de la nueva constitución. De hecho, se registra que en la segunda vuelta electoral del año 1998 participó un 59% de la población, siendo esta la estadística más alta hasta la actualidad (Misión de Observación Electoral, 2018). Solamente se encuentra seguida por la participación del 2022, en donde un total de 55% de colombianos acudieron a las urnas (Misión de Observación Electoral, 2022). 

Con lo que respecta a los factores que influyen en la intención de voto, el trabajo más enriquecedor y el que mayor contribuye al presente proyecto es el de José Flores (2019), quien clasifica y determina aquellos factores que más influyen en la decisión de participar en los comicios electorales. Para ello, usa información comprendida entre 2006 y 2014 y la procesa mediante un modelo econométrico de panel de datos de efectos fijos, lo que le permitió controlar por características invariantes en el tiempo de las unidades de análisis. 

La primera categoría son los factores socioeconómicos, en donde de forma general afirma que las mejoras en las condiciones económicas y sociales tienden a producir aumentos en la participación electoral. Específicamente, el crecimiento del PBI departamental, el aumento de la cantidad de matriculados en educación superior, la tasa de ocupación y el coeficiente de gini presentan una relación positiva con la participación electoral. Por su parte, la pobreza, el subempleo y el aumento de afiliados al régimen contributivo de salud presentan una relación negativa con respecto a la variable dependiente. 

La segunda categoría es el de factores demográficos, en donde resalta la influencia de la tasa de natalidad, donde encuentra una relación positiva al respecto con la participación electoral. Por último, y no por ello menos importante, el autor encuentra la influencia de factores relacionados con la violencia. Por un lado, encuentra una relación negativa en relación al número de casos de secuestros. Por otro lado, denota que los efectos de la violencia tienen un impacto en la participación pues, entre más se conocen estos hechos, la población desconfía de las instituciones estatales al no sentir se garantice su protección. Esta baja confianza en las instituciones genera una baja participación electoral.

El presente proyecto busca identificar los factores que explican la participación electoral en contextos donde el voto no es obligatorio, tomando como caso de estudio a Colombia. En este país, a diferencia de otras democracias latinoamericanas como Perú, la decisión de acudir a las urnas depende enteramente de la voluntad individual. Esta característica genera una gran variabilidad en el comportamiento electoral, lo que convierte a Colombia en un escenario ideal para aplicar técnicas de machine learning orientadas a clasificar y predecir la probabilidad de votar según distintos perfiles ciudadanos. De esta manera, el modelo no solo identifica patrones de participación, sino que también permite explorar qué dimensiones —socioeconómicas, políticas, institucionales o informativas— influyen más en la decisión de ejercer el voto.

Desde una perspectiva aplicada, el uso de machine learning ofrece ventajas frente a los enfoques estadísticos tradicionales, ya que permite procesar un conjunto amplio de variables provenientes de encuestas como el Barómetro de las Américas (LAPOP 2023) y detectar interacciones no lineales entre factores. En países donde el voto es voluntario, la decisión de participar no responde únicamente a una motivación racional o ideológica, sino también a factores contextuales, percepciones de eficacia política, confianza institucional o exposición mediática. Un modelo clasificatorio puede capturar esas combinaciones complejas. Por ello, se aplicará un modelo de regresión logística. Esto se debe a que permite obtener resultados para variables categóricas dicotomicas como la variables dependiente (sí votó/no votó)

Asimismo, estudiar la participación en un contexto de voto no obligatorio permite abordar un problema de relevancia pública: la brecha entre ciudadanía formal y ciudadanía efectiva. Colombia presenta históricamente niveles de abstención superiores al 40 %, lo que plantea desafíos para la legitimidad democrática y la representación política. Aplicar un modelo de machine learning a estos datos no busca reemplazar la interpretación social o política, sino complementarla con evidencia empírica basada en la predicción y clasificación de comportamientos. Así, el proyecto contribuye tanto a la investigación académica sobre participación política como al diseño de estrategias que fortalezcan la democracia en contextos donde votar es un acto de elección, no de obligación.

Descripción de la data:

Los datos provienen del Barómetro de las Américas 2023 – Colombia, elaborado por LAPOP. El estudio emplea un diseño muestral probabilístico que tiene como objetivo garantizar la representatividad nacional de la población colombiana en edad de votar. La información fue recolectada a través de entrevistas directas a personas mayores de 18 años, residentes en zonas urbanas y rurales de las distintas regiones del país. El conjunto de datos, que contiene 1500 observaciones, reúne variables sociodemográficas, políticas, económicas y de confianza institucional, orientadas a analizar percepciones ciudadanas sobre la democracia, la participación electoral y el desempeño del Estado. Asimismo, es relevante mencionar que la encuesta para obtener los datos fue realizada al año siguiente de las elecciones presidenciales de 2022.

Modelo supervisado: regresión logística

Librerias

library(rio)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   4.0.0     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.1.0     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(gtsummary)
library(dplyr)

Limpieza

library(rio)
data_col = import("lapop_2023_colombia.sav")
head(data_col)
  idnum pais nationality estratopri estratosec strata prov municipio upm ur
1  1802    8           8        815          1    815  876    876109  62  1
2  6818    8           8        815          1    815  876    876001  36  1
3  9118    8           8        815          3    815  876    876306  15  1
4  6093    8           8        815          1    815  876    876001   8  1
5  8652    8           8        815          3    815  876    876306  15  2
6  6068    8           8        815          3    815  876    876306  15  2
  cluster year wave wt q1tc_r q2 a4n soct2 idio2 mesfut1 cp6 cp7 cp8 cp13
1     140 2023 2023  1      1 24   2     3     3       3   4  NA   4    4
2     142 2023 2023  1      1 43   2     3     3       4   4  NA   3    4
3     116 2023 2023  1      2 60   2     3     2       2  NA   4   4    4
4     241 2023 2023  1      2 50   1     3     3       3   2  NA   3    4
5      67 2023 2023  1      2 58   6     3     2       1   2  NA   2    4
6      67 2023 2023  1      2 26   1     3     3       4   4  NA   4    4
  colcp10 it1 colit1jov1 l1n jc10 jc13 jc15a jc16a vic1ext aoj11 aoj12
1       4   3          3   3   NA    2     2    NA       1     4     3
2       4   4          4   1   NA    1    NA     2       2     4     4
3       4   1          2   6    2   NA    NA     2       2     2     4
4       4   3          4   5   NA    2    NA    NA       1     2     4
5       4   1          1  NA   NA   NA    NA    NA       2     1    NA
6       4   1          1   2    1   NA    NA     1       2     3     4
  countfair1 countfair3 chm1bn chm2bn colpaz1a colpaz1c colpaz2bn b0 b1 b2 b3
1          2         NA      2     NA        1       NA         2  1  3  7  4
2          3          3      1     NA        2        2         4  1  1  7  5
3          2          3     NA      2        1        1         4  6  4  7  5
4          3          3      2     NA        1        2         4  3  1  1  2
5         NA         NA     NA      1       NA       NA        NA  7 NA NA NA
6          3         NA     NA     NA        1        1         3  2  3  7  5
  b4 b6 b12 b13 b18 b21 b21a b31 b32 b37 b47a colb60n colbcmj colbjov2
1  1  4   5   3   3   2    7   6   1   1    1       2       3        3
2  4  3   6   5   6   2    1   6   3   2    6       6       7        3
3  6  6   7   6   6   5    6   5   4   6    4       2       7        7
4  3  4   4   3   3   2    1   3   2   2    2       1       2        2
5 NA NA   4  NA  NA   1    1  NA  NA   1    1      NA      NA        1
6  4  7   5   2   4   1    4   3   1   1    1       2       4        4
  colrecon19b colrecon19c colrecon20b colrecon20c coljepaa2 coljepaa3 coljepaa4
1           7           7          NA          NA         5         5         6
2           6           2          NA          NA         6         5         3
3          NA          NA           6           7         7         6         6
4           2           2          NA          NA         2         2         1
5           1          NA          NA          NA         1        NA        NA
6          NA          NA           2           3         3         3         4
  coljepaa1 m1 sd2new2 sd3new2 sd6new2 sd5new2 colsd3 pop101 pop107 ros4 ing4
1         4  1       4      NA      NA       4      4     NA      4    6    7
2         5  5      NA       3       2      NA     NA      3     NA    6    2
3         6  2       3      NA      NA       2      2     NA      6    7    6
4         2  4      NA       2       2      NA     NA      3     NA    5    4
5        NA NA      NA       2      NA       2     NA     NA     NA    7   NA
6         2  3       3      NA      NA       3      2     NA      3    5    4
  eff1 eff2 colpropaz13cp colpropaz13jp colpact16ap colpropaz13kp colpropaz13mp
1    1    3            NA            NA          NA             2             3
2    6    2            NA            NA          NA             4             6
3    7    5             3             3           6            NA            NA
4    4    2            NA            NA          NA             2             4
5   NA    1            NA            NA          NA            NA            NA
6    1    1            NA            NA          NA             2             4
  colpact16bp colind1a colcamp1a colafro1a coljepaa7 vb21n crg1 crg2 drr1n
1           4       NA        NA         3         4     1    2    2     2
2           2       NA        NA         2         6     4    2    2     2
3          NA       NA        NA         6         4     5    2    2     2
4           4       NA        NA         3         3     1    2    2     2
5          NA       NA        NA        NA        NA    NA   NA    1     2
6           4       NA        NA         3         7     1    2    2     1
  env2b anestg pn4 dem30 e5 e17a e17b d3 d4 d5 d6 exc2 exc6 exc7 exc7new lib2c
1     1      3  NA     2  5   NA    3  2  3 10 10    0    0    3       5     1
2     1      4   4     1  3    8   NA  5  2  8  5    0    0    4       3     1
3     1      1   2     1  3   NA    7  5  6  7 NA    0    0    1       5     1
4     1      4   3     1 10   NA    1  5  5  2  1    0    0    1       5     1
5    NA      4  NA    NA NA   NA    3  2  1  1  1    0    0    1       5     1
6     1      4   3    NA  7   10   NA  4  3 10 10    0    0    1       5     1
  immig1xa immig1xb immig1xc comcon3xa comcon3xb comcon3xc vb2 vb3n vb10 vb11
1       NA       NA        1        NA        NA         4   1  802    2   NA
2        1       NA       NA         3        NA        NA   1  801    2   NA
3        2       NA       NA         4        NA        NA   1   NA    2   NA
4        3       NA       NA         4        NA        NA   1   NA    2   NA
5       NA       NA        4        NA        NA         4   2   NA    2   NA
6       NA        1       NA        NA         4        NA   1   NA    2   NA
  pol1 vb20 vb50 vb51 vb52 vb58 vb58exp w14a mil10a mil10b mil10e dis11 dis12
1    3    2    3    3   NA    3      NA    1     NA     NA     NA     3     4
2    4    4    4   NA    2   NA       4    2      4      4      1     4     3
3    4    1    3   NA    3    3      NA    2     NA      3     NA     4     4
4    3    4    4    3   NA    2      NA    1     NA     NA     NA     4     4
5    3    1    3   NA    3   NA       3    2     NA     NA     NA     4     4
6    3   NA    2   NA    3   NA       2    1     NA     NA     NA     4     4
  childm6 childm7 childm8 childm9 childm10 childm11 childm12 childm13 ddhcol1
1       2       2       2      NA       NA       NA        2       NA       2
2       2       1      NA       2        1       NA       NA       NA       2
3       2       4      NA      NA        2       NA       NA        2       2
4       2       4       2      NA       NA       NA       NA        2       2
5       2       3      NA      NA       NA        2       NA       NA       2
6       2       4      NA       1       NA       NA        2       NA       2
  ddhcol2 wf1 cct1b edre q3cn q5b ocup4a formal q10c q10a q10b q10inc q10e q14
1      NA   2     2    5    4   4      1      1    4    2   NA    814    3   2
2      NA   2     2    4    1   1      1      2    4    2   NA    815    1   2
3      NA   2     2    3    1   1      5     NA    4    2   NA    802    2   2
4      NA   2     2    5    1   1      5     NA    3    2   NA    809    2   2
5      NA   2     1    3    1   1      5     NA    4    2   NA    804    3   2
6      NA   1     2    6    1   1      2      2    4    2   NA    802    1   1
  q14dnew q14f q14motan q14pan_1 q14pan_2 q14pan_3 q14pan_4 q14pan_5 q14pan_0
1      NA   NA       NA       NA       NA       NA       NA       NA       NA
2      NA   NA       NA       NA       NA       NA       NA       NA       NA
3      NA   NA       NA       NA       NA       NA       NA       NA       NA
4      NA   NA       NA       NA       NA       NA       NA       NA       NA
5      NA   NA       NA       NA       NA       NA       NA       NA       NA
6       1    2        2        0        1        0        0        0        0
  q14pan_7 q14int1 nat1s nat2s fs2 fs212 ws1 ws2 q11n q12cn q12bn q12bnf q12p
1       NA       1     1    NA   0     0   0  NA    3     1     0     NA   NA
2       NA       2     1    NA   0     0   0  NA    1     4     3      1   NA
3       NA       2     1    NA   0     0   0  NA    3     4     0     NA   38
4       NA       2     1    NA   0     0   0  NA    3     4     2      3   21
5       NA       2     1    NA   0     0   0  NA    6     4     0     NA   22
6        0       2     1    NA   0     0   1   3    3     4     1      3    0
  etid gi0n smedia1n smedia3n smedia3b smedia11 smedia12 smedia13 smedia14n
1    2    3        1        5       NA        1        1        1         1
2    1    5        2       NA       NA        2        2        1         1
3    2    2        2       NA       NA        1        2        3         3
4    1    1        2       NA       NA        2        1        4         4
5    7    5        2       NA       NA        2        2        4         4
6   NA    5        1        5       NA        1        1        1         3
  smedia15 smedia16 r3 r4a r6 r7 r12 r15 r18n r18 r16 r27 colorr noise1 conocim
1        3        3  1   1  1  1   1   1    1   1   1   0      2      0       3
2        2        1  1   1  1  1   1   1    1   1   1   1      3      0       3
3        4        1  1   1  1  0   1   0    0   0   1   0      4      0       2
4        4        1  1   1  1  0   1   0    1   1   1   1      2      0       4
5        4        1  1   1  1  0   1   0    0   0   0   0      3      0       2
6        4        3  1   1  0  0   1   0    1   1   0   0      2      0       2
  sexin colori formatq idiomaq     fecha
1     1      3       4       1 31may2023
2     1      3       4       1 26may2023
3     1      3       4       1 30may2023
4     1      3       4       1 16may2023
5     1      3       4       1 30may2023
6     1      3       4       1 30may2023
library(dplyr)

data_col <- data_col %>%
  select(
    idnum,       # identificador del cuestionario
    vb2,         # dependiente: votó o no
    q1tc_r, q2, edre, q10inc, ocup4a, ur, etid,     
    pol1, l1n, pn4, dem30,                        
    b21, b47a, b32, b13, b12,                     
    soct2, idio2, vic1ext, aoj11, aoj12           
  )

names(data_col)
 [1] "idnum"   "vb2"     "q1tc_r"  "q2"      "edre"    "q10inc"  "ocup4a" 
 [8] "ur"      "etid"    "pol1"    "l1n"     "pn4"     "dem30"   "b21"    
[15] "b47a"    "b32"     "b13"     "b12"     "soct2"   "idio2"   "vic1ext"
[22] "aoj11"   "aoj12"  
head(data_col)
  idnum vb2 q1tc_r q2 edre q10inc ocup4a ur etid pol1 l1n pn4 dem30 b21 b47a
1  1802   1      1 24    5    814      1  1    2    3   3  NA     2   2    1
2  6818   1      1 43    4    815      1  1    1    4   1   4     1   2    6
3  9118   1      2 60    3    802      5  1    2    4   6   2     1   5    4
4  6093   1      2 50    5    809      5  1    1    3   5   3     1   2    2
5  8652   2      2 58    3    804      5  2    7    3  NA  NA    NA   1    1
6  6068   1      2 26    6    802      2  2   NA    3   2   3    NA   1    1
  b32 b13 b12 soct2 idio2 vic1ext aoj11 aoj12
1   1   3   5     3     3       1     4     3
2   3   5   6     3     3       2     4     4
3   4   6   7     3     2       2     2     4
4   2   3   4     3     3       1     2     4
5  NA  NA   4     3     2       2     1    NA
6   1   2   5     3     3       2     3     4

Factorización

Primero, es importante conocer la clase de las variables con las que se van a trabajar. Por ello:

str(data_col)
'data.frame':   1503 obs. of  23 variables:
 $ idnum  : num  1802 6818 9118 6093 8652 ...
  ..- attr(*, "label")= chr "Identificador de entrevista"
  ..- attr(*, "format.spss")= chr "F4.0"
  ..- attr(*, "display_width")= int 7
  ..- attr(*, "labels")= Named num [1:3] 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:3] "DK" "NR" "N/A"
 $ vb2    : num  1 1 1 1 2 1 1 2 1 1 ...
  ..- attr(*, "label")= chr "Registro de votaciones: 2022 elección presidencial"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 2 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Sí votó" "No votó" "DK" "NR" ...
 $ q1tc_r : num  1 1 2 2 2 2 2 2 2 2 ...
  ..- attr(*, "label")= chr "Género"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 2 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Hombre/masculino" "Mujer/femenino" "DK" "NR" ...
 $ q2     : num  24 43 60 50 58 26 30 27 48 47 ...
  ..- attr(*, "label")= chr "Edad"
  ..- attr(*, "format.spss")= chr "F2.0"
  ..- attr(*, "display_width")= int 4
  ..- attr(*, "labels")= Named num [1:3] 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:3] "DK" "NR" "N/A"
 $ edre   : num  5 4 3 5 3 6 3 4 6 0 ...
  ..- attr(*, "label")= chr "Nivel de educación"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:10] 0 1 2 3 4 ...
  .. ..- attr(*, "names")= chr [1:10] "Ninguna" "Primaria incompleta" "Primaria completa" "Secundaria incompleta" ...
 $ q10inc : num  814 815 802 809 804 802 809 809 812 803 ...
  ..- attr(*, "label")= chr "Total de ingresos mensuales"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:18] 801 802 803 804 805 806 807 808 809 810 ...
  .. ..- attr(*, "names")= chr [1:18] "Entre 0 y 175,000 pesos" "Entre 175,001 - 300,000 pesos" "Entre 300,001 - 449,708 pesos" "Entre 449,709 - 600,000 pesos" ...
 $ ocup4a : num  1 1 5 5 5 2 5 1 1 5 ...
  ..- attr(*, "label")= chr "La situación laboral"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:10] 1 2 3 4 5 ...
  .. ..- attr(*, "names")= chr [1:10] "Trabajando?" "No está trabajando en este momento pero tiene trabajo?" "Está buscando trabajo activamente?" "Es estudiante?" ...
 $ ur     : num  1 1 1 1 2 2 1 1 1 2 ...
  ..- attr(*, "label")= chr "Urbanización"
  ..- attr(*, "format.spss")= chr "F1.0"
  ..- attr(*, "display_width")= int 4
  ..- attr(*, "labels")= Named num [1:5] 1 2 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Urbano" "Rural" "DK" "NR" ...
 $ etid   : num  2 1 2 1 7 NA 1 2 4 3 ...
  ..- attr(*, "label")= chr "La raza/etnicidad"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:9] 1 2 3 4 5 ...
  .. ..- attr(*, "names")= chr [1:9] "Blanca" "Mestiza" "Indígena" "Negra" ...
 $ pol1   : num  3 4 4 3 3 3 4 4 2 4 ...
  ..- attr(*, "label")= chr "Interés en la política"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:7] 1 2 3 4 888888 ...
  .. ..- attr(*, "names")= chr [1:7] "Mucho" "Algo" "Poco" "Nada" ...
 $ l1n    : num  3 1 6 5 NA 2 5 3 5 10 ...
  ..- attr(*, "label")= chr "Escala izquierda/derecha"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 10 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Izquierda" "Derecha" "DK" "NR" ...
 $ pn4    : num  NA 4 2 3 NA 3 2 3 3 2 ...
  ..- attr(*, "label")= chr "Satisfacción con democracia de su país"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:7] 1 2 3 4 888888 ...
  .. ..- attr(*, "names")= chr [1:7] "Muy satisfecho(a)" "Satisfecho(a)" "Insatisfecho(a)" "Muy insatisfecho(a)" ...
 $ dem30  : num  2 1 1 1 NA NA 1 1 1 1 ...
  ..- attr(*, "label")= chr "El país es una democracia"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 2 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Sí" "No" "DK" "NR" ...
 $ b21    : num  2 2 5 2 1 1 3 5 1 1 ...
  ..- attr(*, "label")= chr "Confianza en los partidos políticos"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 7 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Nada" "Mucho" "DK" "NR" ...
 $ b47a   : num  1 6 4 2 1 1 3 3 1 1 ...
  ..- attr(*, "label")= chr "Confianza en las elecciones"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 7 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Nada" "Mucho" "DK" "NR" ...
 $ b32    : num  1 3 4 2 NA 1 3 6 1 3 ...
  ..- attr(*, "label")= chr "Confianza en su municipalidad"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 7 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Nada" "Mucho" "DK" "NR" ...
 $ b13    : num  3 5 6 3 NA 2 3 5 2 NA ...
  ..- attr(*, "label")= chr "Confianza en la legislatura"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 7 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Nada" "Mucho" "DK" "NR" ...
 $ b12    : num  5 6 7 4 4 5 3 6 5 NA ...
  ..- attr(*, "label")= chr "Confianza en las fuerzas armadas"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:5] 1 7 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Nada" "Mucho" "DK" "NR" ...
 $ soct2  : num  3 3 3 3 3 3 3 2 3 3 ...
  ..- attr(*, "label")= chr "Evaluación de la situación económica actual del país (En los últimos 12 meses)"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:6] 1 2 3 888888 988888 ...
  .. ..- attr(*, "names")= chr [1:6] "Mejor" "Igual" "Peor" "DK" ...
 $ idio2  : num  3 3 2 3 2 3 2 1 2 3 ...
  ..- attr(*, "label")= chr "Percepción de situación económica personal (En los últimos 12 meses)"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:6] 1 2 3 888888 988888 ...
  .. ..- attr(*, "names")= chr [1:6] "Mejor" "Igual" "Peor" "DK" ...
 $ vic1ext: num  1 2 2 1 2 2 2 2 1 2 ...
  ..- attr(*, "label")= chr "Víctima del crimen en los últimos 12 meses"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "display_width")= int 9
  ..- attr(*, "labels")= Named num [1:5] 1 2 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:5] "Sí" "No" "DK" "NR" ...
 $ aoj11  : num  4 4 2 2 1 3 1 3 3 1 ...
  ..- attr(*, "label")= chr "Percepción de seguridad en el vecindario"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:7] 1 2 3 4 888888 ...
  .. ..- attr(*, "names")= chr [1:7] "Muy seguro(a)" "Algo seguro(a)" "Algo inseguro(a)" "Muy inseguro(a)" ...
 $ aoj12  : num  3 4 4 4 NA 4 4 1 4 1 ...
  ..- attr(*, "label")= chr "Si es víctima de un crimen, la fe en el sistema de justicia"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:7] 1 2 3 4 888888 ...
  .. ..- attr(*, "names")= chr [1:7] "Mucho" "Algo" "Poco" "Nada" ...

Existen algunas variables que son factores. Es necesario trasnformarlas.

data_col$vb2 <- as.factor(data_col$vb2)
data_col$q1tc_r <- as.factor(data_col$q1tc_r)
data_col$edre <- as.factor(data_col$edre)
data_col$ocup4a <- as.factor(data_col$ocup4a)
data_col$ur <- as.factor(data_col$ur)
data_col$etid <- as.factor(data_col$etid)
data_col$pol1 <- as.factor(data_col$pol1)
data_col$l1n <- as.factor(data_col$l1n)
data_col$pn4 <- as.factor(data_col$pn4)
data_col$dem30 <- as.factor(data_col$dem30)
data_col$b21 <- as.factor(data_col$b21)
data_col$b47a <- as.factor(data_col$b47a)
data_col$b32 <- as.factor(data_col$b32)
data_col$b13 <- as.factor(data_col$b13)
data_col$b12 <- as.factor(data_col$b12)
data_col$soct2 <- as.factor(data_col$soct2)
data_col$idio2 <- as.factor(data_col$idio2)
data_col$vic1ext <- as.factor(data_col$vic1ext)
data_col$aoj11 <- as.factor(data_col$aoj11)
data_col$aoj12 <- as.factor(data_col$aoj12)

Se verifica:

str(data_col)
'data.frame':   1503 obs. of  23 variables:
 $ idnum  : num  1802 6818 9118 6093 8652 ...
  ..- attr(*, "label")= chr "Identificador de entrevista"
  ..- attr(*, "format.spss")= chr "F4.0"
  ..- attr(*, "display_width")= int 7
  ..- attr(*, "labels")= Named num [1:3] 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:3] "DK" "NR" "N/A"
 $ vb2    : Factor w/ 2 levels "1","2": 1 1 1 1 2 1 1 2 1 1 ...
 $ q1tc_r : Factor w/ 2 levels "1","2": 1 1 2 2 2 2 2 2 2 2 ...
 $ q2     : num  24 43 60 50 58 26 30 27 48 47 ...
  ..- attr(*, "label")= chr "Edad"
  ..- attr(*, "format.spss")= chr "F2.0"
  ..- attr(*, "display_width")= int 4
  ..- attr(*, "labels")= Named num [1:3] 888888 988888 999999
  .. ..- attr(*, "names")= chr [1:3] "DK" "NR" "N/A"
 $ edre   : Factor w/ 7 levels "0","1","2","3",..: 6 5 4 6 4 7 4 5 7 1 ...
 $ q10inc : num  814 815 802 809 804 802 809 809 812 803 ...
  ..- attr(*, "label")= chr "Total de ingresos mensuales"
  ..- attr(*, "format.spss")= chr "F6.0"
  ..- attr(*, "labels")= Named num [1:18] 801 802 803 804 805 806 807 808 809 810 ...
  .. ..- attr(*, "names")= chr [1:18] "Entre 0 y 175,000 pesos" "Entre 175,001 - 300,000 pesos" "Entre 300,001 - 449,708 pesos" "Entre 449,709 - 600,000 pesos" ...
 $ ocup4a : Factor w/ 7 levels "1","2","3","4",..: 1 1 5 5 5 2 5 1 1 5 ...
 $ ur     : Factor w/ 2 levels "1","2": 1 1 1 1 2 2 1 1 1 2 ...
 $ etid   : Factor w/ 6 levels "1","2","3","4",..: 2 1 2 1 6 NA 1 2 4 3 ...
 $ pol1   : Factor w/ 4 levels "1","2","3","4": 3 4 4 3 3 3 4 4 2 4 ...
 $ l1n    : Factor w/ 10 levels "1","2","3","4",..: 3 1 6 5 NA 2 5 3 5 10 ...
 $ pn4    : Factor w/ 4 levels "1","2","3","4": NA 4 2 3 NA 3 2 3 3 2 ...
 $ dem30  : Factor w/ 2 levels "1","2": 2 1 1 1 NA NA 1 1 1 1 ...
 $ b21    : Factor w/ 7 levels "1","2","3","4",..: 2 2 5 2 1 1 3 5 1 1 ...
 $ b47a   : Factor w/ 7 levels "1","2","3","4",..: 1 6 4 2 1 1 3 3 1 1 ...
 $ b32    : Factor w/ 7 levels "1","2","3","4",..: 1 3 4 2 NA 1 3 6 1 3 ...
 $ b13    : Factor w/ 7 levels "1","2","3","4",..: 3 5 6 3 NA 2 3 5 2 NA ...
 $ b12    : Factor w/ 7 levels "1","2","3","4",..: 5 6 7 4 4 5 3 6 5 NA ...
 $ soct2  : Factor w/ 3 levels "1","2","3": 3 3 3 3 3 3 3 2 3 3 ...
 $ idio2  : Factor w/ 3 levels "1","2","3": 3 3 2 3 2 3 2 1 2 3 ...
 $ vic1ext: Factor w/ 2 levels "1","2": 1 2 2 1 2 2 2 2 1 2 ...
 $ aoj11  : Factor w/ 4 levels "1","2","3","4": 4 4 2 2 1 3 1 3 3 1 ...
 $ aoj12  : Factor w/ 4 levels "1","2","3","4": 3 4 4 4 NA 4 4 1 4 1 ...

Exploración de variables

Variable dependiente

VB2 – ¿Votó usted en la primera vuelta de las últimas elecciones presidenciales de 2022?

  • Tipo: categórica dicotómica
cat("VB2. ¿Votó usted en la primera vuelta de las últimas elecciones presidenciales de 2022?\n\n",
    "1 = Sí votó\n",
    "2 = No votó\n\n")
VB2. ¿Votó usted en la primera vuelta de las últimas elecciones presidenciales de 2022?

 1 = Sí votó
 2 = No votó
table(data_col$vb2, useNA = "ifany")

   1    2 <NA> 
 926  569    8 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$vb2, useNA = "ifany")), 1)

   1    2 <NA> 
61.6 37.9  0.5 

Variables sociodemográficas

Q1TC_R – Género

  • Tipo: Categórica nominal
cat("Q1TC_R. Para fines estadísticos, ¿me podría confirmar su género?\n\n",
    "1 = Hombre/masculino\n",
    "2 = Mujer/femenino\n",
    "3 = No se identifica como hombre ni como mujer\n\n")
Q1TC_R. Para fines estadísticos, ¿me podría confirmar su género?

 1 = Hombre/masculino
 2 = Mujer/femenino
 3 = No se identifica como hombre ni como mujer
table(data_col$q1tc_r, useNA = "ifany")

   1    2 <NA> 
 750  746    7 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$q1tc_r, useNA = "ifany")), 1)

   1    2 <NA> 
49.9 49.6  0.5 

Q2 – Edad en años cumplidos

  • Tipo: Numérica continua
cat("Q2. ¿Cuál es su edad en años cumplidos?\n\n",
    "Variable numérica continua\n\n")
Q2. ¿Cuál es su edad en años cumplidos?

 Variable numérica continua
summary(data_col$q2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  18.00   28.00   38.00   39.75   49.00   87.00 

EDRE – Nivel educativo máximo alcanzado

  • Tipo: Categórica ordinal
cat("EDRE. ¿Cuál es el nivel más alto de educación que ha completado?\n\n",
    "0 = Ninguna\n1 = Primaria incompleta\n2 = Primaria completa\n3 = Secundaria incompleta\n",
    "4 = Secundaria completa\n5 = Técnico/tecnólogo incompleto\n6 = Técnico/tecnólogo completo\n\n")
EDRE. ¿Cuál es el nivel más alto de educación que ha completado?

 0 = Ninguna
1 = Primaria incompleta
2 = Primaria completa
3 = Secundaria incompleta
 4 = Secundaria completa
5 = Técnico/tecnólogo incompleto
6 = Técnico/tecnólogo completo
table(data_col$edre, useNA = "ifany")

   0    1    2    3    4    5    6 <NA> 
  35  140  127  234  498  148  318    3 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$edre, useNA = "ifany")), 1)

   0    1    2    3    4    5    6 <NA> 
 2.3  9.3  8.4 15.6 33.1  9.8 21.2  0.2 

Q10INC – Rango de ingresos familiares mensuales

  • Tipo: Categórica ordinal
cat("Q10INC. ¿Y en cuál de los siguientes rangos se encuentran los ingresos familiares mensuales de su hogar, incluyendo las remesas del exterior, programas de ayuda en dinero del gobierno o municipio, jubilaciones, rentas y el salario o ingreso de todos los adultos e hijos que viven en su hogar?\n\n",
    "801 = Entre 0 y 175,000 pesos\n",
    "802 = Entre 175,001 y 300,000 pesos\n",
    "803 = Entre 300,001 y 449,708 pesos\n",
    "804 = Entre 449,709 y 600,000 pesos\n",
    "805 = Entre 600,001 y 721,963 pesos\n",
    "806 = Entre 721,964 y 820,000 pesos\n",
    "807 = Entre 820,001 y 967,632 pesos\n",
    "808 = Entre 967,633 y 1,194,220 pesos\n",
    "809 = Entre 1,194,221 y 1,300,000 pesos\n",
    "810 = Entre 1,300,001 y 1,459,510 pesos\n",
    "811 = Entre 1,459,511 y 1,807,929 pesos\n",
    "812 = Entre 1,807,930 y 2,290,105 pesos\n",
    "813 = Entre 2,290,106 y 3,032,838 pesos\n",
    "814 = Entre 3,032,839 y 4,580,000 pesos\n",
    "815 = Más de 4,580,000 pesos\n\n")
Q10INC. ¿Y en cuál de los siguientes rangos se encuentran los ingresos familiares mensuales de su hogar, incluyendo las remesas del exterior, programas de ayuda en dinero del gobierno o municipio, jubilaciones, rentas y el salario o ingreso de todos los adultos e hijos que viven en su hogar?

 801 = Entre 0 y 175,000 pesos
 802 = Entre 175,001 y 300,000 pesos
 803 = Entre 300,001 y 449,708 pesos
 804 = Entre 449,709 y 600,000 pesos
 805 = Entre 600,001 y 721,963 pesos
 806 = Entre 721,964 y 820,000 pesos
 807 = Entre 820,001 y 967,632 pesos
 808 = Entre 967,633 y 1,194,220 pesos
 809 = Entre 1,194,221 y 1,300,000 pesos
 810 = Entre 1,300,001 y 1,459,510 pesos
 811 = Entre 1,459,511 y 1,807,929 pesos
 812 = Entre 1,807,930 y 2,290,105 pesos
 813 = Entre 2,290,106 y 3,032,838 pesos
 814 = Entre 3,032,839 y 4,580,000 pesos
 815 = Más de 4,580,000 pesos
table(data_col$q10inc, useNA = "ifany")

 801  802  803  804  805  806  807  808  809  810  811  812  813  814  815 <NA> 
 199  118  106   84   71   58   68  113  110   68   50   84   49   47   21  257 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$q10inc, useNA = "ifany")), 1)

 801  802  803  804  805  806  807  808  809  810  811  812  813  814  815 <NA> 
13.2  7.9  7.1  5.6  4.7  3.9  4.5  7.5  7.3  4.5  3.3  5.6  3.3  3.1  1.4 17.1 

OCUP4A – Situación laboral principal

  • Tipo: Categórica nominal
cat("OCUP4A. ¿A qué se dedica usted principalmente? Actualmente…\n",
    "1 = Trabajando\n",
    "2 = No está trabajando pero tiene trabajo\n",
    "3 = Buscando trabajo activamente\n",
    "4 = Estudiante\n",
    "5 = Quehaceres del hogar\n",
    "6 = Jubilado/pensionado/incapacitado permanentemente\n",
    "7 = No trabaja y no busca trabajo\n")
OCUP4A. ¿A qué se dedica usted principalmente? Actualmente…
 1 = Trabajando
 2 = No está trabajando pero tiene trabajo
 3 = Buscando trabajo activamente
 4 = Estudiante
 5 = Quehaceres del hogar
 6 = Jubilado/pensionado/incapacitado permanentemente
 7 = No trabaja y no busca trabajo
print(table(data_col$ocup4a, useNA = "ifany"))

   1    2    3    4    5    6    7 <NA> 
 674   76  235  112  253   65   84    4 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$ocup4a, useNA = "ifany")), 1))

   1    2    3    4    5    6    7 <NA> 
44.8  5.1 15.6  7.5 16.8  4.3  5.6  0.3 

UR – Zona de residencia

  • Tipo: Categórica nominal
cat("UR. ¿Su vivienda se encuentra en zona urbana o rural?\n\n",
    "1 = Urbano\n",
    "2 = Rural\n\n")
UR. ¿Su vivienda se encuentra en zona urbana o rural?

 1 = Urbano
 2 = Rural
table(data_col$ur, useNA = "ifany")

   1    2 
1183  320 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$ur, useNA = "ifany")), 1)

   1    2 
78.7 21.3 

ETID – Autoidentificación étnica

  • Tipo: Categórica nominal
cat("ETID. ¿Usted se considera una
persona blanca, mestiza,
indígena, negra, mulata, u
otra?\n",
    "1 = Blanca\n",
    "2 = Mestiza\n",
    "3 = Indigena\n",
    "4 = Negra\n",
    "5 = Mulata\n",
    "7 = Otra\n")
ETID. ¿Usted se considera una
persona blanca, mestiza,
indígena, negra, mulata, u
otra?
 1 = Blanca
 2 = Mestiza
 3 = Indigena
 4 = Negra
 5 = Mulata
 7 = Otra
print(table(data_col$etid, useNA = "ifany"))

   1    2    3    4    5    7 <NA> 
 467  595   91  118   72   84   76 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$etid, useNA = "ifany")), 1))

   1    2    3    4    5    7 <NA> 
31.1 39.6  6.1  7.9  4.8  5.6  5.1 

Variables sobre opinión política

POL1 – Interés en la política

  • Tipo: Categórica ordinal
cat("POL1. ¿Qué tanto interés tiene usted en la política?\n",
    "1 = Mucho\n",
    "2 = Algo\n",
    "3 = Poco\n",
    "4 = Nada\n")
POL1. ¿Qué tanto interés tiene usted en la política?
 1 = Mucho
 2 = Algo
 3 = Poco
 4 = Nada
print(table(data_col$pol1, useNA = "ifany"))

   1    2    3    4 <NA> 
 119  244  539  597    4 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$pol1, useNA = "ifany")), 1)) 

   1    2    3    4 <NA> 
 7.9 16.2 35.9 39.7  0.3 

L1N – Autoubicación ideológica en la escala izquierda-derecha

  • Tipo: Categórica nominal
cat("L1N. En esta escala de izquierda y derecha, ¿dónde se ecuentra usted?\n",
    "1 = Izquierda\n",
    "2\n",
    "3\n",
    "4\n",
    "5\n",
    "6\n",
    "7\n",
    "8\n",
    "9\n",
    "10 = Derecha\n")
L1N. En esta escala de izquierda y derecha, ¿dónde se ecuentra usted?
 1 = Izquierda
 2
 3
 4
 5
 6
 7
 8
 9
 10 = Derecha
print(table(data_col$l1n, useNA = "ifany"))

   1    2    3    4    5    6    7    8    9   10 <NA> 
 151   78  126  134  382  121   99  106   56  148  102 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$l1n, useNA = "ifany")), 1)) 

   1    2    3    4    5    6    7    8    9   10 <NA> 
10.0  5.2  8.4  8.9 25.4  8.1  6.6  7.1  3.7  9.8  6.8 

PN4 – Grado de satisfacción con la democracia

  • Tipo: Categórica ordinal
cat("PN4. En general, ¿usted diría que
está muy satisfecho(a),
satisfecho(a), insatisfecho(a) o
muy insatisfecho(a) con la
forma en que la democracia
funciona en Colombia?\n",
    "1 = Muy satisfecho\n",
    "2 = Satisfecho\n",
    "3 = Insatisfecho\n",
    "4 = Muy insatisfecho\n")
PN4. En general, ¿usted diría que
está muy satisfecho(a),
satisfecho(a), insatisfecho(a) o
muy insatisfecho(a) con la
forma en que la democracia
funciona en Colombia?
 1 = Muy satisfecho
 2 = Satisfecho
 3 = Insatisfecho
 4 = Muy insatisfecho
print(table(data_col$pn4, useNA = "ifany"))

   1    2    3    4 <NA> 
  61  372  740  266   64 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$pn4, useNA = "ifany")), 1)) 

   1    2    3    4 <NA> 
 4.1 24.8 49.2 17.7  4.3 

DEM30 – Percepción de si Colombia es una democracia

  • Tipo: Categórica dicotómica (nominal)
cat("DEM30. ¿En su opinión, Colombia es una democracia?\n\n",
    "1 = Sí\n",
    "2 = No\n\n")
DEM30. ¿En su opinión, Colombia es una democracia?

 1 = Sí
 2 = No
table(data_col$dem30, useNA = "ifany")

   1    2 <NA> 
 892  505  106 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$dem30, useNA = "ifany")), 1)

   1    2 <NA> 
59.3 33.6  7.1 

Variables sobre confianza institucional

B21 – Confianza en los partidos políticos

  • Tipo: Categórica ordinal
data_col$b21_recat <- case_when(
  data_col$b21 %in% c(1, 2) ~ "Nada",
  data_col$b21 %in% c(3, 4, 5) ~ "Poco",
  data_col$b21 %in% c(6, 7) ~ "Mucho",
  TRUE ~ NA_character_  # Para valores perdidos
)

data_col$b21_recat <- factor(data_col$b21_recat, 
                              levels = c("Nada", "Poco", "Mucho"))

cat("Variable recategorizada:\n")
Variable recategorizada:
print(table(data_col$b21_recat, useNA = "ifany"))

 Nada  Poco Mucho  <NA> 
  838   576    64    25 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$b21_recat, useNA = "ifany")), 1))

 Nada  Poco Mucho  <NA> 
 55.8  38.3   4.3   1.7 
cat("\nTabla cruzada (original vs recategorizada):\n")

Tabla cruzada (original vs recategorizada):
print(table(Original = data_col$b21, Recategorizada = data_col$b21_recat, useNA = "ifany"))
        Recategorizada
Original Nada Poco Mucho <NA>
    1     523    0     0    0
    2     315    0     0    0
    3       0  246     0    0
    4       0  220     0    0
    5       0  110     0    0
    6       0    0    42    0
    7       0    0    22    0
    <NA>    0    0     0   25

 B47A – Confianza en las elecciones

  • Tipo: Categórica ordinal
data_col$b47a_recat <- case_when(
  data_col$b47a %in% c(1, 2) ~ "Nada",
  data_col$b47a %in% c(3, 4, 5) ~ "Poco",
  data_col$b47a %in% c(6, 7) ~ "Mucho",
  TRUE ~ NA_character_
)

data_col$b47a_recat <- factor(data_col$b47a_recat, 
                               levels = c("Nada", "Poco", "Mucho"))

cat("Variable b47a recategorizada:\n")
Variable b47a recategorizada:
print(table(data_col$b47a_recat, useNA = "ifany"))

 Nada  Poco Mucho  <NA> 
  607   731   142    23 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$b47a_recat, useNA = "ifany")), 1))

 Nada  Poco Mucho  <NA> 
 40.4  48.6   9.4   1.5 
cat("\nTabla cruzada (original vs recategorizada):\n")

Tabla cruzada (original vs recategorizada):
print(table(Original = data_col$b47a, Recategorizada = data_col$b47a_recat, useNA = "ifany"))
        Recategorizada
Original Nada Poco Mucho <NA>
    1     362    0     0    0
    2     245    0     0    0
    3       0  287     0    0
    4       0  277     0    0
    5       0  167     0    0
    6       0    0    88    0
    7       0    0    54    0
    <NA>    0    0     0   23

 B32 – Confianza en la alcaldía

  • Tipo: Categórica ordinal
data_col$b32_recat <- case_when(
  data_col$b32 %in% c(1, 2) ~ "Nada",
  data_col$b32 %in% c(3, 4, 5) ~ "Poco",
  data_col$b32 %in% c(6, 7) ~ "Mucho",
  TRUE ~ NA_character_
)


data_col$b32_recat <- factor(data_col$b32_recat, 
                              levels = c("Nada", "Poco", "Mucho"))


cat("Variable b32 recategorizada:\n")
Variable b32 recategorizada:
print(table(data_col$b32_recat, useNA = "ifany"))

 Nada  Poco Mucho  <NA> 
  635   672   176    20 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$b32_recat, useNA = "ifany")), 1))

 Nada  Poco Mucho  <NA> 
 42.2  44.7  11.7   1.3 
cat("\nTabla cruzada (original vs recategorizada):\n")

Tabla cruzada (original vs recategorizada):
print(table(Original = data_col$b32, Recategorizada = data_col$b32_recat, useNA = "ifany"))
        Recategorizada
Original Nada Poco Mucho <NA>
    1     388    0     0    0
    2     247    0     0    0
    3       0  269     0    0
    4       0  237     0    0
    5       0  166     0    0
    6       0    0    95    0
    7       0    0    81    0
    <NA>    0    0     0   20

 B13 – Confianza en el Congreso Nacional

  • Tipo: Categórica ordinal
# Recategorizar la variable b13 en 3 niveles
data_col$b13_recat <- case_when(
  data_col$b13 %in% c(1, 2) ~ "Nada",
  data_col$b13 %in% c(3, 4, 5) ~ "Poco",
  data_col$b13 %in% c(6, 7) ~ "Mucho",
  TRUE ~ NA_character_
)

# Convertir a factor con orden
data_col$b13_recat <- factor(data_col$b13_recat, 
                              levels = c("Nada", "Poco", "Mucho"))

# Verificar la recategorización
cat("Variable b13 recategorizada:\n")
Variable b13 recategorizada:
print(table(data_col$b13_recat, useNA = "ifany"))

 Nada  Poco Mucho  <NA> 
  554   757   141    51 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$b13_recat, useNA = "ifany")), 1))

 Nada  Poco Mucho  <NA> 
 36.9  50.4   9.4   3.4 
cat("\nTabla cruzada (original vs recategorizada):\n")

Tabla cruzada (original vs recategorizada):
print(table(Original = data_col$b13, Recategorizada = data_col$b13_recat, useNA = "ifany"))
        Recategorizada
Original Nada Poco Mucho <NA>
    1     301    0     0    0
    2     253    0     0    0
    3       0  283     0    0
    4       0  267     0    0
    5       0  207     0    0
    6       0    0    89    0
    7       0    0    52    0
    <NA>    0    0     0   51

 B12 – Confianza en las Fuerzas Armadas

  • Tipo: Categórica ordinal
# Recategorizar la variable b12 en 3 niveles
data_col$b12_recat <- case_when(
  data_col$b12 %in% c(1, 2) ~ "Nada",
  data_col$b12 %in% c(3, 4, 5) ~ "Poco",
  data_col$b12 %in% c(6, 7) ~ "Mucho",
  TRUE ~ NA_character_
)

# Convertir a factor con orden
data_col$b12_recat <- factor(data_col$b12_recat, 
                              levels = c("Nada", "Poco", "Mucho"))

# Verificar la recategorización
cat("Variable b12 recategorizada:\n")
Variable b12 recategorizada:
print(table(data_col$b12_recat, useNA = "ifany"))

 Nada  Poco Mucho  <NA> 
  289   699   485    30 
cat("\nPorcentajes (%):\n")

Porcentajes (%):
print(round(100 * prop.table(table(data_col$b12_recat, useNA = "ifany")), 1))

 Nada  Poco Mucho  <NA> 
 19.2  46.5  32.3   2.0 
cat("\nTabla cruzada (original vs recategorizada):\n")

Tabla cruzada (original vs recategorizada):
print(table(Original = data_col$b12, Recategorizada = data_col$b12_recat, useNA = "ifany"))
        Recategorizada
Original Nada Poco Mucho <NA>
    1     153    0     0    0
    2     136    0     0    0
    3       0  154     0    0
    4       0  237     0    0
    5       0  308     0    0
    6       0    0   216    0
    7       0    0   269    0
    <NA>    0    0     0   30

Variables sobre condiciones económicas y de seguridad

SOCT2 – Situación económica del país en comparación con hace 12 meses

Tipo: Categórica ordinal

cat("SOCT2. ¿Considera usted que la
situación económica del país es
mejor, igual o peor que hace
doce meses?\n\n",
    "1 = Mejor\n",
    "2 = Igual\n",
    "3 = Peor\n\n")
SOCT2. ¿Considera usted que la
situación económica del país es
mejor, igual o peor que hace
doce meses?

 1 = Mejor
 2 = Igual
 3 = Peor
table(data_col$soct2, useNA = "ifany")

   1    2    3 <NA> 
 108  331 1058    6 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$soct2, useNA = "ifany")), 1)

   1    2    3 <NA> 
 7.2 22.0 70.4  0.4 

IDIO2 – Situación económica personal actual respecto al año anterior

  • Tipo: Categórica ordinal
cat("IDIO2. ¿Considera usted que su
situación económica actual es
mejor, igual o peor que la de
hace doce meses?\n\n",
    "1 = Mejor\n",
    "2 = Igual\n",
    "3 = Peor\n\n")
IDIO2. ¿Considera usted que su
situación económica actual es
mejor, igual o peor que la de
hace doce meses?

 1 = Mejor
 2 = Igual
 3 = Peor
table(data_col$idio2, useNA = "ifany")

   1    2    3 <NA> 
 190  548  763    2 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$idio2, useNA = "ifany")), 1)

   1    2    3 <NA> 
12.6 36.5 50.8  0.1 

VIC1EXT – Ha sido víctima de delincuencia en los últimos 12 meses

  • Tipo: Categórica dicotómica (nominal)
cat("VIC1EXT. ¿Ha sido
usted víctima de un robo, hurto,
agresión, fraude, chantaje,
extorsión, amenazas o algún
otro tipo de acto delincuencial
en los últimos 12 meses?\n\n",
    "1 = Sí\n",
    "2 = No\n\n")
VIC1EXT. ¿Ha sido
usted víctima de un robo, hurto,
agresión, fraude, chantaje,
extorsión, amenazas o algún
otro tipo de acto delincuencial
en los últimos 12 meses?

 1 = Sí
 2 = No
table(data_col$vic1ext
      , useNA = "ifany")

   1    2 <NA> 
 421 1081    1 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$vic1ext, useNA = "ifany")), 1)

   1    2 <NA> 
28.0 71.9  0.1 

AOJ11 – Sensación de seguridad en el barrio

  • Tipo: Categórica ordinal
cat("AOJ11. Hablando del lugar o el barrio
donde usted vive y pensando en
la posibilidad de ser víctima de
un asalto o robo, ¿usted se
siente muy seguro(a), algo
seguro(a), algo inseguro(a) o
muy inseguro(a)?\n\n",
    "1 = Muy seguro\n",
    "2 = Algo seguro\n",
    "3 = Algo inseguro\n",
    "4 = Muy inseguro\n\n")
AOJ11. Hablando del lugar o el barrio
donde usted vive y pensando en
la posibilidad de ser víctima de
un asalto o robo, ¿usted se
siente muy seguro(a), algo
seguro(a), algo inseguro(a) o
muy inseguro(a)?

 1 = Muy seguro
 2 = Algo seguro
 3 = Algo inseguro
 4 = Muy inseguro
table(data_col$aoj11, useNA = "ifany")

   1    2    3    4 <NA> 
 203  451  464  374   11 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$aoj11, useNA = "ifany")), 1)

   1    2    3    4 <NA> 
13.5 30.0 30.9 24.9  0.7 

AOJ12 – Confianza en que el sistema judicial castigará al culpable

Tipo: Categórica ordinal

cat("AOJ12. Si usted fuera víctima de un
robo o asalto, ¿cuánto confiaría
que el sistema judicial castigue
al culpable?\n\n",
    "1 = Mucho\n",
    "2 = Algo\n",
    "3 = Poco\n",
    "4 = Nada\n\n")
AOJ12. Si usted fuera víctima de un
robo o asalto, ¿cuánto confiaría
que el sistema judicial castigue
al culpable?

 1 = Mucho
 2 = Algo
 3 = Poco
 4 = Nada
table(data_col$aoj12, useNA = "ifany")

   1    2    3    4 <NA> 
 198  213  458  622   12 
cat("\nPorcentajes:\n")

Porcentajes:
round(100 * prop.table(table(data_col$aoj12, useNA = "ifany")), 1)

   1    2    3    4 <NA> 
13.2 14.2 30.5 41.4  0.8 

Análisis bivariado

theme_gtsummary_language(
  language = "es",
  decimal.mark = "."
)
Setting theme "language: es"
data_col |>
  select(vb2,q1tc_r, q2, edre,q10inc, ocup4a, ur, etid, pol1, l1n, pn4, dem30,b21_recat, b47a_recat, b32_recat, b13_recat, b12_recat, soct2, idio2, vic1ext, aoj11, aoj12) |> 
  tbl_summary(
    by = vb2,
    statistic = list(all_continuous() ~ "{mean} ({sd})"),
    missing = "no"
  )|>
  add_p() |>  
  add_overall() |>
  bold_p(t = 0.05)  
8 missing rows in the "vb2" column have been removed.
Característica Global
N = 1,4951
1
N = 9261
2
N = 5691
p-valor2
q1tc_r


>0.9
    1 746 (50%) 461 (50%) 285 (50%)
    2 742 (50%) 460 (50%) 282 (50%)
Edad 40 (15) 42 (15) 37 (15) <0.001
edre


0.001
    0 34 (2.3%) 18 (1.9%) 16 (2.8%)
    1 138 (9.2%) 85 (9.2%) 53 (9.3%)
    2 126 (8.4%) 70 (7.6%) 56 (9.9%)
    3 233 (16%) 132 (14%) 101 (18%)
    4 497 (33%) 294 (32%) 203 (36%)
    5 147 (9.9%) 97 (10%) 50 (8.8%)
    6 317 (21%) 228 (25%) 89 (16%)
Total de ingresos mensuales 806.4 (4.2) 806.6 (4.3) 806.1 (4.0) 0.070
ocup4a


0.024
    1 670 (45%) 410 (44%) 260 (46%)
    2 76 (5.1%) 55 (6.0%) 21 (3.7%)
    3 235 (16%) 148 (16%) 87 (15%)
    4 111 (7.4%) 54 (5.8%) 57 (10%)
    5 250 (17%) 159 (17%) 91 (16%)
    6 65 (4.4%) 46 (5.0%) 19 (3.4%)
    7 84 (5.6%) 52 (5.6%) 32 (5.6%)
ur


0.8
    1 1,179 (79%) 732 (79%) 447 (79%)
    2 316 (21%) 194 (21%) 122 (21%)
etid


0.077
    1 467 (33%) 273 (31%) 194 (36%)
    2 591 (42%) 380 (43%) 211 (39%)
    3 90 (6.3%) 62 (7.1%) 28 (5.1%)
    4 116 (8.2%) 62 (7.1%) 54 (9.9%)
    5 72 (5.1%) 43 (4.9%) 29 (5.3%)
    7 83 (5.8%) 55 (6.3%) 28 (5.1%)
pol1


<0.001
    1 119 (8.0%) 92 (9.9%) 27 (4.8%)
    2 244 (16%) 178 (19%) 66 (12%)
    3 536 (36%) 350 (38%) 186 (33%)
    4 593 (40%) 305 (33%) 288 (51%)
l1n


0.018
    1 151 (11%) 88 (10%) 63 (12%)
    2 78 (5.6%) 45 (5.2%) 33 (6.3%)
    3 124 (8.9%) 74 (8.5%) 50 (9.5%)
    4 133 (9.5%) 71 (8.2%) 62 (12%)
    5 382 (27%) 232 (27%) 150 (28%)
    6 121 (8.7%) 85 (9.8%) 36 (6.8%)
    7 99 (7.1%) 62 (7.1%) 37 (7.0%)
    8 105 (7.5%) 65 (7.5%) 40 (7.6%)
    9 55 (3.9%) 43 (5.0%) 12 (2.3%)
    10 147 (11%) 103 (12%) 44 (8.3%)
pn4


0.4
    1 61 (4.3%) 44 (4.9%) 17 (3.2%)
    2 371 (26%) 228 (25%) 143 (27%)
    3 735 (51%) 466 (52%) 269 (51%)
    4 266 (19%) 165 (18%) 101 (19%)
dem30


>0.9
    1 891 (64%) 563 (64%) 328 (64%)
    2 502 (36%) 316 (36%) 186 (36%)
b21_recat


0.7
    Nada 835 (57%) 524 (57%) 311 (56%)
    Poco 573 (39%) 349 (38%) 224 (40%)
    Mucho 64 (4.3%) 41 (4.5%) 23 (4.1%)
b47a_recat


0.6
    Nada 607 (41%) 376 (41%) 231 (42%)
    Poco 726 (49%) 449 (49%) 277 (50%)
    Mucho 142 (9.6%) 94 (10%) 48 (8.6%)
b32_recat


0.3
    Nada 631 (43%) 399 (43%) 232 (42%)
    Poco 670 (45%) 420 (46%) 250 (45%)
    Mucho 175 (12%) 100 (11%) 75 (13%)
b13_recat


0.12
    Nada 552 (38%) 358 (40%) 194 (36%)
    Poco 754 (52%) 453 (50%) 301 (56%)
    Mucho 141 (9.7%) 94 (10%) 47 (8.7%)
b12_recat


0.059
    Nada 289 (20%) 172 (19%) 117 (21%)
    Poco 695 (47%) 420 (46%) 275 (50%)
    Mucho 484 (33%) 322 (35%) 162 (29%)
soct2


0.037
    1 108 (7.3%) 79 (8.6%) 29 (5.1%)
    2 329 (22%) 196 (21%) 133 (23%)
    3 1,052 (71%) 648 (70%) 404 (71%)
idio2


0.2
    1 189 (13%) 127 (14%) 62 (11%)
    2 547 (37%) 327 (35%) 220 (39%)
    3 757 (51%) 472 (51%) 285 (50%)
vic1ext


0.6
    1 418 (28%) 263 (28%) 155 (27%)
    2 1,076 (72%) 663 (72%) 413 (73%)
aoj11


0.4
    1 202 (14%) 117 (13%) 85 (15%)
    2 451 (30%) 276 (30%) 175 (31%)
    3 462 (31%) 294 (32%) 168 (30%)
    4 369 (25%) 236 (26%) 133 (24%)
aoj12


0.002
    1 195 (13%) 115 (12%) 80 (14%)
    2 212 (14%) 115 (12%) 97 (17%)
    3 456 (31%) 273 (30%) 183 (33%)
    4 620 (42%) 419 (45%) 201 (36%)
1 n (%); Media (DE)
2 prueba chi cuadrado de independencia; Prueba de la suma de rangos de Wilcoxon
  • RESULTADO: Esta tabla evidencia que las variables significativas son: edad (q2), nivel de educación (edre), situación laboral (ocup4a), interés en la política (pol1), afiliación izquierda/derecha (l1n), opinión sobre la situación económica del país (soct2) y confianza en el sistema de justicia en caso ser víctima de la inseguridad (aoj12).

Data final:

data_col_final <- data_col |>
  select(
    vb2,        # Variable dependiente (votó o no)
    q2,         # Edad
    edre,       # Nivel de educación
    ocup4a,     # Situación laboral
    pol1,       # Interés en la política
    l1n,        # Afiliación izquierda/derecha
    soct2,      # Opinión sobre situación económica del país
    aoj12       # Confianza en sistema de justicia
  )

Exploración de data final

data_col |> 
  filter(!is.na(vb2) & !is.na(q2)) |> 
  ggplot()+
  aes(y= q2, color=vb2) + 
  geom_boxplot() +
  facet_wrap(~vb2)

library(vcd)
Cargando paquete requerido: grid
# Para edre
mosaic(~ edre + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs edre",
       shade = TRUE,
       legend = TRUE)

# Para ocup4a
mosaic(~ ocup4a + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs ocup4a",
       shade = TRUE,
       legend = TRUE)

# Para pol1
mosaic(~ pol1 + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs pol1",
       shade = TRUE,
       legend = TRUE)

# Para l1n
mosaic(~ l1n + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs l1n",
       shade = TRUE,
       legend = TRUE)

# Para soct2
mosaic(~ soct2 + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs soct2",
       shade = TRUE,
       legend = TRUE)

# Para aoj12
mosaic(~ aoj12 + vb2, data = data_col,
       main = "Gráfico de Mosaico: vb2 vs aoj12",
       shade = TRUE,
       legend = TRUE)

library(naniar)
data_col_final |> 
  vis_miss()

Modelado

Split de la data

library(tidymodels)
── Attaching packages ────────────────────────────────────── tidymodels 1.4.1 ──
✔ broom        1.0.9     ✔ rsample      1.3.1
✔ dials        1.4.2     ✔ tailor       0.1.0
✔ infer        1.0.9     ✔ tune         2.0.0
✔ modeldata    1.5.1     ✔ workflows    1.3.0
✔ parsnip      1.3.3     ✔ workflowsets 1.1.1
✔ recipes      1.3.1     ✔ yardstick    1.3.2
── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──
✖ scales::discard() masks purrr::discard()
✖ dplyr::filter()   masks stats::filter()
✖ recipes::fixed()  masks stringr::fixed()
✖ dplyr::lag()      masks stats::lag()
✖ yardstick::spec() masks readr::spec()
✖ recipes::step()   masks stats::step()
set.seed(2025)
split <- initial_split(data_col_final)
training_data <- training(split)
testing_data <- testing(split)

Creación de folds

folds <- vfold_cv(training_data, v= 10)
folds
#  10-fold cross-validation 
# A tibble: 10 × 2
   splits             id    
   <list>             <chr> 
 1 <split [1014/113]> Fold01
 2 <split [1014/113]> Fold02
 3 <split [1014/113]> Fold03
 4 <split [1014/113]> Fold04
 5 <split [1014/113]> Fold05
 6 <split [1014/113]> Fold06
 7 <split [1014/113]> Fold07
 8 <split [1015/112]> Fold08
 9 <split [1015/112]> Fold09
10 <split [1015/112]> Fold10

Creación de Workflow

En la receta nos aseguramos de realizar un preprocesamiento (imputación y dummies) que permita construir un mejor modelo.

lr_receta <- recipe(vb2~ ., data=training_data)|>
  # Imputar numéricas con la mediana
  step_impute_median(q2) |>  
  # Imputar categóricas con la moda
  step_impute_mode(edre, ocup4a, pol1,l1n, soct2, aoj12) |>  # Ajusta según tus variables categóricas
  # Opcional: Normalizar variables numéricas
  step_normalize(all_numeric_predictors()) |>
  # Opcional: Crear dummies para categóricas
  step_dummy(all_nominal_predictors())


lr_modelo <- logistic_reg() |> 
              set_engine("glm") |> 
              set_mode("classification")

lr_wf <- workflow() |> 
          add_model(lr_modelo) |> 
          add_recipe(lr_receta)

Entrenar modelo con CV

mis_metricas <- metric_set(accuracy, specificity, sensitivity, roc_auc)

lr_fit_cv<-lr_wf |> 
          fit_resamples(resamples = folds, 
                        metrics = mis_metricas,  
                        control = control_resamples(save_pred = TRUE, 
                                                    verbose = TRUE))
i Fold01: preprocessor 1/1
i Fold01: preprocessor 1/1, model 1/1
i Fold01: preprocessor 1/1, model 1/1 (predictions)
i Fold02: preprocessor 1/1
i Fold02: preprocessor 1/1, model 1/1
i Fold02: preprocessor 1/1, model 1/1 (predictions)
i Fold03: preprocessor 1/1
i Fold03: preprocessor 1/1, model 1/1
i Fold03: preprocessor 1/1, model 1/1 (predictions)
i Fold04: preprocessor 1/1
i Fold04: preprocessor 1/1, model 1/1
i Fold04: preprocessor 1/1, model 1/1 (predictions)
i Fold05: preprocessor 1/1
i Fold05: preprocessor 1/1, model 1/1
i Fold05: preprocessor 1/1, model 1/1 (predictions)
i Fold06: preprocessor 1/1
i Fold06: preprocessor 1/1, model 1/1
i Fold06: preprocessor 1/1, model 1/1 (predictions)
i Fold07: preprocessor 1/1
i Fold07: preprocessor 1/1, model 1/1
i Fold07: preprocessor 1/1, model 1/1 (predictions)
i Fold08: preprocessor 1/1
i Fold08: preprocessor 1/1, model 1/1
i Fold08: preprocessor 1/1, model 1/1 (predictions)
i Fold09: preprocessor 1/1
i Fold09: preprocessor 1/1, model 1/1
i Fold09: preprocessor 1/1, model 1/1 (predictions)
i Fold10: preprocessor 1/1
i Fold10: preprocessor 1/1, model 1/1
i Fold10: preprocessor 1/1, model 1/1 (predictions)
collect_metrics(lr_fit_cv,
                summarize = FALSE)
# A tibble: 40 × 5
   id     .metric     .estimator .estimate .config        
   <chr>  <chr>       <chr>          <dbl> <chr>          
 1 Fold01 accuracy    binary         0.714 pre0_mod0_post0
 2 Fold01 specificity binary         0.381 pre0_mod0_post0
 3 Fold01 sensitivity binary         0.914 pre0_mod0_post0
 4 Fold01 roc_auc     binary         0.737 pre0_mod0_post0
 5 Fold02 accuracy    binary         0.655 pre0_mod0_post0
 6 Fold02 specificity binary         0.372 pre0_mod0_post0
 7 Fold02 sensitivity binary         0.829 pre0_mod0_post0
 8 Fold02 roc_auc     binary         0.694 pre0_mod0_post0
 9 Fold03 accuracy    binary         0.694 pre0_mod0_post0
10 Fold03 specificity binary         0.436 pre0_mod0_post0
# ℹ 30 more rows
collect_metrics(lr_fit_cv)
# A tibble: 4 × 6
  .metric     .estimator  mean     n std_err .config        
  <chr>       <chr>      <dbl> <int>   <dbl> <chr>          
1 accuracy    binary     0.651    10  0.0146 pre0_mod0_post0
2 roc_auc     binary     0.646    10  0.0145 pre0_mod0_post0
3 sensitivity binary     0.825    10  0.0142 pre0_mod0_post0
4 specificity binary     0.358    10  0.0126 pre0_mod0_post0

Fit y evaluación

modelo_logistico_final <- lr_wf |> last_fit(split, metrics = mis_metricas)
collect_predictions(modelo_logistico_final)
# A tibble: 376 × 7
   .pred_class .pred_1 .pred_2 id               vb2    .row .config        
   <fct>         <dbl>   <dbl> <chr>            <fct> <int> <chr>          
 1 1             0.773  0.227  train/test split 1         6 pre0_mod0_post0
 2 1             0.510  0.490  train/test split 1         7 pre0_mod0_post0
 3 1             0.855  0.145  train/test split 1         9 pre0_mod0_post0
 4 2             0.356  0.644  train/test split 2        12 pre0_mod0_post0
 5 1             0.683  0.317  train/test split 2        14 pre0_mod0_post0
 6 1             0.687  0.313  train/test split 1        17 pre0_mod0_post0
 7 1             0.927  0.0734 train/test split 1        21 pre0_mod0_post0
 8 1             0.787  0.213  train/test split 1        22 pre0_mod0_post0
 9 2             0.445  0.555  train/test split 2        24 pre0_mod0_post0
10 1             0.667  0.333  train/test split 1        28 pre0_mod0_post0
# ℹ 366 more rows
collect_metrics(modelo_logistico_final)
# A tibble: 4 × 4
  .metric     .estimator .estimate .config        
  <chr>       <chr>          <dbl> <chr>          
1 accuracy    binary         0.678 pre0_mod0_post0
2 specificity binary         0.404 pre0_mod0_post0
3 sensitivity binary         0.855 pre0_mod0_post0
4 roc_auc     binary         0.697 pre0_mod0_post0
collect_predictions(modelo_logistico_final) %>%
  conf_mat(truth=vb2, 
           estimate=.pred_class) |> 
  autoplot(type = "heatmap")

Interpretabilidad de la regresión logísitca

modelo_logistico_final$.workflow[[1]] |> 
  tidy()
# A tibble: 31 × 5
   term        estimate std.error statistic   p.value
   <chr>          <dbl>     <dbl>     <dbl>     <dbl>
 1 (Intercept)  -0.835     0.619     -1.35  0.177    
 2 q2           -0.323     0.0799    -4.04  0.0000542
 3 edre_X1      -0.379     0.497     -0.762 0.446    
 4 edre_X2      -0.0761    0.499     -0.152 0.879    
 5 edre_X3      -0.375     0.481     -0.780 0.435    
 6 edre_X4      -0.563     0.471     -1.20  0.232    
 7 edre_X5      -0.861     0.511     -1.69  0.0916   
 8 edre_X6      -1.03      0.484     -2.13  0.0330   
 9 ocup4a_X2    -0.269     0.323     -0.835 0.404    
10 ocup4a_X3    -0.147     0.195     -0.752 0.452    
# ℹ 21 more rows
modelo_logistico_final$.workflow[[1]] |> 
  tidy(exponentiate =TRUE)
# A tibble: 31 × 5
   term        estimate std.error statistic   p.value
   <chr>          <dbl>     <dbl>     <dbl>     <dbl>
 1 (Intercept)    0.434    0.619     -1.35  0.177    
 2 q2             0.724    0.0799    -4.04  0.0000542
 3 edre_X1        0.684    0.497     -0.762 0.446    
 4 edre_X2        0.927    0.499     -0.152 0.879    
 5 edre_X3        0.687    0.481     -0.780 0.435    
 6 edre_X4        0.570    0.471     -1.20  0.232    
 7 edre_X5        0.423    0.511     -1.69  0.0916   
 8 edre_X6        0.356    0.484     -2.13  0.0330   
 9 ocup4a_X2      0.764    0.323     -0.835 0.404    
10 ocup4a_X3      0.864    0.195     -0.752 0.452    
# ℹ 21 more rows
contrasts(as.factor(data_col$vb2))
  2
1 0
2 1

Conclusiones:

Los resultados del modelo muestran que las personas sin ningún interés en la política presentan una probabilidad significativamente mayor de no votar, con un efecto estimado 2.85 veces superior respecto a quienes manifiestan alto interés. Esto confirma que el desinterés político constituye un factor determinante en la abstención electoral.

La edad también resulta una variable significativa: el coeficiente negativo (-0.32) indica que, a medida que aumenta la edad, disminuye la probabilidad de no votar en aproximadamente 28 %. En otras palabras, las personas mayores tienden a participar más activamente en los comicios que las más jóvenes.

Asimismo, quienes perciben que la situación económica del país se mantiene igual presentan una probabilidad 2.28 veces mayor de abstenerse, mientras que aquellos que consideran que la economía empeoró tienen 1.79 veces más probabilidad de no votar que quienes creen que la economía ha mejorado. Este resultado sugiere que las percepciones de estancamiento o deterioro económico actúan como desincentivos para la participación electoral.

Por su parte, los individuos ubicados en el extremo derecho de la escala ideológica (coeficiente = -1.23) muestran 71 % menos probabilidad de abstenerse en comparación con quienes se identifican con la izquierda, lo que podría reflejar un mayor nivel de movilización política en este grupo.

Finalmente, las personas dedicadas a los quehaceres del hogar presentan un coeficiente negativo (-0.41), lo que implica que tienen 0.66 veces la probabilidad de no votar, es decir, 34 % menos propensión a la abstención en relación con quienes se encuentran trabajando. Este patrón podría asociarse con una mayor disposición a cumplir con el deber cívico pese a sus responsabilidades domésticas.

Además, parte de estos resultados contrastan con la literatura encontrada. Por un lado, pese a que existe literatura que sostiene que las variables de confianza institucional explican la participación electoral, los resultados evidencian una falta de significancia estadística de las mismas. Este un aspecto interesante que puede ser explorado.

Es meritorio mencionar que, pese a lo descrito en el párrafo anterior, la variable relacionada con la confianza en que el sistema judicial castigará al culpable en caso de ser vícitma de la delincia es considerada significativa por el modelo. Este hallazgo puede indicar que la confianza a las intituciones por parte de la ciudadanía está relacionada al accionar estatal frente a la problemática de la inseguridad ciudadana. Este es un detalle que también merece ser explorado.

Bibliografía

Brady, H. E., Verba, S., & Schlozman, K. L. (1995). Beyond SES: A resource model of political participation. The American Political Science Review, 89(2), 271–294. https://doi.org/10.2307/2082425

Campbell, A., Converse, P. E., Miller, W. E., & Stokes, D. E. (1960). The American voter. John Wiley & Sons.

Flórez, J. (2019). “Los factores determinantes del voto: por qué el voto obligatorio no es la solución al abstencionismo”. Opinión Jurídica, 18(37), 189-214. https://doi.org/10.21017/rev.repub.2019.v27.a73

Misión de Observación Electoral. (2018). Resultados electorales elecciones presidenciales: Primera y segunda vuelta 2018. https://www.moe.org.co/wp-content/uploads/2018/11/Resultados-Electorales-Elecciones-Presidenciales-2018_Digital.pdf

Misión de Observación Electoral. (2022). Resultados electorales elecciones presidenciales: Primera y segunda vuelta 2018. https://www.moe.org.co/wp-content/uploads/2018/11/Resultados-Electorales-Elecciones-Presidenciales-2018_Digital.pdf

Putnam, R. D. (2000). Bowling alone: The collapse and revival of American community. Simon & Schuster.