Modelando las tendencias de todos los candidatos simultáneamente.
Autor/a
Afiliación
Recetas Electorales
Análisis independiente
Fecha de publicación
16 de mayo de 2026
Fecha de última modificación
13 de junio de 2026
“A Gaussian process is a distribution over functions.” —Rasmussen & Williams
Introduciendo el Gaussiano
La Cazuela estimó tendencias con una regresión: para cada candidato, un intercepto y una pendiente en el tiempo. Eso captura dirección pero no forma: si un candidato primero cae y luego repunta, o si el cambio se acelera en las últimas semanas, la línea recta lo pierde.
El Gaussiano reemplaza esa línea recta con un Gaussian Process (GP): una distribución sobre funciones suaves que aprende la forma de la tendencia directamente de los datos. Curvatura, aceleración, rebotes —todo queda capturado.
Pero la innovación más importante es otra: los GPs de los candidatos están correlacionados. Si Claudia López gana terreno, ¿a quién le quita votos? ¿A Paloma Valencia? ¿A Fajardo? El modelo estima una matriz de correlación entre las trayectorias de todos los candidatos, revelando la dinámica competitiva de la carrera.
La ventaja del GP es visible en la siguiente gráfica Figura 1: las curvas ya no son líneas rectas. La región sombreada corresponde a la proyección hacia el futuro (sin efecto casa), donde la incertidumbre crece a medida que nos alejamos de los datos observados —comportamiento propio de un GP bien calibrado.
Fijamos la fecha de hoy para separar pasado y proyección.
2
Para cada punto de la grilla de predicción, resumimos el posterior de p_pred[j,k] (media e intervalos creíbles) por candidato.
3
Definimos el orden global de candidatos por su media posterior.
4
Filtramos desde el 1° de mayo y marcamos qué puntos son proyección futura (es_futuro).
5
Construimos los conjuntos de etiquetas para “hoy” y para el final de la proyección.
6
Gráfico base (fecha en X, color por candidato).
7
Bandas de incertidumbre: intervalo creíble del 95% y del 50%, con menor opacidad en la zona futura.
8
Líneas de tendencia: sólida en el pasado, punteada en la proyección, más la vertical de “hoy”.
9
Etiquetas de cada candidato al inicio (hoy) y al final (proyección).
10
Diamantes con el resultado real de la primera vuelta (31 de mayo).
11
Escalas: colores de marca, opacidad pasado/futuro, eje X de fechas.
12
Títulos, subtítulo (fecha de hoy) y nota de fuente.
13
Tema minimalista con tipografía de marca y fechas rotadas.
Figura 1: Tendencia GP por candidato: pasado y proyección a futuro
Evolución acumulada
La animación muestra cómo el GP actualiza las trayectorias a medida que se incorporan nuevas encuestas, con la proyección al 1° de junio.
Gaussiano: evolución acumulada de trayectorias GP
Valencia vs. De la Espriella: Proyecciones
Paloma Valencia y Abelardo de la Espriella compiten por el mismo electorado de derecha. El GP permite ver si sus trayectorias se cruzan —o si una de las dos consolida la ventaja de cara al 1° de junio.
Localizamos los índices de Paloma Valencia y De la Espriella y calculamos la probabilidad posterior P(Paloma > De la Espriella) en la proyección al 1° de junio.
2
Filtramos la trayectoria de ambos candidatos desde el 1° de mayo.
3
Construimos los conjuntos de etiquetas para “hoy” y para el final de la proyección.
4
Formateamos la fecha de la última encuesta para el subtítulo.
5
Gráfico base (fecha en X, color por candidato).
6
Bandas de incertidumbre: intervalo creíble del 95% y del 50%.
7
Líneas de tendencia (sólida pasado, punteada proyección) y la vertical de “hoy”.
8
Etiquetas de cada candidato al inicio y al final.
9
Anotación enriquecida con la probabilidad P(Paloma > De la Espriella).
10
Escalas: colores de marca, opacidad pasado/futuro y eje X de fechas.
11
Títulos, subtítulo y nota de fuente.
12
Tema minimalista con tipografía de marca y fechas rotadas.
Figura 2: Trayectoria GP y proyección: Paloma Valencia y Abelardo de la Espriella
Ver código
library(ggtext)draws_duo <- tibble::tibble(p_pv = draws_all[[paste0("p_pred[", J_pred, ",", k_pv, "]")]],p_adle = draws_all[[paste0("p_pred[", J_pred, ",", k_adle, "]")]]) |> tidyr::pivot_longer(cols =c(p_pv, p_adle),names_to ="candidato",values_to ="prop" ) |> dplyr::mutate(color_cand = dplyr::case_when( candidato =="p_pv"~"#63B9E9", candidato =="p_adle"~"#000066" ) )draws_duo |> ggplot2::ggplot(ggplot2::aes(x = prop, fill = color_cand)) + ggplot2::geom_density(alpha =0.55, color =NA) + ggplot2::scale_x_continuous(labels = scales::percent_format(accuracy =1)) + ggplot2::scale_fill_identity(guide ="legend",labels =c("#63B9E9"="Paloma Valencia", "#000066"="De la Espriella"),breaks =c("#63B9E9", "#000066") ) + ggtext::geom_richtext(data = tibble::tibble(x =Inf, y =Inf), ggplot2::aes(x = x, y = y,label =sprintf("<b>P(Paloma > De la Espriella, 1° junio) = <span style='color:#63B9E9'>%.1f%%</span></b>", prob_pv_gt_adle_gp *100 ) ),inherit.aes =FALSE,hjust =1.1,vjust =1.5,size =7,family ="news-cycle",fill ="#F8F9FA",color ="#212529",label.color =NA,label.padding = ggplot2::unit(c(0.4, 0.6, 0.4, 0.6), "lines") ) + ggplot2::labs(title ="Paloma Valencia vs. De la Espriella: distribuciones posteriores al 1° de junio",subtitle =paste0("Modelo Gaussiano estimado el ", fecha_ultima_encuesta," con ", dplyr::n_distinct(encuestas_2026$encuesta_id), " encuestas"),x ="% intención de voto proyectado",y ="Densidad",fill =NULL,caption ="Fuente: https://recetas-electorales.netlify.app/" ) + ggplot2::theme_minimal(base_size =24) + ggplot2::theme(text = ggplot2::element_text(family ="news-cycle"),panel.grid.minor = ggplot2::element_blank(),legend.position ="top" )
1
Construimos un tibble con las muestras posteriores proyectadas de Paloma Valencia y De la Espriella, en formato largo y con su color de marca.
2
Gráfico base con la densidad posterior de cada candidato.
3
Eje X en porcentaje y leyenda con los nombres por color.
4
Anotación enriquecida con la probabilidad P(Paloma > De la Espriella) al 1° de junio.
5
Títulos, subtítulo (fecha y número de encuestas) y nota de fuente.
6
Tema minimalista con tipografía de marca y leyenda arriba.
Figura 3: Distribuciones posteriores de Paloma Valencia y De la Espriella al 1° de junio (Gaussiano)
Diagnósticos
Escala de longitud del GP (\(\rho\)) y parámetros de concentración:
Seleccionamos del posterior los parámetros globales rho (escala de longitud del GP) y kappa (concentración) en formato de arreglo de cadenas.
2
Traceplots de rho y kappa: diagnostican la convergencia del muestreo MCMC.
TipÑapa: GausianoApp para explorar las tendencias
El Gaussiano viene con ñapa para explorar interactivamente el modelo de Proceso Gaussiano. Selecciona un candidato y un umbral de intención de voto para ver las tendencias y las probabilidades posteriores al 25 de mayo.
Receta Gaussiano
El Gaussiano reemplaza la regresión de Ajiaco2 y Cazuela con un Gaussian Process multivariado correlacionado, que es simultáneamente:
Suavizante: la tendencia de cada candidato puede tener cualquier forma suave —no solo una línea recta.
Predictivo: la estructura GP permite extrapolar con incertidumbre creciente hacia el futuro.
Correlacionado: la covarianza entre los GPs de diferentes candidatos captura la dinámica competitiva de la carrera.
El GP multivariado se implementa via el Linear Model of Coregionalization (LMC): la covarianza total es el producto de Kronecker entre la covarianza temporal (\(K_t\)) y la covarianza entre candidatos (\(\mathrm{diag}(\boldsymbol{\alpha})\,\Omega_{GP}\,\mathrm{diag}(\boldsymbol{\alpha})\)). Esto hace al modelo separable, permitiendo la parametrización no-centrada eficiente y el cómputo de la media posterior en la grilla de predicción vía \(\hat{f}_{\text{pred}} = K(t_*, t)\,K_t^{-1}\,f_{\text{obs}}\).
El GP multivariado proyectaba la tendencia alcista de ADLE y la bajada de Paloma Valencia con correlaciones entre candidatos vía el prior LKJ. La proyección al 31 de mayo subestimó el resultado final de ADLE (43.72%) — la señal estaba en la dirección correcta, pero no en la magnitud. Ver evaluación completa en Café.
Cómo citar
BibTeX
@online{recetas_electorales2026,
author = {{Recetas Electorales}},
title = {🌊 Gaussiano},
date = {2026-05-16},
url = {https://recetas-electorales.netlify.app/elecciones/2026-colombia/2026-05-16-gaussiano/2026-gaussiano.html},
langid = {es}
}