Description Usage Arguments Details Value Warning Note Author(s) References See Also Examples

View source: R/family.normal.R

Maximum likelihood estimation of all the coefficients of a LM where each of the usual regression coefficients is modelled with other explanatory variables via parameter link functions. Thus this is a basic varying-coefficient model.

1 2 3 4 5 6 7 |

`link.list, earg.list` |
Link functions and extra arguments
applied to the coefficients of the LM, excluding
the standard deviation/variance.
See |

`lsd, esd, lvar, evar` |
Link function and extra argument
applied to
the standard deviation/variance.
See |

`icoefficients` |
Optional initial values for the coefficients.
Recycled to length |

`var.arg, imethod, isd` |
Same as, or similar to, |

`zero` |
See |

`sd.inflation.factor` |
Numeric, should be greater than 1.
The initial value of the standard deviation is multiplied by this,
unless |

This function allows all the usual LM regression coefficients to be
modelled as functions of other explanatory variables via parameter link
functions. For example, we may want some of them to be positive. Or we
may want a subset of them to be positive and add to unity. So a class
of such models have been named *varying-coefficient models* (VCMs).

The usual linear model is specified through argument
`form2`

. As with all other VGAM family
functions, the linear/additive predictors are specified
through argument `formula`

.

The `multilogitlink`

link allows a subset of the
coefficients to be positive and add to unity. Either
none or more than one call to `multilogitlink`

is allowed. The last variable will be used as the
baseline/reference group, and therefore excluded from
the estimation.

By default, the log of the standard deviation is the last linear/additive predictor. It is recommended that this parameter be estimated as intercept-only, for numerical stability.

Technically, the Fisher information matrix is of unit-rank for all but the last parameter (the standard deviation/variance). Hence an approximation is used that pools over all the observations.

This VGAM family function cannot handle multiple responses.
Also, this function will probably not have the
full capabilities of the class of varying-coefficient models as
described by Hastie and Tibshirani (1993). However, it should
be able to manage some simple models, especially involving the
following links:
`identitylink`

,
`loglink`

,
`logofflink`

,
`logloglink`

,
`logitlink`

,
`probitlink`

,
`cauchitlink`

.
`clogloglink`

,
`rhobitlink`

,
`fisherzlink`

.

An object of class `"vglmff"`

(see `vglmff-class`

).
The object is used by modelling functions such as `vglm`

,
and `vgam`

.

This VGAM family function is fragile.
One should monitor convergence, and possibly enter initial values
especially when there are non-`identity`

-link functions.
If the initial value of the standard deviation/variance is too
small then numerical problems may occur.
One trick is to fit an intercept-only only model and feed its
`predict()`

output into argument `etastart`

of a
more complicated model.
The use of the `zero`

argument is recommended in order
to keep models as simple as possible.

The standard deviation/variance parameter is best modelled as intercept-only.

Yet to do: allow an argument such as `parallel`

that enables
many of the coefficients to be equal.
Fix a bug: `Coef()`

does not work for intercept-only models.

T. W. Yee

Hastie, T. and Tibshirani, R. (1993).
Varying-coefficient models.
*J. Roy. Statist. Soc. Ser. B*,
**55**, 757–796.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | ```
ndata <- data.frame(x2 = runif(nn <- 2000))
# Note that coeff1 + coeff2 + coeff5 == 1. So try "multilogitlink".
myoffset <- 10
ndata <- transform(ndata,
coeff1 = 0.25, # "multilogitlink"
coeff2 = 0.25, # "multilogitlink"
coeff3 = exp(-0.5), # "loglink"
# "logofflink" link:
coeff4 = logofflink(+0.5, offset = myoffset, inverse = TRUE),
coeff5 = 0.50, # "multilogitlink"
coeff6 = 1.00, # "identitylink"
v2 = runif(nn),
v3 = runif(nn),
v4 = runif(nn),
v5 = rnorm(nn),
v6 = rnorm(nn))
ndata <- transform(ndata,
Coeff1 = 0.25 - 0 * x2,
Coeff2 = 0.25 - 0 * x2,
Coeff3 = logitlink(-0.5 - 1 * x2, inverse = TRUE),
Coeff4 = logloglink( 0.5 - 1 * x2, inverse = TRUE),
Coeff5 = 0.50 - 0 * x2,
Coeff6 = 1.00 + 1 * x2)
ndata <- transform(ndata,
y1 = coeff1 * 1 +
coeff2 * v2 +
coeff3 * v3 +
coeff4 * v4 +
coeff5 * v5 +
coeff6 * v6 + rnorm(nn, sd = exp(0)),
y2 = Coeff1 * 1 +
Coeff2 * v2 +
Coeff3 * v3 +
Coeff4 * v4 +
Coeff5 * v5 +
Coeff6 * v6 + rnorm(nn, sd = exp(0)))
# An intercept-only model
fit1 <- vglm(y1 ~ 1,
form2 = ~ 1 + v2 + v3 + v4 + v5 + v6,
normal.vcm(link.list = list("(Intercept)" = "multilogitlink",
"v2" = "multilogitlink",
"v3" = "loglink",
"v4" = "logofflink",
"(Default)" = "identitylink",
"v5" = "multilogitlink"),
earg.list = list("(Intercept)" = list(),
"v2" = list(),
"v4" = list(offset = myoffset),
"v3" = list(),
"(Default)" = list(),
"v5" = list()),
zero = c(1:2, 6)),
data = ndata, trace = TRUE)
coef(fit1, matrix = TRUE)
summary(fit1)
# This works only for intercept-only models:
multilogitlink(rbind(coef(fit1, matrix = TRUE)[1, c(1, 2)]), inverse = TRUE)
# A model with covariate x2 for the regression coefficients
fit2 <- vglm(y2 ~ 1 + x2,
form2 = ~ 1 + v2 + v3 + v4 + v5 + v6,
normal.vcm(link.list = list("(Intercept)" = "multilogitlink",
"v2" = "multilogitlink",
"v3" = "logitlink",
"v4" = "logloglink",
"(Default)" = "identitylink",
"v5" = "multilogitlink"),
earg.list = list("(Intercept)" = list(),
"v2" = list(),
"v3" = list(),
"v4" = list(),
"(Default)" = list(),
"v5" = list()),
zero = c(1:2, 6)),
data = ndata, trace = TRUE)
coef(fit2, matrix = TRUE)
summary(fit2)
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.