🍲 Cazuela

encuestas
dirichlet
multinomial
cmdstanr
random effects
lkj

El Ajiaco2 aumentado con tendencias y efectos de casas encuestadora

Autor/a
Afiliación

Recetas Electorales

Análisis independiente

Fecha de publicación

13 de abril de 2026

Fecha de última modificación

19 de mayo de 2026

“Don’t ask why you should use a multilevel model. Ask instead, Why not?.”
–Richard McElreath

Introduciendo la Cazuela

La Cazuela es una extensión del Ajiaco2 que incorpora covariables al modelo Dirichlet-Multinomial, de manera similar a un modelo lineal generalizado (GLM). Mientras que el Ajiaco2 estima una sola proporción pooled \(\mathbf{p}\) común a todas las encuestas, la Cazuela permite que las proporciones varíen en función de:

  1. Tendencia temporal: ¿Cómo ha cambiado el apoyo a cada candidato a lo largo del tiempo?
  2. Efecto casa encuestadora: ¿Cada encuestadora tiene un sesgo sistemático hacia o en contra de ciertos candidatos?

El resultado es un modelo que no solo estima el estado actual de las preferencias electorales sino que también captura la dinámica temporal y corrige por las diferencias sistemáticas entre encuestadoras.

Veamos los resultados de la Cazuela Figura 1:

Ver código
# Extraer p[j,k] para la encuesta más reciente ####
J <- cazuela_data$J
K <- cazuela_data$K
cand_names <- colnames(conteos_2026)

# Usar las proporciones de la última encuesta (más reciente en el tiempo)
cols_last <- paste0("p[", J, ",", 1:K, "]")
cazuela_fit |>
  posterior::as_draws_df() |>
  tibble::as_tibble() |>
  dplyr::select(dplyr::all_of(cols_last)) |>
  dplyr::rename_with(
    ~ paste0("p_", cand_names),
    .cols = dplyr::everything()
  ) |>
  tidyr::pivot_longer(cols = dplyr::everything(),
                      names_to = "candidato", values_to = "prop") |>
  dplyr::mutate(candidato = stringr::str_sub(candidato, start = 3L)) |>
  dplyr::group_by(candidato) |>
  dplyr::mutate(candidato_m = mean(prop), .group_by = "drop") |>
  # Nombres
  dplyr::left_join(
    candidatos_2026 |> dplyr::mutate(candidato = paste0("cand_", cod)),
    by = "candidato"
  ) |>
  # Quitar ruido
  dplyr::filter(!stringr::str_detect(candidato, "ruido")) |>
  ggplot2::ggplot(ggplot2::aes(x = prop, y = reorder(nombre, candidato_m))) +
  ggdist::stat_dist_slabinterval(
    ggplot2::aes(
      fill = color_cand,
      fill_ramp = ggplot2::after_stat(level)
      ),
    .width = c(0.5, 0.8, 0.95, 0.99),
    interval_alpha = 0.95,
    show.legend = c(fill = FALSE, fill_ramp = TRUE, size = FALSE)
  ) +
  ggdist::stat_pointinterval(
    ggplot2::aes(label = scales::percent(candidato_m, accuracy = 0.1)),
  geom = "label",
  .width = 0,
  vjust = -0.5,
  fill = "white",
  color = "black"
  )+
  ggplot2::scale_x_continuous(labels = scales::percent_format(accuracy = 1))+
  ggplot2::scale_y_discrete(labels = scales::label_wrap(20))+
  ggplot2::scale_fill_identity(na.translate = FALSE)+
  ggdist::scale_fill_ramp_discrete(
    name   = "Intervalo creíble",
    range  = c(0.25, 1),
    breaks = c(0.5, 0.8, .95, 0.99),
    labels = c("50%", "80%", "95%", "99%"),
    na.translate = FALSE
  )+
  ggplot2::labs(
    title = "Cazuela: Tendencias y efectos casa encuestadora",
    subtitle = paste0("Modelo probabilístico estimado ", Sys.Date(), " con ", dplyr::n_distinct(encuestas_2026$encuesta_id)," encuestas"),
    caption = "Fuente: https://recetas-electorales.netlify.app/",
    x = "Distribución posterior estimada, % intención de voto",
    y = NULL
  )+
  ggplot2::theme_minimal(base_size = 18) +
  ggplot2::theme(
    text = ggplot2::element_text(family = "news-cycle"),
    panel.grid.major.y = ggplot2::element_blank(),
    panel.grid.minor = ggplot2::element_blank(),
    legend.position = "none"
  )
