Documentation

# GeneralizedLinearModel class

Superclasses: `CompactGeneralizedLinearModel`

Generalized linear regression model class

## Description

An object comprising training data, model description, diagnostic information, and fitted coefficients for a generalized linear regression. Predict model responses with the `predict` or `feval` methods.

## Construction

```mdl = fitglm(tbl)``` or ```mdl = fitglm(X,y)``` creates a generalized linear model of a table or dataset array `tbl`, or of the responses `y` to a data matrix `X`. For details, see `fitglm`.

`mdl = stepwiseglm(tbl)` or ```mdl = stepwiseglm(X,y)``` creates a generalized linear model of a table or dataset array `tbl`, or of the responses `y` to a data matrix `X`, with unimportant predictors excluded. For details, see `stepwiseglm`.

### Input Arguments

expand all

Input data including predictor and response variables, specified as a table or dataset array. The predictor variables and response variable can be numeric, logical, categorical, character, or string. The response variable can have a data type other than numeric only if `'Distribution'` is `'binomial'`.

• By default, `GeneralizedLinearModel` takes the last variable as the response variable and the others as the predictor variables.

• To set a different column as the response variable, use the `ResponseVar` name-value pair argument.

• To use a subset of the columns as predictors, use the `PredictorVars` name-value pair argument.

• To define a model specification, set the `modelspec` argument using a formula or terms matrix. The formula or terms matrix specifies which columns to use as the predictor or response variables.

The variable names in a table do not have to be valid MATLAB® identifiers. However, if the names are not valid, you cannot use a formula when you fit or adjust a model; for example:

• You cannot specify `modelspec` using a formula.

• You cannot use a formula to specify the terms to add or remove when you use the `addTerms` function or the `removeTerms` function, respectively.

• You cannot use a formula to specify the lower and upper bounds of the model when you use the `step` or `stepwiseglm` function with the name-value pair arguments `'Lower'` and `'Upper'`, respectively.

You can verify the variable names in `tbl` by using the `isvarname` function. The following code returns logical `1` (`true`) for each variable that has a valid variable name.

`cellfun(@isvarname,tbl.Properties.VariableNames)`
If the variable names in `tbl` are not valid, then convert them by using the `matlab.lang.makeValidName` function.
`tbl.Properties.VariableNames = matlab.lang.makeValidName(tbl.Properties.VariableNames);`

Predictor variables, specified as an n-by-p matrix, where n is the number of observations and p is the number of predictor variables. Each column of `X` represents one variable, and each row represents one observation.

By default, there is a constant term in the model, unless you explicitly remove it, so do not include a column of 1s in `X`.

Data Types: `single` | `double`

Response variable, specified as a vector or matrix.

• If `'Distribution'` is not `'binomial'`, then `y` must be an n-by-1 vector, where n is the number of observations. Each entry in `y` is the response for the corresponding row of `X`. The data type must be single or double.

• If `'Distribution'` is `'binomial'`, then `y` can be an n-by-1 vector or n-by-2 matrix with counts in column 1 and `BinomialSize` in column 2.

Data Types: `single` | `double` | `logical` | `categorical`

## Properties

expand all

Covariance matrix of coefficient estimates, specified as a p-by-p matrix of numeric values. p is the number of coefficients in the fitted model.

For details, see Coefficient Standard Errors and Confidence Intervals.

Data Types: `single` | `double`

Coefficient names, specified as a cell array of character vectors, each containing the name of the corresponding term.

Data Types: `cell`

Coefficient values, specified as a table. `Coefficients` contains one row for each coefficient and these columns:

• `Estimate` — Estimated coefficient value

• `SE` — Standard error of the estimate

• `tStat`t-statistic for a test that the coefficient is zero

• `pValue`p-value for the t-statistic

Use `anova` (only for a linear regression model) or `coefTest` to perform other tests on the coefficients. Use `coefCI` to find the confidence intervals of the coefficient estimates.

To obtain any of these columns as a vector, index into the property using dot notation. For example, obtain the estimated coefficient vector in the model `mdl`:

`beta = mdl.Coefficients.Estimate`

Data Types: `table`

Deviance of the fit, specified as a numeric value. Deviance is useful for comparing two models when one model is a special case of the other model. The difference between the deviance of the two models has a chi-square distribution with degrees of freedom equal to the difference in the number of estimated parameters between the two models. For more information on deviance, see Deviance.

