DEV Community

Cover image for t-hal-mle-native v0.0.1 — Implementación nativa en R del T-HAL-MLE
Fenix
Fenix

Posted on

t-hal-mle-native v0.0.1 — Implementación nativa en R del T-HAL-MLE

thalnative v0.0.1 — Implementación nativa en R del T-HAL-MLE

Auditoría y Reescritura de T-HAL-MLE: Una Implementación 100% Nativa en R con Cero Dependencias

El aprendizaje causal y los estimadores doblemente robustos, como T-HAL-MLE (Targeted Highly Adaptive Lasso Minimum Loss Estimation), son herramientas poderosas para estimar curvas dosis-respuesta continuas. Sin embargo, implementar estos métodos a menudo significa depender de una cadena de paquetes externos (glmnet, hal9001, haldensify) que actúan como "cajas negras", dificultando la auditoría matemática, la reproducibilidad y el despliegue en entornos restringidos.

Hace poco, me propuse un desafío: ¿Podemos implementar el núcleo de T-HAL-MLE usando exclusivamente R base y stats, sin sacrificar la fidelidad matemática al paper original?
La respuesta es sí. Presento thalnative, un paquete de R 100% nativo, auditado rigurosamente y con un pipeline de CI (Integración Continua) que garantiza su robustez.

¿Por qué construir esto?
Las implementaciones existentes son excelentes, pero dependen de compiladores externos (Fortran/C++) y heurísticas ocultas. Para una auditoría científica real, necesitamos:

Transparencia total: Ver exactamente cómo se construye la base HAL y cómo converge el LASSO.

Cero dependencias de runtime: Que el paquete funcione en cualquier instalación de R sin luchar con Rtools o compiladores del sistema.

Fidelidad al paper: Que las fórmulas en el código coincidan exactamente con las del artículo (arXiv:2607.03824v1 y van der Laan, 2023).

La Auditoría: Corrigiendo el Rumbo

El proceso no fue un simple "port" de código. Fue una auditoría matemática y de ingeniería que reveló varias discrepancias en los prototipos iniciales, las cuales fueron corregidas:

DGP (Data Generating Processes) exactos: Se reescribieron los simuladores para coincidir con la Tabla 1 del paper, incluyendo la confusión real (A | W ~ N(5 + 1.5W, 2²)) y la discontinuidad correcta en W.

Resolución de colinealidad en la base HAL: Se implementó un escalado interno estricto de las variables a [0,1] y se forzaron nudos (knots) estrictamente interiores. Esto elimina la colinealidad perfecta entre el intercepto, el término lineal de borde y los nudos extremos.

Curva de Influencia corregida: Se reescribió el cálculo del Lemma 3.1 para evaluar correctamente los residuos en las dosis observadas A_i (no en la grid de estimación) y se añadió la componente Q_W faltante.

LASSO nativo: Se implementó Coordinate Descent con warm starts y mantenimiento del residuo, logrando una convergencia estable y validada analíticamente.

Nuisances nativos: Sustitución de haldensify por una KDE por bins robusta para g(a|w), y uso de HAL bivariado con validación cruzada nativa para Q̄_n.

Uso en 30 segundos

Gracias a la eliminación de dependencias, la instalación es inmediata y el uso es intuitivo:
library(thalnative)

  1. Simular datos (DGP 1, tratamiento uniforme)
    set.seed(42)
    d <- simulate_data(n = 500, dgp = 1, treatment = "uniform")

  2. Ajustar el modelo completo (Targeting + Inferencia)
    res <- thal_fit(
    A = d$A, W = d$W, Y = d$Y,
    grid = seq(2, 8, length.out = 20),
    k_targeting = 1L, k_Q = 1L,
    n_knots_targeting = 50, n_knots_Q = 10,
    n_bins_g = 5,
    w_cap = NULL,
    seed = 123
    )

  3. Visualizar resultados con Intervalos de Confianza de Wald
    results <- data.frame(
    a = res$grid,
    psi_hat = res$psi_hat,
    lower = res$ci$lower,
    upper = res$ci$upper,
    truth = true_drc(res$grid, dgp = 1)
    )
    print(head(results))

Ingeniería de Software y Rigor

Un paquete estadístico no es nada sin tests. thalnative cuenta con 53 tests unitarios y de integración que pasan consistentemente, cubriendo:

Construcción de bases univariadas y bivariadas.
Convergencia del LASSO nativo.
Recuperación de funciones de nuisance conocidas.
El pipeline end-to-end con estimación de la curva de influencia.
Enter fullscreen mode Exit fullscreen mode

Además, el repositorio incluye un archivo SPEC/decisions.md. Creo firmemente que el código debe documentar no solo qué hace, sino por qué se tomaron ciertas decisiones de diseño (por ejemplo, por qué el truncamiento de pesos w_cap tiene un default específico, o cómo se resolvió la Q-17 sobre el hueco en el borde izquierdo).
El pipeline de GitHub Actions está configurado para ejecutarse en cada push, garantizando que ninguna contribución futura rompa la integridad matemática del paquete.
Enlaces y Próximos Pasos

Repositorio: github.com/amurlaniakea/t-hal-mle-native
Paper de referencia: arXiv:2607.03824v1 (T-HAL-MLE)
Base HAL: van der Laan (2023), arXiv:2301.13354
Enter fullscreen mode Exit fullscreen mode

Este proyecto es un work in progress hacia la versión 1.0.0. Las próximas iteraciones se centrarán en generar documentación formal con roxygen2 y explorar estimadores de densidad condicional aún más sofisticados dentro del ecosistema base de R.
¿Has trabajado con estimadores Targeted Learning? ¿Qué opinas del enfoque "zero-dependency" para paquetes estadísticos?

¡Déjame tu opinión en los comentarios!

Autor: Pedro Sordo Martínez
Licencia: AGPL-3.0-or-later

Referencias científicas (verificadas con arXiv y GitHub API)

  • arXiv:2607.03824v1 — T-HAL-MLE (Targeted Highly Adaptive Lasso Minimum Loss Estimation)
  • arXiv:2301.13354 — van der Laan (2023). Base HAL bivariada, términos de borde y definición de nudos.
  • https://github.com/amurlaniakea/thalmle — Implementación de referencia (dependiente de glmnet/hal9001).
  • Repositorio nativo: https://github.com/amurlaniakea/t-hal-mle-native (rama main, d683094 / c4c3edd según el ciclo de auditoría actual).

Instalación y verificación

git clone https://github.com/amurlaniakea/t-hal-mle-native.git
cd t-hal-mle-native
Rscript -e 'testthat::test_local(".")'
Enter fullscreen mode Exit fullscreen mode

El archivo README.md incluye instrucciones detalladas.
https://github.com/amurlaniakea/t-hal-mle-native

Top comments (0)