Figura 1: Cazuela: Dirichlet-Multinomial con covariables

Valencia o De la Espriella? Competencia probabilística

Una ventaja del enfoque bayesiano es que las comparaciones directas entre candidatos son triviales: basta con calcular la fracción de draws en los que la proporción de un candidato supera la del otro.

Según la Cazuela a 19 Mayo 2026, la probabilidad posterior de que Paloma Valencia obtenga más votos que De la Espriella en primera vuelta es 0.0%.

Ver código
library(ggtext)

draws_comp |>
  tidyr::pivot_longer(
    cols = c(p_cand_pv, p_cand_adle),
    names_to = "candidato",
    values_to = "prop"
  ) |>
  dplyr::mutate(
    color_cand = dplyr::case_when(
      candidato == "p_cand_pv"   ~ "#63B9E9",
      candidato == "p_cand_adle" ~ "#000066"
    )
  ) |>
  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) = <span style='color:#63B9E9'>%.1f%%</span></b>",
        prob_pv_gt_adle * 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",
    subtitle = "Cazuela — encuesta más reciente, primera vuelta 2026",
    x        = "Distribución posterior estimada, % intención de voto",
    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"
  )
Figura 2: Distribuciones posteriores de Paloma Valencia y De la Espriella (encuesta más reciente).

Tendencia temporal

La gran ventaja de la Cazuela sobre el Ajiaco2 es que podemos visualizar cómo han cambiado las proporciones estimadas a lo largo del tiempo, corrigiendo por el efecto casa de cada encuestadora Figura 3.

Ver código
# Extraer p[j,k] para todas las encuestas ####
draws_all <- cazuela_fit |>
  posterior::as_draws_df() |>
  tibble::as_tibble()

# Construir data.frame largo con p[j,k] para cada draw y encuesta
p_draws <- purrr::map_dfr(1:J, function(j) {
  # Seleccionar columnas exactas p[j,1], p[j,2], ..., p[j,K]
  cols_j <- paste0("p[", j, ",", 1:K, "]")
  draws_all |>
    dplyr::select(dplyr::all_of(cols_j)) |>
    dplyr::rename_with(~ cand_names, .cols = dplyr::everything()) |>
    dplyr::mutate(.draw = dplyr::row_number(), .stan_idx = j)
}) |>
  dplyr::left_join(
    encuestas_meta |> dplyr::mutate(.stan_idx = dplyr::row_number()),
    by = ".stan_idx"
  ) |>
  dplyr::select(-".stan_idx") |>
  tidyr::pivot_longer(
    cols = dplyr::all_of(cand_names),
    names_to = "candidato",
    values_to = "prop"
  ) |>
  dplyr::mutate(cod = stringr::str_sub(candidato, start = 6L)) |>
  dplyr::left_join(candidatos_2026, by = c("cod")) |>
  dplyr::filter(cod != "ruido")

# Resumir por fecha y candidato
p_summary <- p_draws |>
  dplyr::group_by(fecha, nombre, color_cand, cod) |>
  dplyr::summarise(
    media = mean(prop),
    q025 = quantile(prop, 0.025),
    q975 = quantile(prop, 0.975),
    q25 = quantile(prop, 0.25),
    q75 = quantile(prop, 0.75),
    .groups = "drop"
  )

# Orden global de candidatos por media posterior (usado en todas las gráficas)
orden_candidatos <- p_summary |>
  dplyr::group_by(nombre) |>
  dplyr::summarise(media_global = mean(media), .groups = "drop") |>
  dplyr::arrange(dplyr::desc(media_global)) |>
  dplyr::pull(nombre)

