skip_if_not_installed("nonnest2")
test_that("get_loglikelihood - lm", {
x <- lm(Sepal.Length ~ Petal.Width + Species, data = iris)
ll <- loglikelihood(x, estimator = "ML")
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(sum(attributes(ll)$per_obs - nonnest2::llcont(x)), 0, tolerance = 1e-4, ignore_attr = TRUE)
# REML
ll <- loglikelihood(x, estimator = "REML")
ll2 <- stats::logLik(x, REML = TRUE)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
# With weights
x <- lm(Sepal.Length ~ Petal.Width + Species, data = iris, weights = Petal.Length)
ll <- loglikelihood(x, estimator = "ML")
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
# log-response
x <- lm(mpg ~ wt, data = mtcars)
expect_equal(as.numeric(get_loglikelihood(x)), -80.01471, tolerance = 1e-3)
x <- lm(log(mpg) ~ wt, data = mtcars)
expect_equal(as.numeric(get_loglikelihood(x)), 19.42433, tolerance = 1e-3)
expect_equal(as.numeric(get_loglikelihood(x, check_response = TRUE)), -75.21614, tolerance = 1e-3)
set.seed(123)
mtcars$wg <- abs(rnorm(nrow(mtcars), mean = 1))
x <- lm(mpg ~ wt, weights = wg, data = mtcars)
expect_equal(as.numeric(get_loglikelihood(x)), -82.03376, tolerance = 1e-3)
x <- lm(log(mpg) ~ wt, weights = wg, data = mtcars)
expect_equal(as.numeric(get_loglikelihood(x)), 18.4205, tolerance = 1e-3)
expect_equal(as.numeric(get_loglikelihood(x, check_response = TRUE)), -75.58669, tolerance = 1e-3)
# sqrt-response
x <- lm(sqrt(mpg) ~ wt, data = mtcars)
expect_equal(as.numeric(get_loglikelihood(x)), -7.395031, tolerance = 1e-3)
expect_equal(as.numeric(get_loglikelihood(x, check_response = TRUE)), -76.89597, tolerance = 1e-3)
})
test_that("get_loglikelihood - glm", {
x <- glm(vs ~ mpg * disp, data = mtcars, family = "binomial")
ll <- loglikelihood(x)
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(sum(attributes(ll)$per_obs - nonnest2::llcont(x)), 0, tolerance = 1e-4, ignore_attr = TRUE)
x <- glm(cbind(cyl, gear) ~ mpg, data = mtcars, weights = disp, family = binomial)
ll <- loglikelihood(x)
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
# Nonnest2 seems to be giving diffenrent results,
# which sums doesn't add up to base R's result... so commenting off
# expect_equal(sum(attributes(ll)$per_obs - nonnest2::llcont(x)), 0)
})
test_that("get_loglikelihood - (g)lmer", {
skip_if_offline()
skip_if_not_installed("lme4")
x <- lme4::lmer(Sepal.Length ~ Sepal.Width + (1 | Species), data = iris)
# REML
ll <- loglikelihood(x, estimator = "REML")
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
# ML
ll <- loglikelihood(x, estimator = "ML")
ll2 <- stats::logLik(x, REML = FALSE)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
# default
ll <- loglikelihood(x)
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
x <- lme4::glmer(vs ~ mpg + (1 | cyl), data = mtcars, family = "binomial")
ll <- loglikelihood(x, estimator = "REML") # no REML for glmer
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
expect_equal(attributes(ll)$df, attributes(ll2)$df, tolerance = 1e-4, ignore_attr = TRUE)
ll <- loglikelihood(x, estimator = "ML")
ll2 <- stats::logLik(x, REML = FALSE)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 1e-4, ignore_attr = TRUE)
skip_if_not_installed("httr")
model <- download_model("lmerMod_1")
skip_if(is.null(model))
expect_equal(
get_loglikelihood(model, estimator = "REML"),
logLik(model, REML = TRUE),
tolerance = 0.01,
ignore_attr = TRUE
)
expect_equal(
get_loglikelihood(model, estimator = "ML"),
logLik(model, REML = FALSE),
tolerance = 0.01,
ignore_attr = TRUE
)
model <- download_model("merMod_1")
skip_if(is.null(model))
expect_equal(
get_loglikelihood(model, estimator = "REML"),
logLik(model, REML = FALSE),
tolerance = 0.01,
ignore_attr = TRUE
)
expect_equal(
get_loglikelihood(model, estimator = "ML"),
logLik(model, REML = FALSE),
tolerance = 0.01,
ignore_attr = TRUE
)
})
test_that("get_loglikelihood - stanreg ", {
skip_on_cran()
skip_if_not_installed("rstanarm")
x <- rstanarm::stan_glm(Sepal.Length ~ Petal.Width, data = iris, refresh = 0)
ref <- lm(Sepal.Length ~ Petal.Width, data = iris)
ll <- loglikelihood(x)
ll2 <- loglikelihood(ref)
expect_equal(as.numeric(ll), as.numeric(ll2), tolerance = 2)
expect_equal(mean(abs(attributes(ll)$per_obs - attributes(ll2)$per_obs)), 0, tolerance = 0.1)
})
test_that("get_loglikelihood - ivreg", {
skip_if_not_installed("ivreg")
data("CigaretteDemand", package = "ivreg")
x <- ivreg::ivreg(log(packs) ~ log(rprice) + log(rincome) | salestax + log(rincome), data = CigaretteDemand)
ll <- loglikelihood(x)
expect_equal(as.numeric(ll), 13.26255, tolerance = 1e-3)
})
test_that("get_loglikelihood - plm", {
skip_if_not_installed("plm")
data("Produc", package = "plm")
x <- suppressWarnings(
plm::plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp,
data = Produc, index = c("state", "year")
)
)
ll <- loglikelihood(x)
expect_equal(as.numeric(ll), 1534.532, tolerance = 1e-3)
})
test_that("get_loglikelihood - iv_robust", {
skip_if_not_installed("estimatr")
x <- estimatr::iv_robust(mpg ~ gear + cyl | carb + wt, data = mtcars)
ll <- loglikelihood(x)
expect_equal(as.numeric(ll), -84.60057, tolerance = 1e-3)
})
test_that("get_loglikelihood - mgcv", {
skip_if_not_installed("mgcv")
x <- mgcv::gam(Sepal.Length ~ s(Petal.Width), data = iris)
ll <- insight::get_loglikelihood(x)
ll2 <- stats::logLik(x)
expect_equal(as.numeric(ll), -96.26613, tolerance = 1e-3)
# TODO: I'm not sure why this differes :/
# expect_equal(as.numeric(ll), as.numeric(ll2))
x <- mgcv::gamm(Sepal.Length ~ s(Petal.Width), random = list(Species = ~1), data = iris)
# Which one to get?
})
test_that("get_loglikelihood - gamm4", {
skip_if_not_installed("gamm4")
x <- gamm4::gamm4(Sepal.Length ~ s(Petal.Width), data = iris)
ll <- insight::get_loglikelihood(x)
# It works, but it's quite diferent from the mgcv result
expect_equal(as.numeric(ll), -101.1107, tolerance = 1e-3)
})
test_that("get_loglikelihood - Bernoulli with inversed levels", {
d <- mtcars
d$zero <- factor(d$vs, levels = c(0, 1))
d$ones <- factor(d$vs, levels = c(1, 0))
ml_zero <- glm(zero ~ mpg, family = binomial, data = d)
ml_ones <- glm(ones ~ mpg, family = binomial, data = d)
expect_equal(logLik(ml_zero), get_loglikelihood(ml_zero), ignore_attr = TRUE)
expect_equal(logLik(ml_ones), get_loglikelihood(ml_ones), ignore_attr = TRUE)
expect_equal(get_loglikelihood(ml_zero), get_loglikelihood(ml_ones), ignore_attr = TRUE)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.