# A halfnorm distance function
fit <- dfuncEstim(sparrowDf, dist~1, likelihood = "halfnorm")
nLL(fit$par, fit, 3)
fit$loglik
ESW(fit)[1]
# Another way, b/c we have pnorm()
d <- distances(fit)
ones <- matrix(1, nrow = length(d), ncol = 1)
l <- halfnorm.like(fit$par, d, ones)
esw <-(pnorm(units::drop_units(fit$w.hi)
, units::drop_units(fit$w.lo)
, sd = exp(l$params)) - 0.5) * sqrt(2*pi) * exp(l$params)
-sum(log(l$L.unscaled/esw))
# A third way, b/c we have pnorm() and dnorm().
l2 <- dnorm(units::drop_units(d), mean = 0, sd = exp(fit$par))
scaler <- pnorm(units::drop_units(fit$w.hi), mean = 0, sd = exp(fit$par)) - 0.5
-sum(log(l2/scaler))
Run the code above in your browser using DataLab