p_summary |>
  dplyr::mutate(nombre = factor(nombre, levels = orden_candidatos)) |>
  ggplot2::ggplot(ggplot2::aes(x = fecha, y = media, color = color_cand, fill = color_cand)) +
  ggplot2::geom_ribbon(ggplot2::aes(ymin = q025, ymax = q975), alpha = 0.15, color = NA) +
  ggplot2::geom_ribbon(ggplot2::aes(ymin = q25, ymax = q75), alpha = 0.3, color = NA) +
  ggplot2::geom_line(linewidth = 1.2) +
  ggplot2::geom_point(size = 2.5) +
  ggplot2::scale_color_identity() +
  ggplot2::scale_fill_identity() +
  ggplot2::scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  ggplot2::facet_wrap(~ nombre, scales = "free_y", ncol = 3) +
  ggplot2::labs(
    title = "Cazuela: Tendencia temporal por candidato",
    subtitle = paste0("Intervalos creíbles del 50% y 95%, estimados con ", dplyr::n_distinct(encuestas_2026$encuesta_id), " encuestas"),
    caption = "Fuente: https://recetas-electorales.netlify.app/",
    x = NULL,
    y = "% intención de voto"
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    text = ggplot2::element_text(family = "news-cycle"),
    panel.grid.minor = ggplot2::element_blank(),
    strip.text = ggplot2::element_text(face = "bold", size = 14),
    legend.position = "none"
  )
Figura 3: Tendencia temporal estimada por la Cazuela

Efectos de casa

Cada encuestadora tiene un sesgo sistemático implícito. La Cazuela modela estos efectos de casa como un modelo multinivel de efectos aleatorios: cada vector \(\boldsymbol{\delta}_h \in \mathbb{R}^{K-1}\) se extrae de una distribución normal multivariada con matriz de covarianza estimada vía descomposición LKJ. Esto permite que el modelo aprenda si una encuestadora que sobreestima a un candidato tiende a subestimar a otro Figura 4.

Ver código
# Extraer delta[k, h] (nota: índices [k, h] en el modelo actualizado) ####
K_minus_1 <- K - 1
H <- cazuela_data$H

delta_draws <- draws_all |>
  dplyr::select(dplyr::matches("^delta\\[")) |>
  tidyr::pivot_longer(dplyr::everything(), names_to = "param", values_to = "value") |>
  dplyr::mutate(
    indices = stringr::str_extract(param, "\\[(.+)\\]", group = 1),
    k = as.integer(stringr::str_extract(indices, "^\\d+")),
    h = as.integer(stringr::str_extract(indices, "\\d+$")),
    encuestadora = house_levels[h],
    candidato = cand_names[k],
    cod = stringr::str_sub(candidato, start = 6L)
  ) |>
  dplyr::left_join(candidatos_2026, by = c("cod")) |>
  dplyr::filter(cod != "ruido")

delta_summary <- delta_draws |>
  dplyr::group_by(encuestadora, nombre, color_cand, cod) |>
  dplyr::summarise(
    media = mean(value),
    q025 = quantile(value, 0.025),
    q975 = quantile(value, 0.975),
    .groups = "drop"
  )

delta_summary |>
  dplyr::mutate(nombre = factor(nombre, levels = orden_candidatos)) |>
  ggplot2::ggplot(ggplot2::aes(x = media, y = encuestadora, color = color_cand)) +
  ggplot2::geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
  ggplot2::geom_pointrange(ggplot2::aes(xmin = q025, xmax = q975), size = 0.5) +
  ggplot2::scale_color_identity() +
  ggplot2::facet_wrap(~ nombre, scales = "free_x", ncol = 2) +
  ggplot2::labs(
    title = "Cazuela: Efectos de casa por encuestadora",
    subtitle = "Desviaciones multinivel (log-ratio), intervalos creíbles del 95%",
    caption = "Fuente: https://recetas-electorales.netlify.app/",
    x = "Efecto casa (log-ratio escala)",
    y = NULL
  ) +
  ggplot2::theme_minimal(base_size = 16) +
  ggplot2::theme(
    text = ggplot2::element_text(family = "news-cycle"),
    panel.grid.minor = ggplot2::element_blank(),
    strip.text = ggplot2::element_text(face = "bold", size = 14),
    legend.position = "none"
  )
Figura 4: Efectos de casa estimados por la Cazuela

El partial pooling en acción

