Log-likelihood (and by extension AIC and BIC) for log-normal models fit
with stats::lm(log(y) ~ ...) are computed with stats::dnorm(log(y), ...)
instead of with stats::dlnorm(y, ...), which makes comparing different
families difficult. This function is aimed at rectifying this. See examples.
Usage
logLik_lnorm(object, REML = FALSE)
AIC_lnorm(object, k = 2, REML = FALSE)
BIC_lnorm(object, REML = FALSE)Arguments
- object
- A fitted model object. The model must meet all of the following (will throw an error if not met): - A Gaussian likelihood with an identity link function. 
- The LHS of the model's formula must use the - log()function.
- No weights (not yet supported). 
 
- REML
- Only - FALSEsupported.
- k
- numeric, the penalty per parameter to be used; the default - k = 2is the classical AIC.
Examples
data("mtcars")
mtcars$mpg <- floor(mtcars$mpg)
model_lnorm <- lm(log(mpg) ~ factor(cyl), mtcars)
model_norm <- lm(mpg ~ factor(cyl), mtcars)
model_pois <- glm(mpg ~ factor(cyl), mtcars, family = poisson())
# No, that first one is wrong...
(aics <- AIC(model_lnorm, model_norm, model_pois))
#>             df       AIC
#> model_lnorm  4 -19.67061
#> model_norm   4 170.87527
#> model_pois   3 173.59104
aics[1, "AIC"] <- AIC_lnorm(model_lnorm)
aics # better!
#>             df      AIC
#> model_lnorm  4 168.5609
#> model_norm   4 170.8753
#> model_pois   3 173.5910
# Should support any model really... =====================
model_lnorm <- lme4::lmer(log(mpg) ~ factor(cyl) + (1 | gear), mtcars, REML = FALSE)
#> boundary (singular) fit: see help('isSingular')
model_norm <- lme4::lmer(mpg ~ factor(cyl) + (1 | gear), mtcars, REML = FALSE)
#> boundary (singular) fit: see help('isSingular')
model_pois <- lme4::glmer(mpg ~ factor(cyl) + (1 | gear), mtcars, family = poisson())
#> boundary (singular) fit: see help('isSingular')
# No, that first one is wrong...
(aics <- AIC(model_lnorm, model_norm, model_pois))
#>             df       AIC
#> model_lnorm  5 -17.67061
#> model_norm   5 172.87527
#> model_pois   4 175.59104
aics[1, "AIC"] <- AIC_lnorm(model_lnorm)
aics # better!
#>             df      AIC
#> model_lnorm  5 170.2152
#> model_norm   5 172.8753
#> model_pois   4 175.5910