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)
```

*BranchGLM*version 2.1.5 Index]