El «método delta», ahora con NIMBLE

NIMBLE ha sido uno de mis más recientes y provechosos descubrimientos. Mejor que hablar de él, que otros lo harán mejor y con más criterio que yo, lo usaré para replantear el problema asociado el método delta que me ocupó el otro día.

Casi autoexplicativo:

library(nimble)

src <- nimbleCode({ 
    T_half <- log(.5) / k 
    k ~ dnorm(-0.035, sd = 0.00195)
})

mcmc.out <- nimbleMCMC(code = src, constants = list(),
                       data = list(), inits = list(k = -0.035),
                       niter = 10000,
                       monitors = c("k", "T_half"))

out <- as.data.frame(mcmc.out)

# hist(out$T_half), sd(out$T_half), etc.

Cosas:

  • El código contenido en src se compila (vía C++) por eficiencia en algunos casos y lo contrario, como este, en otros. Aún no he visto la manera, aunque presuntamente es posible, de no tener que pasar por ello.
  • El método que ilustro se extiende naturalmente a expresiones más complejas, con varias variables, etc.
  • Eh, ¿y qué os parece NIMBLE tal como lo he presentado para simular datos?

5 comentarios sobre “El «método delta», ahora con NIMBLE

  1. Iñaki 3 febrero, 2020 12:38

    Pues como en el post anterior sobre el método delta, dependiendo de la aplicación, esto es matar moscas a cañonazos. Sí, se obtiene que sigma es 1.106377, mucho más fino que 1.1033 con Taylor, pero al final tenemos que el resultado es 20 ± 1, con ambos métodos.

  2. Carlos J. Gil Bellosta 3 febrero, 2020 21:54

    Es cierto, es matar moscas a cañonazos… Pero igual la complejidad podría esconderse de alguna manera tal que el «usuario» ni se diera cuenta de lo que está ocurriendo. De todos modos, aunque la inspiración para esta entrada tiene que ver con una discusión sobre el método delta, creo que lo que planteo es mucho más interesante para generar escenarios, conjuntos de datos de acuerdo con un modelo (posiblemente no lineal) determinado, etc. Y en ese universo, lo del método delta es casi solo un corolario.

  3. Iñaki 4 febrero, 2020 10:47

    En algún momento, me gustaría incorporar algo así como método de propagación al paquete «errors», como complemento al delta para aplicaciones más avanzadas. Pero habría que pensar bien el diseño, y la implementación tampoco es trivial. Algún día.

  4. Carlos J. Gil Bellosta 4 febrero, 2020 21:06

    Ayer no lo lo comenté en la respuesta por no alargarme. Hay un libro, «The flaw of averages» de Savage (hijo) donde entre otras cosas, el autor propone la creación de un «álgebra de distribuciones» que le permita operar con magnitudes que no son su media. En un caso simple, decir que, x ~ N(a,b). Y a x le suma otra cosa similar. Etc. Y obtener magnitudes derivadas que vuelven a ser distribuciones. De nuevo, es algo que va mucho más allá del método delta, pero lo que mostré es una manera de hacerlo, de alguna manera, operativo.

  5. Iñaki 5 febrero, 2020 11:49

    David Flater, que trabaja en el NIST, tiene una propuesta de arquitectura aquí. Ese es el objetivo a largo plazo. Para la parte de propagación de distribuciones, lo más cercano que hay ahora mismo podría ser el paquete «distr», pero es muy limitado: en cuanto intentas ir más allá de sumar dos normales, ya no lo soporta.

Los comentarios están desabilitados.