[R-sig-ME] Anova()'s Wald chisquare test for predictors with df > 1 in a logistic GLMM
Fox, John
j|ox @end|ng |rom mcm@@ter@c@
Thu Apr 18 23:04:51 CEST 2019
Dear Juho,
Actually, for a main-effect-only model, there is no distinction between the "type-II" and "type-III" Wald tests computed by Anova(). It's only when there are terms (beyond the constant) related by marginality that the distinction arises.
Best,
John
> -----Original Message-----
> From: Juho Kristian Ruohonen [mailto:juho.kristian.ruohonen using gmail.com]
> Sent: Thursday, April 18, 2019 3:31 PM
> To: Fox, John <jfox using mcmaster.ca>
> Cc: Paul Johnson <paul.johnson using glasgow.ac.uk>; Shaul Oreg via R-sig-mixed-
> models <r-sig-mixed-models using r-project.org>
> Subject: Re: [R-sig-ME] Anova()'s Wald chisquare test for predictors with df > 1
> in a logistic GLMM
>
> I was talking type-II tests of a main-effects model all along, which I apologize
> for not specifying at the outset. Anyway, this is now resolved. Many thanks to
> John for weighing in and to Paul for the pedagogical code snippets! (And here I
> I was assuming that the multi-df Wald test would be as simple as the single-
> parameter one. Joke's on me.)
>
> Best,
>
> J
>
>
> to 18. huhtik. 2019 klo 19.58 Fox, John (jfox using mcmaster.ca
> <mailto:jfox using mcmaster.ca> ) kirjoitti:
>
>
> Dear Paul,
>
> The Wald() function suffices for the simple case you use, where there
> are no interactions. The trick in the more complex case of "type-II" tests for
> models with terms related by marginality is to generate the correct restriction
> matrix, which doesn't simply pick out certain coefficients.
>
> Best,
> John
>
> -------------------------------------------------
> John Fox, Professor Emeritus
> McMaster University
> Hamilton, Ontario, Canada
> Web: http::/socserv.mcmaster.ca/jfox
> <http://socserv.mcmaster.ca/jfox>
>
> > On Apr 18, 2019, at 12:18 PM, Paul Johnson
> <paul.johnson using glasgow.ac.uk <mailto:paul.johnson using glasgow.ac.uk> >
> wrote:
> >
> >> I'm trying to figure out how the Wald chi-square test is performed
> for a
> >> nominal predictor with more than two levels in the context of a
> logistic
> >> GLMM.
> >
> > Keep in mind that Wald tests and LRTs for GLMMs come with health
> warnings, e.g.
> > https://bbolker.github.io/mixedmodels-misc/glmmFAQ.html#tests-
> of-effects-i.e.testing-that-several-parameters-are-simultaneously-zero
> >
> >> But how are they calculated for a multi-level nominal predictor?
> >>
> >> My (un)educated guess is that for each level of the nominal
> variable, the
> >> z-score is squared and the sum of these squares compared to the
> right-tail
> >> probability of the chi-squared distribution with DF equal to the
> number of
> >> levels of the predictor minus one. And indeed this square-the-z
> approach
> >> seems to correctly reproduce the results of Anova() for predictors
> with a
> >> single degree of freedom. But I can't make it reproduce the results
> of
> >> Anova() for predictors with more than one level. Hence my
> question: how is
> >> the test statistic calculated?
> >
> > When the null hypothesis is that more than one fixed effect is zero
> (as with a factor with >2 levels), the covariances of the fixed effects have to be
> be taken into account. The Wald statistic is
> >
> > t(R %*% b) %*% solve(R %*% vc %*% t(R)) %*% (R %*% b)
> >
> > where R is a restriction matrix that picks out the contrasts you're
> interested in, b is the fixed effect estimates vector, and vc is the estimated
> covariance matrix of the fixed effects (and we’re assuming that as is usual the
> null hypothesis values of b are all zero). In the case where you’re testing a
> multilevel categorical variable, R %*% b is simply the vector of estimates for
> the k-1 non-reference levels and R %*% vc %*% t(R) is the k-1 X k-1 block of
> the covariance matrix for those k-1 fixed effects. If the covariances were all
> zero (e.g. by design — but I don’t think they can be for multilevel factors), the
> Wald statistic formula above would reduce to your sum of squares of z
> method.
> >
> > Below is an binomial glmer example with a Wald test function I
> found on the web years ago. It gives the same result as car::Anova but it’s
> easier to see the inner workings.
> >
> > Best wishes,
> > Paul
> >
> >
> > # wald z-test function
> > # (adapted from Stijn Ruiter's function
> http://stijnruiter.nl/blog/?p=309 - broken link)
> >
> > Wald<-
> > function(object, # lme4 or glmmTMB fit
> > R, # restrictions matrix. null hypothesis: R %*% fixef(object) = q
> > q = NULL, # null values. by default q is a vector of zeroes
> > gmmTMB.model = "cond")
> > {
> > require(lme4)
> > if (!is.matrix(R)) stop("Restrictions must be a matrix")
> > if(is.null(q)) q <- rep(0, nrow(R))
> > b <- fixef(object)
> > if(class(b) == "fixef.glmmTMB") b <- b[[gmmTMB.model]]
> > vc <- vcov(object)
> > if("vcov.glmmTMB" %in% class(vc)) vc <- vc[[gmmTMB.model]]
> > w <- t(R %*% b - q) %*% solve(R %*% vc %*% t(R)) %*% (R %*% b -
> q)
> > pw <- pchisq(w[1], length(q), lower.tail = FALSE)
> > cat("*************\n* Wald Test *\n*************\n")
> > cat("lme4 fixed effects:\n")
> > print(fixef(object))
> > cat("\nRestrictions:\n")
> > print(R)
> > cat("\nq = ",q)
> > cat("\nChi-square:", round(w[1],3), " df = ", length(q))
> > cat("\nProb x>chisq:", round(pw, 5), "\n")
> > return(pw)
> > }
> >
> >
> > # first example from ?glmer
> > library(lme4)
> > library(car)
> > (gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
> > data = cbpp, family = binomial))
> >
> >
> > R <- cbind(0, diag(3))
> > # ...but ideally you want to generate the restriction matrix
> automatically
> >
> > Wald(gm1, R = R)
> > anova(gm1, update(gm1, ~ . - period))
> > Anova(gm1)
> >
> >
> > _______________________________________________
> > R-sig-mixed-models using r-project.org <mailto:R-sig-mixed-models using r-
> project.org> mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>
>
More information about the R-sig-mixed-models
mailing list