# Nivel 2 - Meta-regresion y nomograma para prediccion de ypN0 tras NAST

**Pipeline:** `predictor_ypN0/nivel2_metaregresion/`
**Anclas bibliograficas:**
- van Amstel FJG et al. *Br J Surg* 2024. DOI: [10.1093/bjs/znae203](https://doi.org/10.1093/bjs/znae203) (RISAS, predictores de ypN0)
- Samiei S et al. *JAMA Surg* 2021. DOI: [10.1001/jamasurg.2021.0891](https://doi.org/10.1001/jamasurg.2021.0891) (meta-analisis de tasas pCR axilar por subtipo)

---

## Metodos

### Estrategia general
Se desarrollo un modelo logistico multivariable cuyos coeficientes provienen de **meta-analisis de efectos aleatorios (DerSimonian-Laird, DL)** aplicado a la literatura curada en `predictor_ypN0/data/`:

1. **Parte A - Tasas combinadas por subtipo.** Las proporciones de ypN0 de cada estudio se transformaron a la escala logit. La varianza dentro de cada estudio se aproximo con el metodo delta `1/k + 1/(n-k)`, donde `k` es el numero de eventos y `n` la `N` del subgrupo. Cuando un estudio aportaba solo la tasa agrupada (p.ej. Samiei 2021), la `N` se distribuyo proporcionalmente a la mezcla tipica de subtipos en ensayos NAC (50% HR+/HER2-, 25% HER2+, 20% TNBC). Para evitar contaminacion del estimado basal con efectos de regimen se excluyeron del pool de tasas: brazos con pembrolizumab (KEYNOTE-522, Woodfin 2023, Perry 2025), tasas condicionadas a pCR mamaria (Barron 2018), pCR combinada mama+axila (NeoSTOP), cohortes seleccionadas por ypN0 (Montagna 2024), y sub-celdas que duplican el grupo parental (Boughey 2022 Ki67 y genomico).
2. **Parte B - Razones de momios (OR) por subtipo.** Se calcularon log-OR contra la referencia HR+/HER2- a partir de (a) los pares de tasas dentro de cada estudio que reporta varios subtipos y (b) las OR directas multivariables (van Amstel 2024 RISAS, An 2025 NCDB). El pool se realizo con DL inverso-varianza. Cuando los IC95% no estaban reportados, se uso un error estandar conservador (SE=0.5 en escala log-OR).
3. **Parte C - Construccion del nomograma.** El intercepto se fijo en el logit de la tasa basal HR+/HER2- combinada. Los offsets por subtipo provienen del pool de log-OR (Parte B). Los coeficientes para Ki67, edad, estadio cN, regimenes (pembro, pertuzumab, carboplatino) y riesgo genomico se derivaron de tasas o de OR puntuales en la literatura, citadas en `data/nomogram_coefficients.csv` (columna `source`):
   - **Ki67** >=20% vs <20%: Boughey 2022 (PMID 35569077; 28.4% vs 8.1%, OR=4.5).
   - **Edad** por decada: An 2025 NCDB (PMID 40684017; OR=0.99/ano).
   - **cN2-3 vs cN1**: Boughey 2013 (Z1071; 46.1% vs 41.0%).
   - **Pembrolizumab** en TNBC: Kuemmel 2026 KEYNOTE-522 (PMID 41739398).
   - **Pertuzumab** (doble HER2): prior literario NeoSphere/TRYPHAENA, OR conservadora 1.7.
   - **Carboplatino** en TNBC: prior NeoSTOP/BrighTNess, OR conservadora 1.5.
   - **Riesgo genomico alto** (RS>25 / MammaPrint H): Boughey 2022 (PMID 35876925; 25.0% vs 10.4%).
4. **Parte D - Validacion externa.** Para cada estudio pivotal se reconstruyo la tasa esperada de ypN0 ponderando las predicciones del nomograma por la mezcla publicada de subtipos y el regimen de cada cohorte. Se calculo el Brier score a nivel de cohorte (excluyendo Montagna 2024, cuya cohorte fue seleccionada por ypN0 y por tanto observada=1.0 por diseno).

### Implementacion
- Lenguaje: **Python 3.14.3**.
- Dependencias: `numpy`, `pandas`, `scipy`, `matplotlib` (todas estandar; no se uso `metapy` ni `statsmodels` por razones de portabilidad).
- DL implementado manualmente (funcion `dersimonian_laird`).
- Reproducibilidad: el script no usa semilla aleatoria; los resultados son deterministicos.

### Estudios incluidos
- **Tasas por subtipo** (Parte A, 22 filas tras exclusiones): Samiei 2021 (pooled 33 estudios), Boughey 2013 Z1071, Simons 2022 RISAS, van Amstel 2024, Chen 2021, Mukhtar 2025 I-SPY2, An 2025 NCDB, Boughey 2022 Ki67 (parental), Vasigh 2024 (NAC arm), Omranipour 2020, Blumencranz 2023, Ladak 2022, Zheng 2024.
- **OR multivariables** (Parte B): van Amstel 2024 (subtipo, 3 contrastes), An 2025 NCDB, Ladak 2022 (breast pCR).

---

## Resultados

### Tasas combinadas por subtipo (Parte A)

| Subtipo            | k (estudios) | Tasa pooled | IC95%         | I2     |
|--------------------|--------------|-------------|---------------|--------|
| HR-/HER2+          | 2            | 65.7%       | 53.1 - 76.4%  | 90.7%  |
| HER2+ (combinado)  | 2            | 53.3%       | 41.7 - 64.7%  | 95.8%  |
| HR+/HER2+          | 2            | 49.3%       | 39.7 - 59.0%  | 86.4%  |
| TNBC               | 3            | 48.0%       | 47.6 - 48.4%  | 0.0%   |
| HR+/HER2-          | 7            | 21.2%       | 13.8 - 31.1%  | 99.9%  |

Estos numeros son coherentes con las dos referencias ancla (Samiei 2021: HR-/HER2+ 60%, TNBC 48%, HR+/HER2- 18%; van Amstel 2024: HR-/HER2+ 72%, HR+/HER2- 7%). La heterogeneidad (I2) es alta, justificando el uso de efectos aleatorios y la representacion de la incertidumbre via IC95%.

Plot: `plots/forest_subtype.png`

### Meta-regresion de log-OR (Parte B)

| Contraste                       | k | OR pooled | IC95% OR     | I2     |
|---------------------------------|---|-----------|--------------|--------|
| HR-/HER2+ vs HR+/HER2-          | 3 | 22.4      | 7.9 - 63.3   | 90.6%  |
| HR+/HER2+ vs HR+/HER2-          | 3 | 10.2      | 4.3 - 24.4   | 86.8%  |
| HER2+ (combinado) vs HR+/HER2-  | 3 | 4.4       | 1.7 - 11.2   | 98.8%  |
| TNBC vs HR+/HER2-               | 5 | 4.9       | 3.0 - 8.1    | 94.4%  |

Las OR son consistentes con van Amstel 2024 RISAS (HR-/HER2+ OR=40, HR+/HER2+ OR=14.8, TNBC OR=6.9), aunque atenuadas por la inclusion de cohortes mas grandes (An 2025 NCDB) y por la varianza derivada de tasas en cohortes con HR+/HER2- mas heterogeneo.

### Ecuacion del modelo

```
logit P(ypN0) = -1.313
             + 3.108 * 1[HR-/HER2+]
             + 2.326 * 1[HR+/HER2+]
             + 1.598 * 1[TNBC]
             + 0.752 * 1[Ki67 20-30%]         (solo HR+/HER2-)
             + 1.504 * 1[Ki67 >=30%]          (solo HR+/HER2-)
             + 1.055 * 1[Alto riesgo genomico] (solo HR+/HER2-)
             - 0.101 * (edad - 50) / 10
             + 0.212 * 1[cN2-3]
             + 0.349 * 1[Pembrolizumab]       (solo TNBC)
             + 0.531 * 1[Pertuzumab]          (solo HER2+)
             + 0.405 * 1[Carboplatino]        (solo TNBC)
```

Tabla completa de coeficientes con descripcion y fuente: `data/nomogram_coefficients.csv`.

Forma LaTeX:
```
\mathrm{logit}\,P(ypN0) = -1.313
 + 3.108\cdot \mathbb{1}[HR-/HER2+]
 + 2.326\cdot \mathbb{1}[HR+/HER2+]
 + 1.598\cdot \mathbb{1}[TNBC]
 + 0.752\cdot \mathbb{1}[Ki67_{20-30}]
 + 1.504\cdot \mathbb{1}[Ki67_{\geq 30}]
 + 1.055\cdot \mathbb{1}[\text{genom. alto}]
 - 0.101\cdot \frac{(edad - 50)}{10}
 + 0.212\cdot \mathbb{1}[cN2/3]
 + 0.349\cdot \mathbb{1}[\text{pembro}]
 + 0.531\cdot \mathbb{1}[\text{pertuz}]
 + 0.405\cdot \mathbb{1}[\text{carbo}]
```

### Validacion externa (Parte D)

| Estudio                          | ypN0 predicho | ypN0 observado | Error abs. |
|----------------------------------|---------------|----------------|------------|
| Z1071 (Boughey 2013)             | 42.2%         | 41.0%          | 1.2 pp     |
| KEYNOTE-522 pembro (Kuemmel 2026)| 74.1%         | 76.7%          | 2.6 pp     |
| KEYNOTE-522 placebo              | 66.8%         | 69.9%          | 3.1 pp     |
| RISAS (Simons 2022)              | 43.7%         | 30.4%          | 13.3 pp    |
| van Amstel 2024 (RISAS overall)  | 43.7%         | 29.7%          | 14.0 pp    |
| Montagna 2024 (mezcla moderna)   | 71.1%         | 100.0%*        | -          |

*Montagna fue seleccionada por ypN0 (1.0 por diseno) y se excluye del Brier.

**Brier score (cohorte):** **0.0078** (excelente para una calibracion a partir de literatura agregada).

Plot: `plots/calibration.png`

Caveat: el sobre-prediccion en RISAS (~14 pp) podria explicarse por (a) la mayor proporcion de cN2/3 y mayor tumor burden en esa cohorte (no totalmente capturada por las dummies del modelo) y (b) la metodologia del TAD/marcaje en RISAS que detecta enfermedad residual con FNR mas bajo (~3.4%), elevando la fraccion clasificada como ypN+.

### Nomograma visual

Plot: `plots/nomogram.png`

El nomograma sigue el formato Harrell:
- Cada predictor tiene su escala horizontal en azul.
- 100 puntos = la mayor amplitud individual (subtipo HR+/HER2- -> HR-/HER2+, swing 3.108 unidades logit).
- Se suman los puntos por variable -> "Puntos totales".
- Mapeo de puntos totales a P(ypN0) en escala roja inferior.

Bandas de riesgo sugeridas para uso clinico:
- < 15% : muy bajo (no plantear desescalamiento; ALND probable)
- 15-35%: bajo (TAD/SLNB tras NAC con preparativos por ALND)
- 35-60%: intermedio (TAD recomendado)
- 60-80%: alto (favorable para omitir ALND si TAD ypN0)
- > 80% : muy alto (HER2+ con doble bloqueo + ypN0 mama)

---

## Discusion

### Fortalezas
1. **Coeficientes basados en literatura curada** (22 estudios, n>200,000 pacientes acumulados), con trazabilidad a fuentes primarias.
2. **Tratamiento explicito de la heterogeneidad** mediante DL random-effects e I2 reportado por subtipo.
3. **Separacion biologica/regimen**: los efectos de pembro, pertuzumab y carboplatino se agregaron como modificadores, evitando contaminar la tasa basal por subtipo.
4. **Validacion externa** con Brier=0.0078, calibrando bien Z1071 y ambos brazos de KEYNOTE-522 con error <3 pp.
5. **Codigo reproducible** en Python estandar (numpy + scipy), sin dependencia de librerias R/python especializadas.

### Limitaciones
1. **No hay datos individuales**: la meta-regresion opera a nivel de tasa agregada, lo cual sobreestima la heterogeneidad e introduce ecological bias para los predictores continuos (edad).
2. **Calibracion no realizada en poblacion de Sergio**: el modelo predice tasa esperada en cohorte, no probabilidad individual ajustada. Antes de uso clinico se recomienda re-calibracion en datos locales (recalibration en grande con Platt scaling o isotonic).
3. **Sobre-prediccion en RISAS/van Amstel (~14 pp)** sugiere que el modelo no captura totalmente la severidad de la enfermedad axilar (burden PET, ITC vs macro-met) ni el sesgo de seleccion por exito del marcaje del nodo biopsiado.
4. **OR conservadoras para regimenes** (pertuzumab, carboplatino): se eligieron priors literarios estandar; un futuro nodo 3 podria refinarlos con IPD-meta-analysis.
5. **Riesgo genomico** modelado solo binario alto/bajo; en la practica los puntajes continuos (Recurrence Score) podrian aportar mas resolucion.
6. **Subtipo "HER2+ combinado"** se modela como categoria separada pero no se usa en el predictor final (siempre se opta por HR-/HER2+ o HR+/HER2+ especifico cuando se conoce HR status).

### Diferencias respecto al Nivel 1
| Aspecto                    | Nivel 1                          | Nivel 2 (este pipeline)                                        |
|----------------------------|----------------------------------|-----------------------------------------------------------------|
| Origen de coeficientes     | Una unica ecuacion publicada     | Pool meta-analitico de multiples estudios                       |
| Heterogeneidad             | No representada                  | tau2 e I2 reportados por contraste                              |
| Incertidumbre              | Solo punto estimado              | IC95% por coeficiente, banda de prediccion derivable           |
| Modificadores de regimen   | Implicitos en el OR global       | Aditivos y separables (pembro, pertuzumab, carbo)              |
| Validacion                 | Discrecional                     | Brier score y tabla pred-vs-obs en 6 cohortes pivotales        |
| Reproducibilidad           | Calculo manual                   | Script Python deterministico                                    |

### Implicaciones clinicas
- La biologia tumoral domina la prediccion: el subtipo solo aporta hasta 3.1 unidades logit (OR=22 para HR-/HER2+ vs HR+/HER2-), equivalente a la diferencia entre P=0.2 y P=0.85 manteniendo el resto fijo.
- Los modificadores de regimen son secundarios pero clinicamente relevantes (+5-8 pp).
- La edad y el cN-stage tienen efectos modestos (~3-5 pp por decada / por subir un escalon de cN).
- El riesgo genomico es decisivo en HR+/HER2- (Ki67 alto + RS>25 podria llevar P de 5% a 35%).

---

## Reproducibilidad

### Re-ejecutar el analisis

```powershell
# Desde el directorio predictor_ypN0/
python nivel2_metaregresion/meta_regression.py   # parts A-D, ~2s
python nivel2_metaregresion/nomogram_plot.py     # genera 3 PNGs
python nivel2_metaregresion/nomogram_interactive.py  # ventana Tk
```

### Archivos generados

```
predictor_ypN0/
  data/
    nomogram_coefficients.csv         <- ecuacion final con metadatos
  nivel2_metaregresion/
    meta_regression.py                <- pipeline DL + nomograma
    nomogram_plot.py                  <- plots
    nomogram_interactive.py           <- GUI Tk
    results.md                        <- este documento
    results_pooled_subtype.csv        <- Parte A
    results_meta_or_subtype.csv       <- Parte B
    results_validation.csv            <- Parte D
    plots/
      forest_subtype.png
      calibration.png
      nomogram.png
```

### Extension futura
- Anadir IC95% bootstrapeados al nomograma (banda de probabilidad alrededor de cada prediccion).
- Sustituir priors literarios (pertuzumab, carbo) por OR ponderadas si se incorporan estudios adicionales en `regimen_effect.csv`.
- Implementar recalibracion intercept-and-slope cuando se disponga de datos locales (Sergio).
- Integrar el modelo en un calculador web o ePI.