Data Types: `single` | `double`

Degrees of freedom for the error (residuals), equal to the number of observations minus the number of estimated coefficients, specified as a positive integer.

Data Types: `double`

Diagnostic information for the model, specified as a table. Diagnostics can help identify outliers and influential observations. `Diagnostics` contains the following fields.

FieldMeaningUtility
`Leverage`Diagonal elements of `HatMatrix`Leverage indicates to what extent the predicted value for an observation is determined by the observed value for that observation. A value close to `1` indicates that the prediction is largely determined by that observation, with little contribution from the other observations. A value close to `0` indicates the fit is largely determined by the other observations. For a model with p coefficients and n observations, the average value of `Leverage` is p/n. An observation with `Leverage` larger than 2*p/n can be an outlier.
`CooksDistance`Cook's measure of scaled change in fitted values`CooksDistance` is a measure of scaled change in fitted values. An observation with `CooksDistance` larger than three times the mean Cook's distance can be an outlier.
`HatMatrix`Projection matrix to compute fitted from observed responses`HatMatrix` is an n-by-n matrix such that `Fitted = HatMatrix*Y`, where `Y` is the response vector and `Fitted` is the vector of fitted response values.

All of these quantities are computed on the scale of the linear predictor. For example, in the equation that defines the hat matrix:

```Yfit = glm.Fitted.LinearPredictor Y = glm.Fitted.LinearPredictor + glm.Residuals.LinearPredictor```

Data Types: `table`

Scale factor of the variance of the response, specified as a numeric value. `Dispersion` multiplies the variance function for the distribution.

For example, the variance function for the binomial distribution is p(1–p)/n, where p is the probability parameter and n is the sample size parameter. If `Dispersion` is near `1`, the variance of the data appears to agree with the theoretical variance of the binomial distribution. If `Dispersion` is larger than `1`, the data set is “overdispersed” relative to the binomial distribution.

Data Types: `double`

Flag to indicate whether `fitglm` used the `Dispersion` scale factor to compute standard errors for the coefficients in `Coefficients.SE`, specified as a logical value. If `DispersionEstimated` is `false`, `fitglm` used the theoretical value of the variance.

• `DispersionEstimated` can be `false` only for `'binomial'` or `'poisson'` distributions.

• Set `DispersionEstimated` by setting the `DispersionFlag` name-value pair in `fitglm`.

Data Types: `logical`

Generalized distribution information, specified as a structure with the following fields relating to the generalized distribution.

FieldDescription
`Name`Name of the distribution, one of `'normal'`, `'binomial'`, `'poisson'`, `'gamma'`, or ```'inverse gaussian'```.
`DevianceFunction`Function that computes the components of the deviance as a function of the fitted parameter values and the response values.
`VarianceFunction`Function that computes the theoretical variance for the distribution as a function of the fitted parameter values. When `DispersionEstimated` is `true`, `Dispersion` multiplies the variance function in the computation of the coefficient standard errors.

Data Types: `struct`

Fitted (predicted) values based on the input data, specified as a table with one row for each observation and the following columns.

FieldDescription
`Response`Predicted values on the scale of the response.
`LinearPredictor`Predicted values on the scale of the linear predictor. These are the same as the link function applied to the `Response` fitted values.
`Probability`Fitted probabilities (this column is included only with the binomial distribution).

To obtain any of the columns as a vector, index into the property using dot notation. For example, in the model `mdl`, the vector `f` of fitted values on the response scale is

`f = mdl.Fitted.Response`

Use `predict` to compute predictions for other predictor values, or to compute confidence bounds on `Fitted`.

Data Types: `table`

Model information, specified as a `LinearFormula` object.

Display the formula of the fitted model `mdl` using dot notation:

`mdl.Formula`

Log likelihood of the model distribution at the response values, specified as a numeric value. The mean is fitted from the model, and other parameters are estimated as part of the model fit.

Data Types: `single` | `double`

Criterion for model comparison, specified as a structure with these fields:

• `AIC` — Akaike information criterion. `AIC = –2*logL + 2*m`, where `logL` is the loglikelihood and `m` is the number of estimated parameters.

• `AICc` — Akaike information criterion corrected for the sample size. `AICc = AIC + (2*m*(m+1))/(n–m–1)`, where `n` is the number of observations.

