context("Influence functions")
test_that("GEE", {
require("geepack")
d <- lvm(y ~ x, ~ id) |>
distribution(~id, uniform.lvm(value=seq(1:20))) |>
sim(100, seed=1)
d0 <- d[order(d$id), ]
g <- geeglm(y ~ x, data=d0, id=d0$id)
V <- summary(g)$cov.scaled
g0 <- glm(y ~ x, data=d)
V0 <- vcov(estimate(g0, id = d$id))
testthat::expect_true(sum((V - V0)^2) < 1e-12)
})
test_that("merge, IC, estimate with 'id' argument", {
require("geepack")
d <- data.frame(id=c("a","a","b","b","b","b","c","c","d"),
id1=c("a","a","b1","b1","b2","b2","c","c","d"),
y=rnorm(9), x=rnorm(9))
d$id0 <- as.numeric(as.factor(d$id))
l <- glm(y ~ x, data=d)
V <- summary(geeglm(y ~ x, id=d$id0, data=d))$cov.scaled
V0 <- vcov(estimate(l, id=d$id))
testthat::expect_true(sum((V - V0)^2) < 1e-12)
e1 <- estimate(l, id=d$id1)
V1 <- vcov(estimate(e1, id=c(1,2,2,3,4)))
testthat::expect_true(sum((V - V1)^2) < 1e-12)
e <- merge(estimate(l), estimate(l), id=list(d$id, d$id1))
testthat::expect_true(sum((vcov(e1) - vcov(e)[3:4,3:4])^2) < 1e-12)
testthat::expect_true(sum((V1 - vcov(e)[1:2,1:2])^2) < 1e-12)
ee <- estimate(e, id=c(1,2,3,4,2,2))
VV <- vcov(ee)
testthat::expect_true(sum((VV[1:2,1:2] - V)^2) < 1e-12)
testthat::expect_true(sum((VV[3:4,3:4] - V)^2) < 1e-12)
})
test_that("negative binomial regression (glm.nb)", {
set.seed(1)
n <- 500
z <- rgamma(n, .5, .5)
x <- rnorm(n)
lam <- z * exp(x)
y <- rpois(n, lam)
m <- MASS::glm.nb(y ~ x)
testthat::expect_true(abs(lava:::logL.glm(m) - logLik(m)) < 1e-6)
p <- coef(m)+1
u1 <- as.vector(numDeriv::jacobian(function(p) lava:::logL.glm(m, p = p), p))
u2 <- score(m, p = p)
testthat::expect_true(sum((u1 - u2)^2) < 1e-6)
p <- coef(m)
u1 <- as.vector(numDeriv::jacobian(function(p) lava:::logL.glm(m, p = p), p))
u2 <- score(m, p = p)
testthat::expect_true(sum((u1 - u2)^2) < 1e-6)
})
test_that("quasipossion", {
set.seed(1)
n <- 500
z <- rgamma(n, .5, .5)
x <- rnorm(n)
lam <- z * exp(x)
y <- rpois(n, lam)
m1 <- glm(y ~ x, family=poisson)
m2 <- glm(y ~ x, family = quasipoisson)
i1 <- IC(m1)
i2 <- IC(m2)
testthat::expect_true(sum((i1 - i2)^2) < 1e-6)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.