vglm
fit or a variance-covariance matrix,
and preprocesses it for rcim
and
uninormal
so that quasi-variances can be computed.Qvar(object, factorname = NULL, which.linpred = 1,
coef.indices = NULL, labels = NULL,
dispersion = NULL, reference.name = "(reference)", estimates = NULL)
"vglm"
object or a variance-covariance
matrix, e.g., vcov(vglm.object)
.
The former is preferred since it contains all the information needed.
If a matrix then factorname
1:M
.
Specifies which linear predictor to use.
Let the value of which.linpred
be called $j$.
Then the factor should appear in that linear predictor, hence
the $j$th row of the constraint matrivglm
object contains more than one
factor as explanatory variable then this argument should
be the name of the factor of interest.
If object
is a variance-covariance matrvcov()
with the same argument name.object
is a model).
The matrix has an attribute that corresponds to the prior
weight matrix; it is accessed by uninormal
and replaces the usual weights
argument.
of vglm
. This weight matrix has ones on
the off-diagonals and some small positive number on
the diagonals.
qvcalc()
for more information.rcim
) with an exponential link function
(explink
).
If object
is a model, then at least one of factorname
or
coef.indices
must be non-NULL
. The value of
coef.indices
, if non-NULL
, determines which rows and
columns of the model's variance-covariance matrix to use. If
coef.indices
contains a zero, an extra row and column are
included at the indicated position, to represent the zero variances
and covariances associated with a reference level. If
coef.indices
is NULL
, then factorname
should be
the name of a factor effect in the model, and is used in order to
extract the necessary variance-covariance estimates.
Quasi-variances were first implemented in R with
Firth, D. and de Menezes, R. X. (2004) Quasi-variances. Biometrika 91, 65--80.
Yee, T. W. and Hadi, A. F. (2014) Row-column interaction models, with an R implementation. Computational Statistics, 29, 1427--1445.
rcim
,
vglm
,
qvar
,
uninormal
,
explink
,
qvcalc()
in ships
.# Example 1
data("ships", package = "MASS")
Shipmodel <- vglm(incidents ~ type + year + period,
quasipoissonff, offset = log(service),
# trace = TRUE, model = TRUE,
data = ships, subset = (service > 0))
# Easiest form of input
fit1 <- rcim(Qvar(Shipmodel, "type"), uninormal("explink"), maxit = 99)
qvar(fit1) # Easy method to get the quasi-variances
qvar(fit1, se = TRUE) # Easy method to get the quasi-standard errors
(quasiVar <- exp(diag(fitted(fit1))) / 2) # Version 1
(quasiVar <- diag(predict(fit1)[, c(TRUE, FALSE)]) / 2) # Version 2
(quasiSE <- sqrt(quasiVar))
# Another form of input
fit2 <- rcim(Qvar(Shipmodel, coef.ind = c(0, 2:5), reference.name = "typeA"),
uninormal("explink"), maxit = 99)
qvplot(fit2, col = "green", lwd = 3, scol = "blue", slwd = 2, las = 1)
# The variance-covariance matrix is another form of input (not recommended)
fit3 <- rcim(Qvar(cbind(0, rbind(0, vcov(Shipmodel)[2:5, 2:5])),
labels = c("typeA", "typeB", "typeC", "typeD", "typeE"),
estimates = c(typeA = 0, coef(Shipmodel)[2:5])),
uninormal("explink"), maxit = 99)
(QuasiVar <- exp(diag(fitted(fit3))) / 2) # Version 1
(QuasiVar <- diag(predict(fit3)[, c(TRUE, FALSE)]) / 2) # Version 2
(QuasiSE <- sqrt(quasiVar))
qvplot(fit3)
# Example 2: a model with M > 1 linear predictors
require("VGAMdata")
xs.nz.f <- subset(xs.nz, sex == "F")
xs.nz.f <- subset(xs.nz.f, !is.na(babies) & !is.na(age) & !is.na(ethnicity))
xs.nz.f <- subset(xs.nz.f, ethnicity != "Other")
clist <- list("sm.bs(age, df = 4)" = rbind(1, 0),
"sm.bs(age, df = 3)" = rbind(0, 1),
"ethnicity" = diag(2),
"(Intercept)" = diag(2))
fit1 <- vglm(babies ~ sm.bs(age, df = 4) + sm.bs(age, df = 3) + ethnicity,
zipoissonff(zero = NULL), xs.nz.f,
constraints = clist, trace = TRUE)
Fit1 <- rcim(Qvar(fit1, "ethnicity", which.linpred = 1),
uninormal("explink", imethod = 1), maxit = 99, trace = TRUE)
Fit2 <- rcim(Qvar(fit1, "ethnicity", which.linpred = 2),
uninormal("explink", imethod = 1), maxit = 99, trace = TRUE)
par(mfrow = c(1, 2))
qvplot(Fit1, scol = "blue", pch = 16, main = expression(eta[1]),
slwd = 1.5, las = 1, length.arrows = 0.07)
qvplot(Fit2, scol = "blue", pch = 16, main = expression(eta[2]),
slwd = 1.5, las = 1, length.arrows = 0.07)
Run the code above in your browser using DataLab