• `BIC` — Bayesian information criterion. `BIC = –2*logL + m*log(n)`.

• `CAIC` — Consistent Akaike information criterion. `CAIC = –2*logL + m*(log(n)+1)`.

Information criteria are model selection tools that you can use to compare multiple models fit to the same data. These criteria are likelihood-based measures of model fit that include a penalty for complexity (specifically, the number of parameters). Different information criteria are distinguished by the form of the penalty.

When you compare multiple models, the model with the lowest information criterion value is the best-fitting model. The best-fitting model can vary depending on the criterion used for model comparison.

To obtain any of the criterion values as a scalar, index into the property using dot notation. For example, obtain the AIC value `aic` in the model `mdl`:

`aic = mdl.ModelCriterion.AIC`

Data Types: `struct`

Number of model coefficients, specified as a positive integer. `NumCoefficients` includes coefficients that are set to zero when the model terms are rank deficient.

Data Types: `double`

Number of estimated coefficients in the model, specified as a positive integer. `NumEstimatedCoefficients` does not include coefficients that are set to zero when the model terms are rank deficient. `NumEstimatedCoefficients` is the degrees of freedom for regression.

Data Types: `double`

Number of observations the fitting function used in fitting, specified as a positive integer. `NumObservations` is the number of observations supplied in the original table, dataset, or matrix, minus any excluded rows (set with the `'Exclude'` name-value pair argument) or rows with missing values.

Data Types: `double`

Number of predictor variables used to fit the model, specified as a positive integer.

Data Types: `double`

Number of variables in the input data, specified as a positive integer. `NumVariables` is the number of variables in the original table or dataset, or the total number of columns in the predictor matrix and response vector.

`NumVariables` also includes any variables that are not used to fit the model as predictors or as the response.

Data Types: `double`

Observation information, specified as an n-by-4 table, where n is equal to the number of rows of input data. The `ObservationInfo` contains the columns described in this table.

ColumnDescription
`Weights`Observation weight, specified as a numeric value. The default value is `1`.
`Excluded`Indicator of excluded observation, specified as a logical value. The value is `true` if you exclude the observation from the fit by using the `'Exclude'` name-value pair argument.
`Missing`Indicator of missing observation, specified as a logical value. The value is `true` if the observation is missing.
`Subset`Indicator of whether or not a fitting function uses the observation, specified as a logical value. The value is `true` if the observation is not excluded or missing, meaning that fitting function uses the observation.

To obtain any of these columns as a vector, index into the property using dot notation. For example, obtain the weight vector `w` of the model `mdl`:

`w = mdl.ObservationInfo.Weights`

Data Types: `table`

Observation names, specified as a cell array of character vectors containing the names of the observations used in the fit.

• If the fit is based on a table or dataset containing observation names, `ObservationNames` uses those names.

• Otherwise, `ObservationNames` is an empty cell array.

Data Types: `cell`

Offset variable, specified as a numeric vector with the same length as the number of rows in the data. `Offset` is passed from `fitglm` or `stepwiseglm` in the `Offset` name-value pair. The fitting function used `Offset` as a predictor variable, but with the coefficient set to exactly `1`. In other words, the formula for fitting was

μ``` ~ Offset + (terms involving real predictors)```

with the `Offset` predictor having coefficient `1`.

For example, consider a Poisson regression model. Suppose the number of counts is known for theoretical reasons to be proportional to a predictor `A`. By using the log link function and by specifying `log(A)` as an offset, you can force the model to satisfy this theoretical constraint.

Data Types: `double`

Names of predictors used to fit the model, specified as a cell array of character vectors.

Data Types: `cell`

Residuals for the fitted model, specified as a table with one row for each observation and the following columns.

FieldDescription
`Raw`Observed minus fitted values.
`LinearPredictor`Residuals on the linear predictor scale, equal to the adjusted response value minus the fitted linear combination of the predictors.
`Pearson`Raw residuals divided by the estimated standard deviation of the response.
`Anscombe`Residuals defined on transformed data with the transformation chosen to remove skewness.
`Deviance`Residuals based on the contribution of each observation to the deviance.

To obtain any of these columns as a vector, index into the property using dot notation. For example, in a model `mdl`, the ordinary raw residual vector `r` is:

`r = mdl.Residuals.Raw`

