Cumulative Link Models
Fits cumulative link models (CLMs) such as the propotional odds model. The model allows for various link functions and structured thresholds that restricts the thresholds or cut-points to be e.g., equidistant or symmetrically arranged around the central threshold(s). Nominal effects (partial proportional odds with the logit link) are also allowed. A modified Newton algorithm is used to optimize the likelihood function.
clm(formula, scale, nominal, data, weights, start, subset, doFit = TRUE, na.action, contrasts, model = TRUE, control=list(), link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...)
formula |
a formula expression as for regression models, of the form
|
scale |
an optional formula expression, of the form
|
nominal |
an optional formula of the form |
data |
an optional data frame in which to interpret the variables occurring in the formulas. |
weights |
optional case weights in fitting. Defaults to 1. Negative weights are not allowed. |
start |
initial values for the parameters in the format
|
subset |
expression saying which subset of the rows of the data should be used in the fit. All observations are included by default. |
doFit |
logical for whether the model should be fitted or the model environment should be returned. |
na.action |
a function to filter missing data. Applies to terms in all three formulae. |
contrasts |
a list of contrasts to be used for some or all of the factors appearing as variables in the model formula. |
model |
logical for whether the model frame should be part of the returned object. |
control |
a list of control parameters passed on to
|
link |
link function, i.e., the type of location-scale distribution
assumed for the latent distribution. The default |
threshold |
specifies a potential structure for the thresholds
(cut-points). |
... |
additional arguments are passed on to |
This is a new (as of August 2011) improved implementation of CLMs. The
old implementation is available in clm2
, but will
probably be removed at some point.
If doFit = FALSE
the result is an environment
representing the model ready to be optimized.
If doFit = TRUE
the result is an
object of class "clm"
with the components listed below.
Note that some components are only present if scale
and
nominal
are used.
aliased |
list of length 3 or less with components |
alpha |
a vector of threshold parameters. |
alpha.mat |
(where relevant) a table ( |
beta |
(where relevant) a vector of regression parameters. |
call |
the mathed call. |
coefficients |
a vector of coefficients of the form
|
cond.H |
condition number of the Hessian matrix at the optimum (i.e. the ratio of the largest to the smallest eigenvalue). |
contrasts |
(where relevant) the contrasts used for the
|
control |
list of control parameters as generated by |
convergence |
convergence code where 0 indicates successful convergence and negative values indicate convergence failure; 1 indicates successful convergence to a non-unique optimum. |
edf |
the estimated degrees of freedom, i.e., the number of parameters in the model fit. |
fitted.values |
the fitted probabilities. |
gradient |
a vector of gradients for the coefficients at the estimated optimum. |
Hessian |
the Hessian matrix for the parameters at the estimated optimum. |
info |
a table of basic model information for printing. |
link |
character, the link function used. |
logLik |
the value of the log-likelihood at the estimated optimum. |
maxGradient |
the maximum absolute gradient, i.e.,
|
model |
if requested (the default), the
|
n |
the number of observations counted as |
na.action |
(where relevant) information returned by
|
nobs |
the number of observations counted as |
nom.contrasts |
(where relevant) the contrasts used for the
|
nom.terms |
(where relevant) the terms object for the
|
nom.xlevels |
(where relevant) a record of the levels of the
factors used in fitting for the |
start |
the parameter values at which the optimization has
started. An attribute |
S.contrasts |
(where relevant) the contrasts used for the
|
S.terms |
(where relevant) the terms object for the |
S.xlevels |
(where relevant) a record of the levels of the
factors used in fitting for the |
terms |
the terms object for the |
Theta |
(where relevant) a table ( |
threshold |
character, the threshold structure used. |
tJac |
the transpose of the Jacobian for the threshold structure. |
xlevels |
(where relevant) a record of the levels of the factors
used in fitting for the |
y.levels |
the levels of the response variable after removing levels for which all weights are zero. |
zeta |
(where relevant) a vector of scale regression parameters. |
Rune Haubo B Christensen
fm1 <- clm(rating ~ temp * contact, data = wine) fm1 ## print method summary(fm1) fm2 <- update(fm1, ~.-temp:contact) anova(fm1, fm2) drop1(fm1, test = "Chi") add1(fm1, ~.+judge, test = "Chi") fm2 <- step(fm1) summary(fm2) coef(fm1) vcov(fm1) AIC(fm1) extractAIC(fm1) logLik(fm1) fitted(fm1) confint(fm1) ## type = "profile" confint(fm1, type = "Wald") pr1 <- profile(fm1) confint(pr1) ## plotting the profiles: par(mfrow = c(2, 2)) plot(pr1, root = TRUE) ## check for linearity par(mfrow = c(2, 2)) plot(pr1) par(mfrow = c(2, 2)) plot(pr1, approx = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE, relative = FALSE) ## other link functions: fm4.lgt <- update(fm1, link = "logit") ## default fm4.prt <- update(fm1, link = "probit") fm4.ll <- update(fm1, link = "loglog") fm4.cll <- update(fm1, link = "cloglog") fm4.cct <- update(fm1, link = "cauchit") anova(fm4.lgt, fm4.prt, fm4.ll, fm4.cll, fm4.cct) ## structured thresholds: fm5 <- update(fm1, threshold = "symmetric") fm6 <- update(fm1, threshold = "equidistant") anova(fm1, fm5, fm6) ## the slice methods: slice.fm1 <- slice(fm1) par(mfrow = c(3, 3)) plot(slice.fm1) ## see more at '?slice.clm' ## Another example: fm.soup <- clm(SURENESS ~ PRODID, data = soup) summary(fm.soup) if(require(MASS)) { ## dropterm, addterm, stepAIC, housing fm1 <- clm(rating ~ temp * contact, data = wine) dropterm(fm1, test = "Chi") addterm(fm1, ~.+judge, test = "Chi") fm3 <- stepAIC(fm1) summary(fm3) ## Example from MASS::polr: fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) summary(fm1) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.