La característica más poderosa del modelo multinivel es el shrinkage: cada encuestadora es un punto en el espacio de estimaciones y el modelo las “jala” hacia el centro según cuánta evidencia tiene. La animación Figura 5 muestra cómo se mueve cada casa encuestadora entre tres escenarios:

  1. Pooling completo: Todas colapsan al mismo punto, el promedio global.
  2. Sin pooling: Cada encuestadora se estimada de forma independiente.
  3. Partial pooling (Cazuela): El modelo jerárquico regula —las encuestadoras con pocas encuestas se encogen más hacia el centro que las que tienen varias muestras.
Figura 5: Pooling en la Cazuela

Correlación entre efectos de casa

El modelo estima explícitamente la matriz de correlación \(\Omega\) entre los efectos de casa de los candidatos usando un prior LKJ. Esto captura si las encuestadoras que sobreestiman a un candidato tienden a subestimar a otro Figura 6.

Ver código
# Extraer Omega[i,j] ####
omega_draws <- draws_all |>
  dplyr::select(dplyr::matches("^Omega\\[")) |>
  tidyr::pivot_longer(dplyr::everything(), names_to = "param", values_to = "value") |>
  dplyr::mutate(
    indices = stringr::str_extract(param, "\\[(.+)\\]", group = 1),
    i = as.integer(stringr::str_extract(indices, "^\\d+")),
    j = as.integer(stringr::str_extract(indices, "\\d+$"))
  ) |>
  dplyr::group_by(i, j) |>
  dplyr::summarise(media = mean(value), .groups = "drop") |>
  dplyr::mutate(
    cand_i = cand_names[i],
    cand_j = cand_names[j],
    cod_i = stringr::str_sub(cand_i, start = 6L),
    cod_j = stringr::str_sub(cand_j, start = 6L)
  ) |>
  dplyr::left_join(candidatos_2026 |> dplyr::select(cod, nombre), by = c("cod_i" = "cod")) |>
  dplyr::rename(nombre_i = nombre) |>
  dplyr::left_join(candidatos_2026 |> dplyr::select(cod, nombre), by = c("cod_j" = "cod")) |>
  dplyr::rename(nombre_j = nombre) |>
  dplyr::filter(!is.na(nombre_i), !is.na(nombre_j))

orden_corr <- orden_candidatos[orden_candidatos %in% unique(omega_draws$nombre_i)]

omega_draws |>
  dplyr::mutate(
    nombre_i = factor(nombre_i, levels = orden_corr),
    nombre_j = factor(nombre_j, levels = orden_corr)
  ) |>
  ggplot2::ggplot(ggplot2::aes(x = nombre_i, y = nombre_j, fill = media)) +
  ggplot2::geom_tile() +
  ggplot2::geom_text(ggplot2::aes(label = round(media, 2)), size = 3.5) +
  ggplot2::scale_fill_gradient2(low = "#2166AC", mid = "white", high = "#B2182B",
                       midpoint = 0, limits = c(-1, 1),
                       name = "Correlación") +
  ggplot2::scale_x_discrete(labels = scales::label_wrap(12)) +
  ggplot2::scale_y_discrete(labels = scales::label_wrap(12)) +
  ggplot2::labs(
    title = "Correlación entre efectos de casa",
    subtitle = "Matriz posterior media estimada con prior LKJ(2)",
    caption = "Fuente: https://recetas-electorales.netlify.app/",
    x = NULL, y = NULL
  ) +
  ggplot2::theme_minimal(base_size = 18) +
  ggplot2::theme(
    text = ggplot2::element_text(family = "news-cycle"),
    axis.text.x = ggplot2::element_text(angle = 45, hjust = 1),
    panel.grid = ggplot2::element_blank(),
    legend.position = "right"
  )
Figura 6: Matriz de correlación posterior de efectos de casa

Diagnósticos

El muestreo MCMC:

Ver código
bayesplot::mcmc_trace(cazuela_fit$draws(), pars = ggplot2::vars(matches("beta0_raw")))

Receta Cazuela

La Cazuela extiende el Ajiaco2 al permitir que las proporciones de candidatos varíen por encuesta como función de covariables. En lugar de un solo vector \(\mathbf{p}\) pooled, cada encuesta \(j\) tiene su propio \(\mathbf{p}_j\) construido a partir de un predictor lineal con función de enlace softmax, como en un GLM multinomial.