Rows not used in the fit because of missing values (in `ObservationInfo.Missing`) contain `NaN` values.

Rows not used in the fit because of excluded values (in `ObservationInfo.Excluded`) contain `NaN` values, with the following exceptions:

• `raw` contains the difference between the observed and predicted values.

• `standardized` is the residual, standardized in the usual way.

• `studentized` matches the standardized values because this residual is not used in the estimate of the residual standard deviation.

Data Types: `table`

Response variable name, specified as a character vector.

Data Types: `char`

R-squared value for the model, specified as a structure with five fields:

• `Ordinary` — Ordinary (unadjusted) R-squared

• `Adjusted` — R-squared adjusted for the number of coefficients

• `LLR` — Log-likelihood ratio

• `Deviance` — Deviance

• `AdjGeneralized` — Adjusted generalized R-squared

The R-squared value is the proportion of total sum of squares explained by the model. The ordinary R-squared value relates to the `SSR` and `SST` properties:

`Rsquared = SSR/SST = 1 - SSE/SST`.

To obtain any of these values as a scalar, index into the property using dot notation. For example, the adjusted R-squared value in `mdl` is

`r2 = mdl.Rsquared.Adjusted`

Data Types: `struct`

Sum of squared errors (residuals), specified as a numeric value.

The Pythagorean theorem implies

`SST = SSE + SSR`,

where `SST` is the total sum of squares, `SSE` is the sum of squared errors, and `SSR` is the regression sum of squares.

Data Types: `single` | `double`

Regression sum of squares, specified as a numeric value. The regression sum of squares is equal to the sum of squared deviations of the fitted values from their mean.

The Pythagorean theorem implies

```SST = SSE + SSR```,

where `SST` is the total sum of squares, `SSE` is the sum of squared errors, and `SSR` is the regression sum of squares.

Data Types: `single` | `double`

Total sum of squares, specified as a numeric value. The total sum of squares is equal to the sum of squared deviations of the response vector `y` from the `mean(y)`.

The Pythagorean theorem implies

`SST = SSE + SSR`,

where `SST` is the total sum of squares, `SSE` is the sum of squared errors, and `SSR` is the regression sum of squares.

Data Types: `single` | `double`

Stepwise fitting information, specified as a structure with the fields described in this table.

FieldDescription
`Start`Formula representing the starting model
`Lower`Formula representing the lower bound model. The terms in `Lower` must remain in the model.
`Upper`Formula representing the upper bound model. The model cannot contain more terms than `Upper`.
`Criterion`Criterion used for the stepwise algorithm, such as `'sse'`
`PEnter`Threshold for `Criterion` to add a term
`PRemove`Threshold for `Criterion` to remove a term
`History`Table representing the steps taken in the fit

The `History` table contains one row for each step, including the initial fit, and the columns described in this table.

ColumnDescription
`Action`

Action taken during the step:

• `'Start'` — First step

• `'Add'` — A term is added

• `'Remove'` — A term is removed

`TermName`
• If `Action` is `'Start'`, `TermName` specifies the starting model specification.

• If `Action` is `'Add'` or `'Remove'`, `TermName` specifies the term added or removed in the step.

`Terms`Model specification in a Terms Matrix
`DF`Regression degrees of freedom after the step
`delDF`Change in regression degrees of freedom from the previous step (negative for steps that remove a term)
`Deviance`Deviance (residual sum of squares) at the step (only for a generalized linear regression model)
`FStat`F-statistic that leads to the step
`PValue`p-value of the F-statistic

The structure is empty unless you fit the model using stepwise regression.

Data Types: `struct`

Information about variables contained in `Variables`, specified as a table with one row for each variable and the columns described in this table.

ColumnDescription
`Class`Variable class, specified as a cell array of character vectors, such as `'double'` and `'categorical'`
`Range`

Variable range, specified as a cell array of vectors

• Continuous variable — Two-element vector `[min,max]`, the minimum and maximum values

• Categorical variable — Vector of distinct variable values

`InModel`Indicator of which variables are in the fitted model, specified as a logical vector. The value is `true` if the model includes the variable.
`IsCategorical`Indicator of categorical variables, specified as a logical vector. The value is `true` if the variable is categorical.

`VariableInfo` also includes any variables that are not used to fit the model as predictors or as the response.

Data Types: `table`

Names of variables, specified as a cell array of character vectors.

