set.seed(238642)
d <- rnorm(1000, mean = 0, sd = 40)
d <- units::set_units(d[0 <= d], "m")
# Min info in model list to compute likelihood
ml <- list(
mf = model.frame(d ~ 1)
, likelihood = "halfnorm"
, expansions = 0
, w.lo = units::set_units(0, "m")
, w.hi = units::set_units(125, "m")
, outputUnits = units(units::set_units(1,"m"))
, x.scl = units::set_units(0,"m")
, g.x.scl = 1
, data = 1
)
attr(ml$data, "transType") <- "line"
class(ml) <- "dfunc"
nLL(log(40), ml)
# Another way, b/c we have pnorm()
ones <- matrix(1, nrow = length(d), ncol = 1)
l <- halfnorm.like(log(40), d, ones)
scaler <-(pnorm(units::drop_units(ml$w.hi)
, units::drop_units(ml$w.lo)
, sd = l$params) - 0.5) * sqrt(2*pi) * l$params
-sum(log(l$L.unscaled/scaler))
# A third way, b/c we have pnorm() and dnorm().
l2 <- dnorm(units::drop_units(d), mean = 0, sd = 40)
scaler2 <- pnorm(125, mean = 0, sd = 40) - 0.5
-sum(log(l2/scaler2))
Run the code above in your browser using DataLab