La novedad clave es que los efectos de casa se modelan como efectos aleatorios multinivel con una estructura de covarianza completa. Los vectores \(\boldsymbol{\delta}_h\) se extraen de una distribución normal multivariada cuya matriz de covarianza se descompone en desviaciones estándar por candidato (\(\boldsymbol{\sigma}_\delta\)) y una matriz de correlación (\(\Omega\)) con prior LKJ. Se usa la parametrización no-centrada (\(\boldsymbol{\delta}_h = \mathrm{diag}(\boldsymbol{\sigma}_\delta) \cdot L_\Omega \cdot \mathbf{z}_h\)) para mejorar la eficiencia del muestreo MCMC:

\[ \begin{aligned} &\textbf{Predictor lineal:}\\ &\eta_{jk} = \beta_{0k} + \beta_{1k} \cdot t_j + \delta_{k,h_j}, \quad k=1,\dots,K-1,\\ &\eta_{jK} = 0 \quad \text{(candidato de referencia)}.\\[6pt] &\textbf{Enlace:}\\ &\mathbf{p}_j = \mathrm{softmax}(\boldsymbol{\eta}_j).\\[6pt] &\textbf{Efectos aleatorios de casa (multinivel):}\\ &\boldsymbol{\delta}_h \sim \mathrm{Normal}_{K-1}(\mathbf{0},\; \Sigma), \quad h=1,\dots,H,\\ &\Sigma = \mathrm{diag}(\boldsymbol{\sigma}_\delta)\;\Omega\;\mathrm{diag}(\boldsymbol{\sigma}_\delta).\\[6pt] &\textbf{Parametrización no-centrada:}\\ &\boldsymbol{\delta}_h = \mathrm{diag}(\boldsymbol{\sigma}_\delta) \cdot L_\Omega \cdot \mathbf{z}_h, \quad \mathbf{z}_h \sim \mathrm{Normal}_{K-1}(\mathbf{0}, I).\\[6pt] &\textbf{Priors:}\\ &\beta_{0k} \sim \mathrm{Normal}(0, 2),\\ &\beta_{1k} \sim \mathrm{Normal}(0, 1),\\ &\sigma_{\delta,k} \sim \mathrm{Normal}^+(0, 1),\\ &L_\Omega \sim \mathrm{LKJ\_cholesky}(2),\\ &\kappa \sim \mathrm{LogNormal}(\log 200, 0.7).\\[6pt] &\textbf{Likelihood:}\\ &\mathbf{Y}_j \mid \mathbf{p}_j, \kappa \sim \mathrm{Dirichlet\text{-}Multinomial}(n_j, \kappa \mathbf{p}_j). \end{aligned} \]

Donde \(t_j\) es el tiempo centrado y escalado de la encuesta \(j\), \(h_j\) es el índice de la encuestadora, y \(L_\Omega\) es el factor Cholesky de la matriz de correlación \(\Omega\). El prior \(\mathrm{LKJ}(2)\) favorece correlaciones moderadas, lo que actúa como regularización contra matrices de correlación extremas.

Modelo

Ver código
data {
  int<lower=1> J;                     // encuestas
  int<lower=2> K;                     // candidatos
  int<lower=1> H;                     // encuestadoras
  array[J] int<lower=0> n;           // tamaño muestral
  array[J, K] int<lower=0> Y;        // conteos Y[j, k]
  vector[J] time;                     // covariable temporal (centrada)
  array[J] int<lower=1, upper=H> house; // índice de encuestadora
}

parameters {
  vector[K - 1] beta0_raw;           // intercepto (log-ratio vs candidato K)
  vector[K - 1] beta_time_raw;       // pendiente temporal (log-ratio vs K)

  // Efectos aleatorios de casa: multinivel con covarianza LKJ
  matrix[K - 1, H] z_delta;          // efectos estandarizados (non-centered)
  vector<lower=0>[K - 1] sigma_delta; // sd por candidato
  cholesky_factor_corr[K - 1] L_Omega; // factor Cholesky de correlación

  real<lower=0> kappa;                // concentración DM
}

