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,
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)
Simular datos (DGP 1, tratamiento uniforme)
set.seed(42)
d <- simulate_data(n = 500, dgp = 1, treatment = "uniform")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
)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.
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
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 deglmnet/hal9001). - Repositorio nativo:
https://github.com/amurlaniakea/t-hal-mle-native(ramamain,d683094/c4c3eddsegú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(".")'
El archivo README.md incluye instrucciones detalladas.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.