Main Content

Regularize Poisson Regression

This example shows how to identify and remove redundant predictors from a generalized linear model.

Create data with 20 predictors, and Poisson responses 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);

Construct a cross-validated lasso regularization of a Poisson regression model of the data.

[B,FitInfo] = lassoglm(X,y,'poisson','CV',10);

Examine the cross-validation plot to see the effect of the Lambda regularization parameter.

lassoPlot(B,FitInfo,'plottype','CV');    
legend('show') % show legend

Figure contains an axes object. The axes object with title Cross-Validated Deviance of Lasso Fit, xlabel Lambda, ylabel Deviance contains 5 objects of type errorbar, line. One or more of the lines displays its values using only markers These objects represent Deviance with Error Bars, LambdaMinDeviance, Lambda1SE.

The green circle and dashed line locate the Lambda with minimal cross-validation error. The blue circle and dashed line locate the point with minimal cross-validation error plus one standard deviation.

Find the nonzero model coefficients corresponding to the two identified points.

minpts = find(B(:,FitInfo.IndexMinDeviance))
minpts = 7×1

     3
     5
     6
    10
    11
    15
    16

min1pts = find(B(:,FitInfo.Index1SE))
min1pts = 3×1

     5
    10
    15

The coefficients from the minimal plus one standard error point are exactly those coefficients used to create the data.

Find the values of the model coefficients at the minimal plus one standard error point.

B(min1pts,FitInfo.Index1SE)
ans = 3×1

    0.2903
    0.0789
    0.2081

The values of the coefficients are, as expected, smaller than the original [0.4,0.2,0.3]. Lasso works by "shrinkage," which biases predictor coefficients toward zero.

The constant term is in the FitInfo.Intercept vector.

FitInfo.Intercept(FitInfo.Index1SE)
ans = 1.0879

The constant term is near 1, which is the value used to generate the data.