transformed parameters {
  // Reconstruir efectos de casa: delta[,h] = diag(sigma) * L * z[,h]
  matrix[K - 1, H] delta;
  delta = diag_pre_multiply(sigma_delta, L_Omega) * z_delta;

  matrix[J, K] eta;
  for (j in 1:J) {
    for (k in 1:(K - 1)) {
      eta[j, k] = beta0_raw[k] + beta_time_raw[k] * time[j] + delta[k, house[j]];
    }
    eta[j, K] = 0;
  }

  array[J] simplex[K] p;
  for (j in 1:J) {
    p[j] = softmax(eta[j]');
  }
}

model {
  // Priors efectos fijos
  beta0_raw ~ normal(0, 2);
  beta_time_raw ~ normal(0, 1);

  // Priors multinivel para efectos de casa
  sigma_delta ~ normal(0, 1);
  L_Omega ~ lkj_corr_cholesky(2);
  to_vector(z_delta) ~ std_normal();

  // Prior concentración
  kappa ~ lognormal(log(200), 0.7);

  // Likelihood
  for (j in 1:J) {
    Y[j] ~ dirichlet_multinomial(kappa * to_vector(p[j]));
  }
}

generated quantities {
  array[J, K] int Y_rep;
  for (j in 1:J) {
    Y_rep[j] = dirichlet_multinomial_rng(kappa * to_vector(p[j]), n[j]);
  }

  // Matriz de correlación de efectos de casa
  corr_matrix[K - 1] Omega;
  Omega = multiply_lower_tri_self_transpose(L_Omega);
}

Comparación con el Ajiaco2

Ajiaco2 Cazuela
Proporciones Un solo \(\mathbf{p}\) pooled \(\mathbf{p}_j\) por encuesta
Tendencia temporal No Sí (\(\beta_{1k}\))
Efecto casa No Sí, multinivel con LKJ
Covarianza casa No \(\Sigma = \mathrm{diag}(\sigma)\,\Omega\,\mathrm{diag}(\sigma)\)
Parametrización Directa Non-centered (\(\mathbf{z}_h\))
Enlace Dirichlet prior directo Softmax (multinomial logit)
Parámetros \(K + 1\) \((K-1)(2 + H) + K + \binom{K-1}{2}\)
Interpretación Estado promedio Estado dinámico corregido
Ver código
cazuela_fit$summary(variables = c("beta0_raw", "beta_time_raw", "kappa"))
# A tibble: 11 × 10
   variable       mean   median      sd     mad       q5      q95  rhat ess_bulk
   <chr>         <dbl>    <dbl>   <dbl>   <dbl>    <dbl>    <dbl> <dbl>    <dbl>
 1 beta0_raw…   1.03     1.03    0.154   0.140    0.777    1.27   1.00     5730.
 2 beta0_raw…   0.452    0.453   0.207   0.188    0.117    0.777  1.00     5962.
 3 beta0_raw…   0.373    0.374   0.185   0.165    0.0711   0.671  1.00     6859.
 4 beta0_raw…  -1.37    -1.37    0.258   0.237   -1.80    -0.969  1.00     7737.
 5 beta0_raw…  -1.64    -1.64    0.194   0.171   -1.95    -1.33   1.00     9827.
 6 beta_time…   0.0266   0.0251  0.0739  0.0725  -0.0918   0.150  1.00     7886.
 7 beta_time…   0.0557   0.0549  0.0802  0.0776  -0.0738   0.190  1.00     7814.
 8 beta_time…  -0.0172  -0.0184  0.0827  0.0807  -0.151    0.121  1.00     7664.
 9 beta_time…  -0.178   -0.182   0.126   0.123   -0.379    0.0342 1.00    10541.
10 beta_time…   0.0576   0.0552  0.149   0.145   -0.184    0.306  1.000   14392.
11 kappa      235.     227.     68.8    65.2    136.     359.     1.00     3754.
# ℹ 1 more variable: ess_tail <dbl>

Cómo citar

BibTeX
@online{recetas_electorales2026,
  author = {{Recetas Electorales}},
  title = {🍲 Cazuela},
  date = {2026-04-13},
  url = {https://www.recetas-electorales.com/elecciones/2026-colombia/2026-04-13-cazuela/2026-cazuela.html},
  langid = {es}
}
Por favor, cita este trabajo como:
Recetas Electorales. 2026. “🍲 Cazuela.” April 13. https://www.recetas-electorales.com/elecciones/2026-colombia/2026-04-13-cazuela/2026-cazuela.html.