BranchGLM {BranchGLM} | R Documentation |
Fits GLMs
Description
Fits generalized linear models (GLMs) via RcppArmadillo with the ability to perform some computation in parallel with OpenMP.
Usage
BranchGLM(
formula,
data,
family,
link,
offset = NULL,
method = "Fisher",
grads = 10,
parallel = FALSE,
nthreads = 8,
tol = 1e-06,
maxit = NULL,
init = NULL,
fit = TRUE,
contrasts = NULL,
keepData = TRUE,
keepY = TRUE
)
BranchGLM.fit(
x,
y,
family,
link,
offset = NULL,
method = "Fisher",
grads = 10,
parallel = FALSE,
nthreads = 8,
init = NULL,
maxit = NULL,
tol = 1e-06
)
Arguments
formula |
a formula for the model. |
data |
a data.frame, list or environment (or object coercible by as.data.frame to a data.frame), containing the variables in formula. Neither a matrix nor an array will be accepted. |
family |
the distribution used to model the data, one of "gaussian", "gamma", "binomial", or "poisson". |
link |
the link used to link the mean structure to the linear predictors. One of "identity", "logit", "probit", "cloglog", "sqrt", "inverse", or "log". The accepted links depend on the specified family, see more in details. |
offset |
the offset vector, by default the zero vector is used. |
method |
one of "Fisher", "BFGS", or "LBFGS". BFGS and L-BFGS are quasi-newton methods which are typically faster than Fisher's scoring when there are many covariates (at least 50). |
grads |
a positive integer to denote the number of gradients used to
approximate the inverse information with, only for |
parallel |
a logical value to indicate if parallelization should be used. |
nthreads |
a positive integer to denote the number of threads used with OpenMP,
only used if |
tol |
a positive number to denote the tolerance used to determine model convergence. |
maxit |
a positive integer to denote the maximum number of iterations performed. The default for Fisher's scoring is 50 and for the other methods the default is 200. |
init |
a numeric vector of initial values for the betas, if not specified then they are automatically selected via linear regression with the transformation specified by the link function. This is ignored for linear regression models. |
fit |
a logical value to indicate whether to fit the model or not. |
contrasts |
see |
keepData |
a logical value to indicate whether or not to store a copy of
data and the design matrix, the default is TRUE. If this is FALSE, then the
results from this cannot be used inside of |
keepY |
a logical value to indicate whether or not to store a copy of y,
the default is TRUE. If this is FALSE, then the binomial GLM helper functions
may not work and this cannot be used inside of |
x |
design matrix used for the fit, must be numeric. |
y |
outcome vector, must be numeric. |
Details
Fitting
Can use BFGS, L-BFGS, or Fisher's scoring to fit the GLM. BFGS and L-BFGS are
typically faster than Fisher's scoring when there are at least 50 covariates
and Fisher's scoring is typically best when there are fewer than 50 covariates.
This function does not currently support the use of weights. In the special
case of gaussian regression with identity link the method
argument is ignored
and the normal equations are solved directly.
The models are fit in C++ by using Rcpp and RcppArmadillo. In order to help
convergence, each of the methods makes use of a backtracking line-search using
the strong Wolfe conditions to find an adequate step size. There are
three conditions used to determine convergence, the first is whether there is a
sufficient decrease in the negative log-likelihood, the second is whether
the l2-norm of the score is sufficiently small, and the last condition is
whether the change in each of the beta coefficients is sufficiently
small. The tol
argument controls all of these criteria. If the algorithm fails to
converge, then iterations
will be -1.
All observations with any missing values are removed before model fitting.
BranchGLM.fit
can be faster than calling BranchGLM
if the
x matrix and y vector are already available, but doesn't return as much information.
The object returned by BranchGLM.fit
is not of class BranchGLM
, so
all of the methods for BranchGLM
objects such as predict
or
VariableSelection
cannot be used.
Dispersion Parameter
The dispersion parameter for gamma regression is estimated via maximum likelihood,
very similar to the gamma.dispersion
function from the MASS package. The
dispersion parameter for gaussian regression is also estimated via maximum
likelihood estimation.
Families and Links
The binomial family accepts "cloglog", "log", "logit", and "probit" as possible link functions. The gamma and gaussian families accept "identity", "inverse", "log", and "sqrt" as possible link functions. The Poisson family accepts "identity", "log", and "sqrt" as possible link functions.
Value
BranchGLM
returns a BranchGLM
object which is a list with the following components
coefficients |
a matrix with the coefficient estimates, SEs, Wald test statistics, and p-values |
iterations |
number of iterations it took the algorithm to converge, if the algorithm failed to converge then this is -1 |
dispersion |
the value of the dispersion parameter |
logLik |
the log-likelihood of the fitted model |
vcov |
the variance-covariance matrix of the fitted model |
resDev |
the residual deviance of the fitted model |
AIC |
the AIC of the fitted model |
preds |
predictions from the fitted model |
linpreds |
linear predictors from the fitted model |
tol |
tolerance used to fit the model |
maxit |
maximum number of iterations used to fit the model |
formula |
formula used to fit the model |
method |
iterative method used to fit the model |
grads |
number of gradients used to approximate inverse information for L-BFGS |
y |
y vector used in the model, not included if |
x |
design matrix used to fit the model, not included if |
offset |
offset vector in the model, not included if |
fulloffset |
supplied offset vector, not included if |
data |
original |
mf |
the model frame, not included if |
numobs |
number of observations in the design matrix |
names |
names of the predictor variables |
yname |
name of y variable |
parallel |
whether parallelization was employed to speed up model fitting process |
missing |
number of missing values removed from the original dataset |
link |
link function used to model the data |
family |
family used to model the data |
ylevel |
the levels of y, only included for binomial glms |
xlev |
the levels of the factors in the dataset |
terms |
the terms object used |
BranchGLM.fit
returns a list with the following components
coefficients |
a matrix with the coefficients estimates, SEs, Wald test statistics, and p-values |
iterations |
number of iterations it took the algorithm to converge, if the algorithm failed to converge then this is -1 |
dispersion |
the value of the dispersion parameter |
logLik |
the log-likelihood of the fitted model |
vcov |
the variance-covariance matrix of the fitted model |
resDev |
the residual deviance of the fitted model |
AIC |
the AIC of the fitted model |
preds |
predictions from the fitted model |
linpreds |
linear predictors from the fitted model |
tol |
tolerance used to fit the model |
maxit |
maximum number of iterations used to fit the model |
References
McCullagh, P., & Nelder, J. A. (1989). Generalized Linear Models (2nd ed.). Chapman & Hall.
See Also
predict.BranchGLM, coef.BranchGLM, VariableSelection, confint.BranchGLM, logLik.BranchGLM
Examples
Data <- iris
# Linear regression
## Using BranchGLM
BranchGLM(Sepal.Length ~ ., data = Data, family = "gaussian", link = "identity")
## Using BranchGLM.fit
x <- model.matrix(Sepal.Length ~ ., data = Data)
y <- Data$Sepal.Length
BranchGLM.fit(x, y, family = "gaussian", link = "identity")
# Gamma regression
## Using BranchGLM
BranchGLM(Sepal.Length ~ ., data = Data, family = "gamma", link = "log")
### init
BranchGLM(Sepal.Length ~ ., data = Data, family = "gamma", link = "log",
init = rep(0, 6), maxit = 50, tol = 1e-6, contrasts = NULL)
### method
BranchGLM(Sepal.Length ~ ., data = Data, family = "gamma", link = "log",
init = rep(0, 6), maxit = 50, tol = 1e-6, contrasts = NULL, method = "LBFGS")
### offset
BranchGLM(Sepal.Length ~ ., data = Data, family = "gamma", link = "log",
init = rep(0, 6), maxit = 50, tol = 1e-6, contrasts = NULL,
offset = Data$Sepal.Width)
## Using BranchGLM.fit
x <- model.matrix(Sepal.Length ~ ., data = Data)
y <- Data$Sepal.Length
BranchGLM.fit(x, y, family = "gamma", link = "log", init = rep(0, 6),
maxit = 50, tol = 1e-6, offset = Data$Sepal.Width)