Last chance! 50% off unlimited learning
Sale ends in
vglm
are set
using this function.vglm.control(checkwz = TRUE, Check.rank = TRUE,
criterion = names(.min.criterion.VGAM),
epsilon = 1e-07, half.stepsizing = TRUE,
maxit = 30, noWarning = FALSE,
stepsize = 1, save.weight = FALSE,
trace = FALSE, wzepsilon = .Machine$double.eps^0.75,
xij = NULL, ...)
wzepsilon
. If not, any values less than
wzepsilon
are replaced w.min.criterion.VGAM
, but most family
functions only implement a few of these.criterion
values are within epsilon
of each other.maxit
iterations.
This is ignored if maxit = 1
is set.weights
slot of a
"vglm"
object will be saved on the object. If not,
it will be reconstructed when needed, e.g., summary
.
Some family functions have save.weight = TRUE
trace = TRUE
is recommended in
general because control
slot of
vglm
objects.criterion = "coef", epsilon = 1e-09
is one way to achieve this, and also add
trace = TRUE
to monitor the convergence.
Setting maxit
to some higher number is usually not
needed, and needing to do so suggests something is wrong, e.g.,
an ill-conditioned model, over-fitting or under-fitting.vglm.fit
and you will have to look at that to
understand the full details.
Setting save.weight = FALSE
is useful for some models because
the weights
slot of the object is the largest and so less
memory is used to store the object. However, for some save.weight = TRUE
because the weights
slot cannot be reconstructed later.
vglm
,
fill
.
The author's homepage has further documentation about
the xij
argument.# Example 1.
pneumo <- transform(pneumo, let = log(exposure.time))
vglm(cbind(normal, mild, severe) ~ let, multinomial, data = pneumo,
crit = "coef", step = 0.5, trace = TRUE, epsil = 1e-8, maxit = 40)
# Example 2. The use of the xij argument (simple case).
ymat <- rdiric(n <- 1000, shape = rep(exp(2), len = 4))
mydat <- data.frame(x1 = runif(n), x2 = runif(n), x3 = runif(n), x4 = runif(n),
z1 = runif(n), z2 = runif(n), z3 = runif(n), z4 = runif(n))
mydat <- transform(mydat, X = x1, Z = z1)
mydat <- round(mydat, dig = 2)
fit2 <- vglm(ymat ~ X + Z,
dirichlet(parallel = TRUE), data = mydat, trace = TRUE,
xij = list(Z ~ z1 + z2 + z3 + z4,
X ~ x1 + x2 + x3 + x4),
form2 = ~ Z + z1 + z2 + z3 + z4 +
X + x1 + x2 + x3 + x4)
head(model.matrix(fit2, type = "lm")) # LM model matrix
head(model.matrix(fit2, type = "vlm")) # Big VLM model matrix
coef(fit2)
coef(fit2, matrix = TRUE)
max(abs(predict(fit2)-predict(fit2, new = mydat))) # Predicts correctly
summary(fit2)
# plotvgam(fit2, se = TRUE, xlab = "x1", which.term = 1) # Bug!
# plotvgam(fit2, se = TRUE, xlab = "z1", which.term = 2) # Bug!
plotvgam(fit2, xlab = "x1") # Correct
plotvgam(fit2, xlab = "z1") # Correct
# Example 3. The use of the xij argument (complex case).
set.seed(123)
coalminers <- transform(coalminers,
Age = (age - 42) / 5,
dum1 = round(runif(nrow(coalminers)), dig = 2),
dum2 = round(runif(nrow(coalminers)), dig = 2),
dum3 = round(runif(nrow(coalminers)), dig = 2),
dumm = round(runif(nrow(coalminers)), dig = 2))
BS <- function(x, ..., df = 3) bs(c(x,...), df = df)[1:length(x),,drop = FALSE]
NS <- function(x, ..., df = 3) ns(c(x,...), df = df)[1:length(x),,drop = FALSE]
# Equivalently...
BS <- function(x, ..., df = 3) head(bs(c(x,...), df = df), length(x), drop = FALSE)
NS <- function(x, ..., df = 3) head(ns(c(x,...), df = df), length(x), drop = FALSE)
fit3 <- vglm(cbind(nBnW,nBW,BnW,BW) ~ Age + NS(dum1, dum2),
fam = binom2.or(exchangeable = TRUE, zero = 3),
xij = list(NS(dum1, dum2) ~ NS(dum1, dum2) +
NS(dum2, dum1) +
fill(NS( dum1))),
form2 = ~ NS(dum1, dum2) + NS(dum2, dum1) + fill(NS(dum1)) +
dum1 + dum2 + dum3 + Age + age + dumm,
data = coalminers, trace = TRUE)
head(model.matrix(fit3, type = "lm")) # LM model matrix
head(model.matrix(fit3, type = "vlm")) # Big VLM model matrix
coef(fit3)
coef(fit3, matrix = TRUE)
plotvgam(fit3, se = TRUE, lcol = "red", scol = "blue", xlab = "dum1")
Run the code above in your browser using DataLab