Analysis of Deviance for Vector Generalized Linear Model Fits
Compute an analysis of deviance table for one or more vector generalized linear model fits.
## S3 method for class 'vglm' anova(object, ..., type = c("II", "I", "III", 2, 1, 3), test = c("LRT", "none"), trydev = TRUE, silent = TRUE)
object, ... |
objects of class |
type |
character or numeric;
any one of the
(effectively three) choices given.
Note that |
test |
a character string,
(partially) matching one of
|
trydev |
logical; if |
silent |
logical; if |
anova.vglm
is intended to be similar to
anova.glm
so specifying a single object and type = 1
gives a
sequential analysis of deviance table for that fit.
By analysis of deviance, it is meant loosely
that if the deviance of the model is not defined or implemented,
then twice the difference between the log-likelihoods of two
nested models remains asymptotically chi-squared distributed
with degrees of freedom equal to the difference in the number
of parameters of the two models.
Of course, the usual regularity conditions are assumed to hold.
For Type I,
the analysis of deviance table has
the reductions in the residual deviance
as each term of the formula is added in turn are given in as
the rows of a table, plus the residual deviances themselves.
Type I or sequential tests
(as in anova.glm
).
are computationally the easiest of the three methods.
For this, the order of the terms is important, and the
each term is added sequentially from first to last.
The Anova()
function in car allows for testing
Type II and Type III (SAS jargon) hypothesis tests,
although the definitions used are not precisely that of SAS.
As car notes,
Type I rarely test interesting hypotheses in unbalanced designs.
Type III enter each term last, keeping all the other terms in the
model.
Type II tests,
according to SAS,
add the term after all other terms have been added
to the model except terms that contain the effect being tested;
an effect is contained in another effect if it can be derived by
deleting variables from the latter effect.
Type II tests are currently the default.
As in anova.glm
, but not as
Anova.glm()
in car,
if more than one object is specified, then
the table has a row for the
residual degrees of freedom and deviance for each model.
For all but the first model, the change in degrees of freedom and
deviance is also given. (This only makes statistical sense if the
models are nested.) It is conventional to list the models from
smallest to largest, but this is up to the user.
It is necessary to have type = 1
with more than one objects
are specified.
See anova.glm
for more details
and warnings.
The VGAM package now implements full likelihood models
only, therefore no dispersion parameters are estimated.
An object of class "anova"
inheriting from
class "data.frame"
.
See anova.glm
.
Several VGAM family functions implement distributions
which do not satisfying the usual regularity conditions needed for
the LRT to work. No checking or warning is given for these.
As car says, be careful of Type III tests because they violate marginality. Type II tests (the default) do not have this problem.
It is possible for this function to stop
when type = 2
or 3
, e.g.,
anova(vglm(cans ~ myfactor, poissonff, data = boxcar))
where myfactor
is a factor.
The code was adapted
directly from anova.glm
and Anova.glm()
in car
by T. W. Yee.
Hence the Type II and Type III tests do not
correspond precisely with the SAS definition.
anova.glm
,
stat.anova
,
stats:::print.anova
,
Anova.glm()
in car if car is installed,
vglm
,
lrtest
,
add1.vglm
,
drop1.vglm
,
lrt.stat.vlm
,
score.stat.vlm
,
wald.stat.vlm
,
backPain2
,
update
.
# Example 1: a proportional odds model fitted to pneumo. set.seed(1) pneumo <- transform(pneumo, let = log(exposure.time), x3 = runif(8)) fit1 <- vglm(cbind(normal, mild, severe) ~ let , propodds, pneumo) fit2 <- vglm(cbind(normal, mild, severe) ~ let + x3, propodds, pneumo) fit3 <- vglm(cbind(normal, mild, severe) ~ let + x3, cumulative, pneumo) anova(fit1, fit2, fit3, type = 1) # Remember to specify 'type'!! anova(fit2) anova(fit2, type = "I") anova(fit2, type = "III") # Example 2: a proportional odds model fitted to backPain2. data("backPain2", package = "VGAM") summary(backPain2) fitlogit <- vglm(pain ~ x2 * x3 * x4, propodds, data = backPain2) coef(fitlogit) anova(fitlogit) anova(fitlogit, type = "I") anova(fitlogit, type = "III")
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.