Nothing
## Generalized (non-normal) likelihood support for NPAG. The npag Psi sums the
## inner per-observation llikObs, which for a non-normal endpoint is exactly the
## user's log-likelihood -- so the nonparametric objective is already correct.
## The residual/likelihood parameters (iniDf$err non-NA, e.g. a t-distribution's
## df) are estimated with the same frozen-ODE bounded step as the residual params;
## the ODE freeze is valid because those parameters feed only the post-solve f/r,
## never the state derivatives. npb (Gibbs) still rejects non-normal endpoints.
## Real fit -> weekly slow batch.
nmTest({
.tMod <- function() {
ini({ tka <- log(1.5); tv <- log(32); tke <- fix(log(0.08)) # fixed: focus on the likelihood
eta.ka ~ 0.3; eta.v ~ 0.1; add.sd <- 0.7; nu <- 8 })
model({ ka <- exp(tka + eta.ka); v <- exp(tv + eta.v); ke <- exp(tke)
d/dt(depot) <- -ka * depot
d/dt(center) <- ka * depot - ke * center
cp <- center / v
cp ~ add(add.sd) + dt(nu) }) # Student-t residual: a general likelihood
}
test_that("est='npag' fits a generalized (Student-t) likelihood and estimates its params", {
f <- nlmixr2(.tMod, nlmixr2data::theo_sd, est = "npag",
control = npagControl(points = 48L, cycles = 8L, seed = 1L))
expect_s3_class(f, "nlmixr2FitData")
expect_true(is.finite(as.numeric(f$objf)))
# the t-distribution parameters (err-tagged: add / t) are estimated, not held
expect_true(as.numeric(f$theta[["add.sd"]]) > 0)
expect_true(as.numeric(f$theta[["nu"]]) > 0)
expect_false(isTRUE(all.equal(as.numeric(f$theta[["nu"]]), 8))) # moved off the start
# gamma is meaningless for a non-normal endpoint (r == 1) -> forced off
expect_false(isTRUE(f$control$npGammaOptimize))
# only err-tagged params are optimized (tke is fixed), so the ODE freeze is valid
expect_true(isTRUE(f$control$npResidFreeze))
})
test_that("est='npb' also fits a generalized (Student-t) likelihood", {
# npb sums the same per-observation llikObs as npag, so the Gibbs sweep handles
# a non-normal endpoint too (it just samples the mixing distribution rather than
# optimizing an err-tagged likelihood parameter).
f <- nlmixr2(.tMod, nlmixr2data::theo_sd, est = "npb",
control = npbControl(points = 20L, burnin = 15L, nsamp = 15L, seed = 1L))
expect_s3_class(f, "nlmixr2FitData")
expect_true(is.finite(as.numeric(f$objf)))
expect_equal(ncol(f$env$npbSupport), 2L) # eta.ka, eta.v support dimensions
})
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.