• If the fit is based on a table or dataset, this property provides the names of the variables in the table or dataset.

• If the fit is based on a predictor matrix and response vector, `VariableNames` contains the values specified by the `'VarNames'` name-value pair argument of the fitting method. The default value of `'VarNames'` is `{'x1','x2',...,'xn','y'}`.

`VariableNames` also includes any variables that are not used to fit the model as predictors or as the response.

Data Types: `cell`

Input data, specified as a table. `Variables` contains both predictor and response values. If the fit is based on a table or dataset array, `Variables` contains all the data from the table or dataset array. Otherwise, `Variables` is a table created from the input data matrix `X` and response the vector `y`.

`Variables` also includes any variables that are not used to fit the model as predictors or as the response.

Data Types: `table`

## Methods

 addTerms Add terms to generalized linear model compact Compact generalized linear regression model fit (Not Recommended) Create generalized linear regression model plotDiagnostics Plot diagnostics of generalized linear regression model plotResiduals Plot residuals of generalized linear regression model removeTerms Remove terms from generalized linear model step Improve generalized linear regression model by adding or removing terms stepwise (Not Recommended) Create generalized linear regression model by stepwise regression

### Inherited Methods

 coefCI Confidence intervals of coefficient estimates of generalized linear model coefTest Linear hypothesis test on generalized linear regression model coefficients devianceTest Analysis of deviance disp Display generalized linear regression model feval Evaluate generalized linear regression model prediction plotSlice Plot of slices through fitted generalized linear regression surface predict Predict response of generalized linear regression model random Simulate responses for generalized linear regression model

## Copy Semantics

Value. To learn how value classes affect copy operations, see Copying Objects (MATLAB).

## Examples

collapse all

Fit a logistic regression model of probability of smoking as a function of age, weight, and sex, using a two-way interactions model.

Load the `hospital` dataset array.

```load hospital ds = hospital; % just to use the ds name```

Specify the model using a formula that allows up to two-way interactions.

`modelspec = 'Smoker ~ Age*Weight*Sex - Age:Weight:Sex';`

Create the generalized linear model.

`mdl = fitglm(ds,modelspec,'Distribution','binomial')`
```mdl = Generalized linear regression model: logit(Smoker) ~ 1 + Sex*Age + Sex*Weight + Age*Weight Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue ___________ _________ ________ _______ (Intercept) -6.0492 19.749 -0.3063 0.75938 Sex_Male -2.2859 12.424 -0.18399 0.85402 Age 0.11691 0.50977 0.22934 0.81861 Weight 0.031109 0.15208 0.20455 0.83792 Sex_Male:Age 0.020734 0.20681 0.10025 0.92014 Sex_Male:Weight 0.01216 0.053168 0.22871 0.8191 Age:Weight -0.00071959 0.0038964 -0.18468 0.85348 100 observations, 93 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 5.07, p-value = 0.535 ```

The large $p$-value indicates the model might not differ statistically from a constant.

Create response data using just three of 20 predictors, and create a generalized linear model stepwise to see if it uses just the correct predictors.

Create data with 20 predictors, and Poisson response using just three of the predictors, plus a constant.

```rng default % for reproducibility X = randn(100,20); mu = exp(X(:,[5 10 15])*[.4;.2;.3] + 1); y = poissrnd(mu);```

Fit a generalized linear model using the Poisson distribution.

```mdl = stepwiseglm(X,y,... 'constant','upper','linear','Distribution','poisson')```
```1. Adding x5, Deviance = 134.439, Chi2Stat = 52.24814, PValue = 4.891229e-13 2. Adding x15, Deviance = 106.285, Chi2Stat = 28.15393, PValue = 1.1204e-07 3. Adding x10, Deviance = 95.0207, Chi2Stat = 11.2644, PValue = 0.000790094 ```
```mdl = Generalized linear regression model: log(y) ~ 1 + x5 + x10 + x15 Distribution = Poisson Estimated Coefficients: Estimate SE tStat pValue ________ ________ ______ __________ (Intercept) 1.0115 0.064275 15.737 8.4217e-56 x5 0.39508 0.066665 5.9263 3.0977e-09 x10 0.18863 0.05534 3.4085 0.0006532 x15 0.29295 0.053269 5.4995 3.8089e-08 100 observations, 96 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 91.7, p-value = 9.61e-20 ```

expand all