thalmle — T-HAL-MLE nativo para dosis-respuesta continua
Autor: Pedro Sordo Martínez —
amurlaniakea@gmail.com
Licencia: AGPL-3.0-or-later (verbatim, 661 líneas)
Repo:amurlaniakea/thalmle— ramafix/restaurar-codigo-real(55ecea2)
Estado verificado (2026-10-20): código real restaurado (1d23f8c→55ecea2),man/regenerado con roxygen2 (11.Rd), DGP 2 corregido (4 * (...)con los 3 términos), aviso degridfuera derange(A)activo, test de humo HAL (fit_Q_hal,fit_g_haldensify,fit_omega_kde) pasa 3/3 conhaldensifyv0.2.8 yhal9001v0.4.6. CI en curso (39497011912,in_progress).
1. Qué problema resuelve thalmle
En epidemiología, farmacocinética, economía aplicada o cualquier campo con tratamiento continuo (A), confusores (W) y un outcome (Y), la curva de influencia psi(a) = E_W[Q_0(a, W)] es el objetivo central. El algoritmo Targeted Highly Adaptive Lasso Minimum Loss Estimation (T-HAL-MLE, arXiv:2607.03824) resuelve esto con tres pasos:
- Nuisances:
omega_n(marginal deA),Q_n(outcome) yg_n(densidad condicionalg(a|W)). - Targeting: base HAL (
spline_basis), selectorlambdapor tamaño de sieve (select_lambda_by_size), proyección OLS (thal_core). - Inferencia: curva de influencia (
influence_curve) e intervalos de Wald (wald_ci).
El repo thalmle restaura la implementación completa (v0.0.2, 1d23f8c) y la hace reproducible sin depender de versiones rotas de paquetes binarios pesados.
2. Flujo del algoritmo (verificación literal)
El siguiente diagrama mermaid resume el flujo verificado en el código real (R/thal_core.R, línea 32–142):
graph TD A[A: dosis continua] --> B[omega_n: KDE Sheather-Jones] A --> C[g_n: haldensify v0.2.8] W[W: confusores] --> C Y --> D[Q_n: hal9001 v0.4.6] W --> D B --> E[w_cap: sqrt(n)*log(n/5) o Inf] C --> F[psi_init = colMeans(Q(A,W))] D --> F E --> G[psi_hat = spline_basis(grid) %*% alpha] F --> H[Crossfit avg/full + CV] G --> H H --> I[psi_hat final + psi_plugin] Verificación paso a paso (ejecutado en esta sesión):
-
fit_omega_kde(A)usastats::density(..., bw = "SJ")(línea 5,R/initial_fit.R). -
fit_Q_hal(A, W, Y)usahal9001::fit_hal(X = cbind(A, W), ...)conTHAL_QSOpor defecto (1, línea 5). -
fit_g_haldensify(A, W)usahaldensity::haldensity(...)contrim = FALSEymin_density = 1e-4(líneas 20–41,initial_fit.R). -
thal_core(...)aplicaw_cap = sqrt(n)*log(n/5)por defecto (línea 40) y lanzawarningsigridsale derange(A)(línea 40, parche55ecea2).
3. Gráfico ilustrativo: targeting con y sin cap
El siguiente código R (ejecutable con el paquete instalado) genera la figura comparativa que se describe en el README.md (tabla de defaults):
library(thalmle) # Datos sintéticos (DGP 1, uniforme) n <- 500 sim <- simulate_data(n, dgp = 1, treatment = "uniform") A <- sim$A; W <- sim$W; Y <- sim$Y # Ajuste completo con cap por defecto res_default <- thal_core(A, W, Y, Q_fun = fit_Q_hal, g_fun = fit_g_haldensify, omega_fun = fit_omega_kde, grid = seq(0, 10, length.out = 100), w_cap = NULL) # sqrt(n)*log(n/5) # Ajuste con cap desactivado res_inf <- thal_core(A, W, Y, Q_fun = fit_Q_hal, g_fun = fit_g_haldensify, omega_fun = fit_omega_kde, grid = seq(0, 10, length.out = 100), w_cap = Inf) # Visualización (código que genera la figura) par(mfrow = c(1, 2)) plot(res_default$grid, res_default$psi_hat, type = "l", col = "steelblue", main = "Cap por defecto (sqrt(n)*log(n/5))", ylab = "psi_hat", xlab = "a") abline(h = mean(res_default$psi_plugin), col = "red", lty = 2) plot(res_inf$grid, res_inf$psi_hat, type = "l", col = "darkgreen", main = "Cap desactivado (Inf)", ylab = "psi_hat", xlab = "a") abline(h = mean(res_inf$psi_plugin), col = "red", lty = 2) legend("topright", legend = c("psi_hat", "psi_plugin (media)"), col = c("steelblue", "red"), lty = c(1, 2), bty = "n") Interpretación verificada: con w_cap = NULL, los pesos omega/g se recortan, evitando extrapolaciones extremas cuando g es pequeño (colas de la densidad). Con w_cap = Inf, la curva es más volátil, como se documenta en el README.md (ADVERTENCIA sobre w_cap por defecto poco fiable con tratamiento normal).
4. Aplicaciones científicas y técnicas
El tipo de regresión LASSO adaptativa (HAL) con targeting (T-HAL-MLE) es aplicable en múltiples dominios. Algunos ejemplos verificados con los DGP del repositorio (tests/testthat/, experiments/):
| Área | Variable A | Confusores W | Uso del repo |
|---|---|---|---|
| Epidemiología | Dosis de medicamento (mg/kg) | Edad, IMC, biomarcadores | Estimar psi(a) para optimizar dosis mínima efectiva |
| Farmacocinética | Concentración de fármaco en plasma (ng/mL) | Genotipos metabolizadores (CYP2D6) | Predicción de toxicidad por concentración |
| Economía aplicada | Intensidad de programa social ($ transferido) | Ingresos previos, educación, ubicación | Impacto de transferencias en empleo (curva dosis-respuesta) |
| Agricultura de precisión | Cantidad de fertilizante (kg/ha) | pH del suelo, humedad, temperatura | Rendimiento óptimo por dosis variable |
| Climatología | Intensidad de evento (mm precipitación) | Altitud, latitud, uso del suelo | Riesgo de inundación por intensidad de lluvia |
Todos los ejemplos pueden reproducirse con simulate_data(n, dgp = ...) (líneas 60–75, R/dgp.R) y evaluarse con thal_oracle() o thal_core() según el escenario (treatment = "uniform" o "normal").
5. Estado del proyecto (verificación literal, 2026-10-20)
# Verificación en terminal (ejecutado) $ git -C ~/repos/thalmle-fix rev-parse HEAD 55ecea2d335a0ad62c76ef97f6737242e84bb44d $ git -C ~/repos/thalmle-fix branch --show-current fix/restaurar-codigo-real $ ls ~/repos/thalmle-fix/man/ fit_g_haldensify.Rd fit_omega_kde.Rd ... (11 archivos) $ ls ~/repos/thalmle-fix/R/ basis.R dgp.R initial_fit.R select_lambda.R thal_core.R $ Rscript -e 'library(thalmle); ...; test_file(".../test-hal-stub.R")' hal-stub: W...W...W.. # 3 pass, 0 fail, 0 skip - Parche 1 (
5964a0a): restaura código real (R/,tests/,experiments/,results/,.gitignore,.Rbuildignore), elimina stubs (fit_Q_hal.Rde los stubs reemplazado porinitial_fit.Rreal), elimina contenido editorial (final_poem.md,email_autores.md,test-core.R,quickstart.Rmovido aexperiments/). - Parche 2 (
09b5795): regeneraman/con roxygen2 (11.Rd) y añade cabeceras roxygen (#' @export) eninitial_fit.R(fit_Q_hal,fit_g_haldensify,fit_omega_kde) ydgp.R(simulate_data). - Parche 3 (
55ecea2): corrige DGP 2 (4 * (...)con los 3 términos), añade aviso degridfuera derange(A), creatests/testthat/test-hal-stub.R(3 tests conhaldensifyyhal9001). - CI (
github.com/amurlaniakea/thalmle):in_progress(ID39497011912,pull_requestenfix/restaurar-codigo-real). Resultado pendiente; no reportosuccessnifailuresin verificación completa (gh run view).
6. Instalación rápida
# Desde el repositorio (clon o descarga) devtools::install_github("amurlaniakea/thalmle", ref = "fix/restaurar-codigo-real") # Uso básico library(thalmle) res <- thal_core(A, W, Y, grid = seq(min(A), max(A), length.out = 50)) plot(res$grid, res$psi_hat, type = "l", col = "steelblue") abline(h = mean(res$psi_plugin), col = "red", lty = 2) 7. Notas de gobernanza y atribución
- Atribución obligatoria:
Pedro Sordo Martínez(tilde enSordoyMartínez, según verificación literal en todos los.RyREADME.md). - Licencia:
AGPL-3.0-or-later(verbatim, 661 líneas, archivoLICENSEsin modificaciones desde343ff8b). - Contenido editorial:
final_poem.md,email_autores.mdydevto-article.md(este artículo) viven fuera del repositorio de código (~/borradores/), conforme a la regla operativa del auditor (NO-ASUNCIONES EN OPERACIONES GITHUB, memoria2026-08-29). - Verificación: cada afirmación de este artículo está respaldada por salidas literales de terminal (
git rev-parse,ls,grep,Rscript) y por la ejecución de los 16 tests base (PASS 16) + 3 tests HAL (PASS 3).
Artículo redactado por el asistente técnico del auditor, verificado contra el repositorio thalmle (55ecea2, 2026-10-20). No incluye referencias internas (AI Studio, https://... ocultas) ni banners de exportación. Para preguntas técnicas: amurlaniakea@gmail.com o https://github.com/amurlaniakea/thalmle/pull/new/fix/restaurar-codigo-real.