Walther Hayro Bonifacio Guzmán
Código: 20222210
Curso: Estadística para el Análisis Político 2
Profesor: José Manuel Magallanes
Pontificia Universidad Católica del Perú - Fuente: Infogob (JNE) - n = 978 observaciones
El sistema político peruano se caracteriza por una marcada debilidad institucional de sus organizaciones partidarias. Desde la crisis de los partidos tradicionales en los años 90, el escenario electoral subnacional ha estado dominado por alta fragmentación, volatilidad y la proliferación de movimientos regionales de corta duración.
A partir de datos del Observatorio para la Gobernabilidad del JNE (Infogob), se construyó una base de 978 observaciones de partidos y movimientos que participaron en al menos una elección regional entre 2002 y 2022.
Pregunta de investigación
¿Qué factores explican la supervivencia de los partidos y movimientos políticos que participan en elecciones regionales en el Perú desde 2002?
Para medir la supervivencia de una organización política, necesitamos saber dos cosas: cuánto tiempo estuvo activa y si finalmente desapareció o no. Por eso se usan dos variables juntas:
Esta combinación es la base de cualquier modelo de supervivencia: no basta con saber cuánto duró algo, también hay que saber si el final ya ocurrió o si la historia sigue abierta.
Esta variable distingue entre dos formas de hacer política regional: un movimiento regional (1) es una organización que nace y compite solo en su región, sin estructura nacional; un partido nacional o alianza electoral (0) tiene presencia y estructura en todo el país.
Es relevante porque la literatura suele asumir que los movimientos regionales son más débiles e informales, al no tener el respaldo de una maquinaria partidaria nacional. El dato: el 62.1% de las organizaciones en la base son partidos nacionales o alianzas, y el 37.9% son movimientos regionales, es decir, casi 4 de cada 10 organizaciones que compiten en el ámbito regional peruano nacen exclusivamente ahí.
Mide el porcentaje de votos que obtuvo la organización en su debut electoral, su primera vez compitiendo en una elección regional. La idea detrás de incluir esta variable es simple: ¿un buen primer resultado ayuda a que una organización sobreviva más tiempo, como una señal temprana de respaldo ciudadano?
En promedio las organizaciones obtuvieron 9.19% de los votos en su debut, pero la mediana es bastante menor (5.42%), esto significa que unas pocas organizaciones con debuts muy altos jalan el promedio hacia arriba, mientras que la mayoría debutó con resultados modestos y poco competitivos.
Mide en cuántas regiones distintas compitió la organización el año de su debut, un número entre 1 (solo una región) y 25 (todas las regiones del Perú). Es una forma de medir presencia territorial: una organización que compite en muchas regiones desde el inicio probablemente tiene más estructura organizativa detrás, no solo un liderazgo local aislado.
En promedio las organizaciones compitieron en 7.52 regiones en su debut, aunque el rango es muy amplio, lo que refleja la enorme heterogeneidad entre organizaciones pequeñas, muy localizadas, y otras con ambición y estructura nacional desde el principio.
Indica si la organización llegó a ganar, es decir, obtener la mayor votación, en alguna elección regional a lo largo de todo el período (no solo en su debut). A diferencia de votos en la primera elección, esta variable captura el éxito electoral en cualquier momento de su historia, no solo al inicio.
Es, en teoría, el indicador más directo de consolidación: ganar una presidencia regional no solo es una señal de respaldo, sino que le da a la organización acceso real al poder y a recursos para seguir compitiendo después. El dato: apenas el 13% de las organizaciones logró ganar alguna vez; el 87% restante nunca ganó una sola elección regional en 20 años.
La probabilidad de supervivencia cae de 100% a 47% en el primer año. Solo el 8% de las organizaciones se mantiene activo durante los 20 años del período analizado.
Ambas curvas caen fuerte en el primer año y convergen a partir del año 12. El test de log-rank confirma que, vistas solas, estas curvas no difieren significativamente (p = 0.9), de ahí la necesidad del modelo de Cox con más variables de control.
Ganar es lo que consolida a una organización política en el sistema regional peruano, no llegar bien, sino llegar a la meta.
---
title: "Supervivencia de Partidos Políticos en el Perú (2002-2022)"
author: "Walther Hayro Bonifacio Guzmán"
output:
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: scroll
theme:
version: 4
bootswatch: flatly
source_code: embed
---
```{r setup, include=FALSE}
library(flexdashboard)
library(readxl)
library(dplyr)
library(ggplot2)
library(survival)
library(plotly)
library(DT)
library(knitr)
base_final <- read_excel("base_final_supervivencia.xlsx")
modelo_cox <- coxph(
Surv(duracion, evento) ~ tipo_org + voto_primera + n_regiones + gano_alguna_vez,
data = base_final
)
col_wine <- "#a13d4f"
col_teal <- "#1c7c72"
col_gold <- "#d99a3d"
col_blue <- "#2c6fa8"
col_grey <- "#8a8a8a"
```
```{css, echo=FALSE}
body {
background-color: #f6e4dc;
}
.navbar {
background-color: #a13d4f !important;
border-color: #a13d4f !important;
}
.navbar-brand, .navbar-nav > li > a {
color: #ffffff !important;
font-weight: 600;
}
.chart-box, .storyboard-nav {
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
border-radius: 8px;
}
.value-box {
border-radius: 8px;
}
h3.title {
font-weight: 700 !important;
}
```
Portada
=======================================================================
Row
-----------------------------------------------------------------------
###
<div style="text-align:center; padding-top:20px;">
<img src="logo-pucp.png" style="height:130px; margin-bottom:26px;">
<h1 style="font-size:50px; margin-bottom:10px; color:#a13d4f; font-weight:700;">Supervivencia de Partidos y Movimientos Políticos en el Perú</h1>
<h2 style="font-weight:normal; color:#666; margin-top:0; font-size:26px;">Elecciones Regionales, 2002-2022</h2>
<br>
<p style="font-size:24px;"><b>Walther Hayro Bonifacio Guzmán</b></p>
<p style="color:#666; margin-bottom:2px; font-size:18px;">Código: 20222210</p>
<p style="color:#666; font-size:18px;">Curso: Estadística para el Análisis Político 2</p>
<p style="color:#666; font-size:18px;">Profesor: José Manuel Magallanes</p>
<p style="color:#888; font-size:15px; margin-top:20px;">Pontificia Universidad Católica del Perú - Fuente: Infogob (JNE) - n = 978 observaciones</p>
</div>
Introduccion
=======================================================================
Row
-----------------------------------------------------------------------
### Contexto
<div style="font-size:16px; line-height:1.85;">
<p>El sistema político peruano se caracteriza por una marcada debilidad institucional de sus organizaciones partidarias. Desde la crisis de los partidos tradicionales en los años 90, el escenario electoral subnacional ha estado dominado por alta fragmentación, volatilidad y la proliferación de movimientos regionales de corta duración.</p>
<p>A partir de datos del Observatorio para la Gobernabilidad del JNE (Infogob), se construyó una base de 978 observaciones de partidos y movimientos que participaron en al menos una elección regional entre 2002 y 2022.</p>
</div>
Row {data-height=200}
-----------------------------------------------------------------------
###
<div style="background: linear-gradient(135deg, #a13d4f, #d99a3d); color:white; border-radius:10px; padding:30px 40px; text-align:center;">
<p style="font-size:14px; letter-spacing:1px; text-transform:uppercase; opacity:0.85; margin-bottom:10px;">Pregunta de investigación</p>
<p style="font-size:22px; font-weight:600; line-height:1.5; margin:0;">¿Qué factores explican la supervivencia de los partidos y movimientos políticos que participan en elecciones regionales en el Perú desde 2002?</p>
</div>
Variables
=======================================================================
Row {.tabset data-height=800}
-----------------------------------------------------------------------
### Variable dependiente
<div style="font-size:15px; line-height:1.85; margin-bottom:10px;">
<p>Para medir la supervivencia de una organización política, necesitamos saber dos cosas: cuánto tiempo estuvo activa y si finalmente desapareció o no. Por eso se usan dos variables juntas:</p>
<ul>
<li><b>Duración</b>: años entre su primera y su última participación electoral. Como las elecciones regionales son cada 4 años, solo puede tomar los valores 1, 4, 8, 12, 16 o 20.</li>
<li><b>Evento</b>: indica si la organización desapareció (1) o si sigue activa en 2022 (0). A esto se le llama censura en análisis de supervivencia, una organización que sigue activa no significa que nunca vaya a desaparecer, solo que no la vimos desaparecer dentro del período estudiado.</li>
</ul>
<p>Esta combinación es la base de cualquier modelo de supervivencia: no basta con saber cuánto duró algo, también hay que saber si el final ya ocurrió o si la historia sigue abierta.</p>
</div>
```{r}
p <- base_final %>%
mutate(Estado = ifelse(evento == 1, "Desapareció", "Sigue activa")) %>%
ggplot(aes(x = factor(duracion), fill = Estado)) +
geom_bar(position = "dodge") +
scale_fill_manual(values = c("Desapareció" = col_wine, "Sigue activa" = col_teal)) +
labs(x = "Duración (años)", y = "N° de organizaciones", fill = "Evento", title = "Distribución de duración según evento") +
theme_minimal(base_size = 13)
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
### Tipo de organización política
<div style="font-size:15px; line-height:1.85; margin-bottom:10px;">
<p>Esta variable distingue entre dos formas de hacer política regional: un movimiento regional (1) es una organización que nace y compite solo en su región, sin estructura nacional; un partido nacional o alianza electoral (0) tiene presencia y estructura en todo el país.</p>
<p>Es relevante porque la literatura suele asumir que los movimientos regionales son más débiles e informales, al no tener el respaldo de una maquinaria partidaria nacional. El dato: el 62.1% de las organizaciones en la base son partidos nacionales o alianzas, y el 37.9% son movimientos regionales, es decir, casi 4 de cada 10 organizaciones que compiten en el ámbito regional peruano nacen exclusivamente ahí.</p>
</div>
```{r}
tabla_tipo <- base_final %>%
mutate(Tipo = ifelse(tipo_org == 1, "Movimiento regional", "Partido nacional/Alianza")) %>%
count(Tipo) %>% mutate(Porcentaje = round(n/sum(n)*100,1))
p <- ggplot(tabla_tipo, aes(x = Tipo, y = n, fill = Tipo)) +
geom_col(width = 0.5) +
scale_fill_manual(values = c("Movimiento regional" = col_teal, "Partido nacional/Alianza" = col_gold)) +
labs(x = NULL, y = "N° de organizaciones", title = "Distribución por tipo de organización política") +
theme_minimal(base_size = 13) + theme(legend.position = "none")
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
### Votos en la primera elección
<div style="font-size:15px; line-height:1.85; margin-bottom:10px;">
<p>Mide el porcentaje de votos que obtuvo la organización en su debut electoral, su primera vez compitiendo en una elección regional. La idea detrás de incluir esta variable es simple: ¿un buen primer resultado ayuda a que una organización sobreviva más tiempo, como una señal temprana de respaldo ciudadano?</p>
<p>En promedio las organizaciones obtuvieron 9.19% de los votos en su debut, pero la mediana es bastante menor (5.42%), esto significa que unas pocas organizaciones con debuts muy altos jalan el promedio hacia arriba, mientras que la mayoría debutó con resultados modestos y poco competitivos.</p>
</div>
```{r}
p <- ggplot(base_final, aes(x = voto_primera)) +
geom_histogram(fill = col_gold, bins = 30, color = "white") +
labs(x = "Votos en la primera elección (%)", y = "N° de organizaciones", title = "Distribución de votos en la primera elección") +
theme_minimal(base_size = 13)
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
### Número de regiones en el debut
<div style="font-size:15px; line-height:1.85; margin-bottom:10px;">
<p>Mide en cuántas regiones distintas compitió la organización el año de su debut, un número entre 1 (solo una región) y 25 (todas las regiones del Perú). Es una forma de medir presencia territorial: una organización que compite en muchas regiones desde el inicio probablemente tiene más estructura organizativa detrás, no solo un liderazgo local aislado.</p>
<p>En promedio las organizaciones compitieron en 7.52 regiones en su debut, aunque el rango es muy amplio, lo que refleja la enorme heterogeneidad entre organizaciones pequeñas, muy localizadas, y otras con ambición y estructura nacional desde el principio.</p>
</div>
```{r}
p <- ggplot(base_final, aes(x = n_regiones)) +
geom_histogram(fill = col_blue, bins = 25, color = "white") +
labs(x = "Número de regiones en el debut", y = "N° de organizaciones", title = "Distribución de presencia territorial en el debut") +
theme_minimal(base_size = 13)
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
### Victorias electorales
<div style="font-size:15px; line-height:1.85; margin-bottom:10px;">
<p>Indica si la organización llegó a ganar, es decir, obtener la mayor votación, en alguna elección regional a lo largo de todo el período (no solo en su debut). A diferencia de votos en la primera elección, esta variable captura el éxito electoral en cualquier momento de su historia, no solo al inicio.</p>
<p>Es, en teoría, el indicador más directo de consolidación: ganar una presidencia regional no solo es una señal de respaldo, sino que le da a la organización acceso real al poder y a recursos para seguir compitiendo después. El dato: apenas el 13% de las organizaciones logró ganar alguna vez; el 87% restante nunca ganó una sola elección regional en 20 años.</p>
</div>
```{r}
tabla_gano <- base_final %>%
mutate(Gano = ifelse(gano_alguna_vez == 1, "Sí ganó", "Nunca ganó")) %>%
count(Gano) %>% mutate(Porcentaje = round(n/sum(n)*100,1))
p <- ggplot(tabla_gano, aes(x = Gano, y = n, fill = Gano)) +
geom_col(width = 0.5) +
scale_fill_manual(values = c("Sí ganó" = col_wine, "Nunca ganó" = col_grey)) +
labs(x = NULL, y = "N° de organizaciones", title = "Distribución según victorias electorales") +
theme_minimal(base_size = 13) + theme(legend.position = "none")
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
Kaplan-Meier
=======================================================================
Row {data-height=600}
-----------------------------------------------------------------------
### Curva de Kaplan-Meier general
```{r}
km <- survfit(Surv(duracion, evento) ~ 1, data = base_final)
km_df <- data.frame(time = km$time, surv = km$surv)
km_df <- rbind(data.frame(time = 0, surv = 1), km_df)
p <- ggplot(km_df, aes(x = time, y = surv)) +
geom_step(color = col_wine, linewidth = 1.4) +
geom_point(size = 2, color = col_wine) +
labs(x = "Años de supervivencia", y = "Probabilidad de supervivencia", title = "Organizaciones políticas en Perú (2002-2022)") +
ylim(0,1) +
theme_minimal(base_size = 15)
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
<div style="font-size:14.5px; color:#555; padding:6px 20px;">
La probabilidad de supervivencia cae de 100% a 47% en el primer año. Solo el 8% de las organizaciones se mantiene activo durante los 20 años del período analizado.
</div>
Row {data-height=600}
-----------------------------------------------------------------------
### Supervivencia según tipo de organización política
```{r}
km_tipo <- survfit(Surv(duracion, evento) ~ tipo_org, data = base_final)
km_df2 <- data.frame(
time = km_tipo$time, surv = km_tipo$surv,
tipo = rep(c("Partido nacional/Alianza", "Movimiento regional"), km_tipo$strata)
)
p <- ggplot(km_df2, aes(x = time, y = surv, color = tipo)) +
geom_step(linewidth = 1.4) +
geom_point(size = 2) +
scale_color_manual(values = c("Partido nacional/Alianza" = col_gold, "Movimiento regional" = col_teal)) +
labs(x = "Años de supervivencia", y = "Probabilidad de supervivencia", color = NULL) +
ylim(0,1) +
theme_minimal(base_size = 15) +
theme(legend.position = "top")
ggplotly(p, height = 480) %>% layout(margin = list(b = 90))
```
<div style="font-size:14.5px; color:#555; padding:6px 20px;">
Ambas curvas caen fuerte en el primer año y convergen a partir del año 12. El test de log-rank confirma que, vistas solas, estas curvas no difieren significativamente (p = 0.9), de ahí la necesidad del modelo de Cox con más variables de control.
</div>
Regresion de Cox
=======================================================================
Row {data-height=550}
-----------------------------------------------------------------------
### Hazard Ratios con intervalos de confianza al 95%
```{r}
hr <- exp(coef(modelo_cox))
ci <- exp(confint(modelo_cox))
pvals <- summary(modelo_cox)$coefficients[, "Pr(>|z|)"]
nombres_paper <- c(
tipo_org = "Tipo de organización",
voto_primera = "Votos en la primera elección",
n_regiones = "Número de regiones en el debut",
gano_alguna_vez = "Ganó alguna vez"
)
df_hr <- data.frame(
variable = nombres_paper[c("tipo_org","voto_primera","n_regiones","gano_alguna_vez")],
hr = round(hr,3), lower = round(ci[,1],3), upper = round(ci[,2],3), p = round(pvals,4)
)
df_hr$etiqueta <- paste0("HR = ", df_hr$hr)
p <- ggplot(df_hr, aes(x = hr, y = reorder(variable, hr), text = paste0(variable, " HR: ", hr, " (IC 95%: ", lower, "-", upper, ")"))) +
annotate("rect", xmin = -Inf, xmax = 1, ymin = -Inf, ymax = Inf, fill = col_teal, alpha = 0.06) +
annotate("rect", xmin = 1, xmax = Inf, ymin = -Inf, ymax = Inf, fill = col_wine, alpha = 0.06) +
geom_vline(xintercept = 1, linetype = "dashed", color = col_wine, linewidth = 1) +
geom_errorbarh(aes(xmin = lower, xmax = upper), height = 0.15, color = col_blue, linewidth = 1.3) +
geom_point(size = 5, color = col_blue) +
geom_text(aes(label = etiqueta), vjust = -1.6, size = 4.2, color = "#333333", fontface = "bold") +
labs(x = "Hazard Ratio (menor a 1 = protege, mayor a 1 = aumenta el riesgo)", y = NULL) +
theme_minimal(base_size = 15) +
theme(axis.text.y = element_text(face = "bold"))
ggplotly(p, tooltip = "text", height = 500) %>% layout(margin = list(b = 100, l = 200))
```
Row {data-height=150}
-----------------------------------------------------------------------
### Ganó alguna vez
```{r}
valueBox(paste0("-", round((1-hr["gano_alguna_vez"])*100,1), "% riesgo"), icon = "fa-trophy", color = col_wine)
```
### Tipo de organización
```{r}
valueBox(paste0("-", round((1-hr["tipo_org"])*100,1), "% riesgo"), icon = "fa-flag", color = col_teal)
```
### Número de regiones en el debut
```{r}
valueBox(paste0("-", round((1-hr["n_regiones"])*100,1), "% riesgo por región"), icon = "fa-map", color = col_blue)
```
### Votos en la primera elección
```{r}
valueBox("No significativo", icon = "fa-circle-question", color = col_grey)
```
Row {data-height=380}
-----------------------------------------------------------------------
### Interpretación de los Hazard Ratios
<div style="font-size:16px; line-height:1.9;">
<ul>
<li><b style="color:#a13d4f;">Ganó alguna vez</b> (HR = 0.582, p menor a 0.001): haber ganado al menos una presidencia regional reduce el riesgo de desaparecer en 41.8%, es el factor más influyente del modelo.</li>
<li><b style="color:#1c7c72;">Tipo de organización</b> (HR = 0.808, p menor a 0.05): los movimientos regionales tienen en promedio 19.2% menos riesgo de desaparecer que los partidos nacionales, un hallazgo contraintuitivo, ya que suelen considerarse organizaciones más débiles.</li>
<li><b style="color:#2c6fa8;">Número de regiones en el debut</b> (HR = 0.973, p menor a 0.001): por cada región adicional en la que compitió la organización en su debut, el riesgo de desaparecer se reduce en 2.7%.</li>
<li><b style="color:#8a8a8a;">Votos en la primera elección</b> (HR = 0.992, p = 0.09): no resulta estadísticamente significativa, un buen debut electoral no garantiza la permanencia de una organización.</li>
</ul>
</div>
Conclusiones
=======================================================================
Row {data-height=180}
-----------------------------------------------------------------------
###
<div style="background: linear-gradient(135deg, #a13d4f, #2c6fa8); color:white; border-radius:10px; padding:26px 40px; text-align:center; display:flex; align-items:center; justify-content:center;">
<p style="font-size:24px; font-weight:600; line-height:1.5; margin:0;">Ganar es lo que consolida a una organización política en el sistema regional peruano, no llegar bien, sino llegar a la meta.</p>
</div>
Row {data-height=200}
-----------------------------------------------------------------------
### 79.2%
```{r}
valueBox("79.2%", caption = "Desapareció antes de 2022", icon = "fa-arrow-trend-down", color = col_wine)
```
### -41.8%
```{r}
valueBox("-41.8%", caption = "Riesgo si ganó alguna vez", icon = "fa-trophy", color = col_teal)
```
### -19.2%
```{r}
valueBox("-19.2%", caption = "Riesgo si es movimiento regional", icon = "fa-flag", color = col_gold)
```
### -2.7%
```{r}
valueBox("-2.7%", caption = "Riesgo por cada región adicional", icon = "fa-map", color = col_blue)
```
Row
-----------------------------------------------------------------------
### Hallazgos principales
<div style="font-size:16px; line-height:1.9;">
<ul>
<li>El sistema político regional peruano está débilmente institucionalizado: 4 de cada 5 organizaciones desaparece.</li>
<li>Ganar una elección es el principal mecanismo de consolidación de una organización política en el sistema subnacional.</li>
<li>La presencia territorial amplia en el debut también protege frente a la desaparición.</li>
<li>Los movimientos regionales sobreviven más que los partidos nacionales, controlando por las demás variables.</li>
<li>Un buen debut electoral no garantiza la permanencia futura.</li>
</ul>
</div>