Introduction
In statistics, Mallows's Cp
, named for Colin Lingwood Mallows, an English statistician, is used to assess the fit of a regression model that has been estimated using ordinary least squares. Models with a Mallows' Cp
value near P+1 (i.e. the number of explanatory variables + 1) have a low bias. If every potential model has a high value for Mallows' Cp
, this indicates that some important predictor variables are likely missing from each model.
Traditionally, Mallow's Cp
has always been estimated from Linear models. In R, there are two packages that does this very well. It is easier to estimates from wle package because it does not require nested models like the olsrr package. In addition, olrss
can only estimate Mallow's Cp
from linear models. Unfortunately, wle
has been archieved by CRAN.
In this blog, I share with you a new method from Dyn4cast package that is capable of estimating the Mallow's Cp
from lm, glm and other forms of non-linear models. It is a one line code and easy to use. The usage is as follows:
MallowsCp(Model, y, x, type, Nlevels = 0)
Model
is the model estimated
type
falls under LM, ALM, GLM, N-LM
types of model. N-LM is not LM.
y
is vector of the dependent variable data
x
is vector of independent variable data
Nlevels
is the additional variables created by the model during estimation, defaults to 0
is none is provided.
Load library
library(Dyn4cast)
library(greybox)
library(splines)
binary <- readRDS("data/binary.RDS")
linear <- readRDS("data/linear.RDS")
others <- readRDS("data/others.RDS")
Mallow’s Cp from lm model
Model <- lm(Income ~ ., data = linear)
Type <- "LM"
MallowsCp(Model = Model, y = linear$Income, x = linear[, -1], type = Type, Nlevels = 0)
[1] 5
Mallow’s Cp from ALM model
Model <- alm(Income ~ ., data = linear)
Type <- "ALM"
MallowsCp(Model = Model, y = linear$Income, x = linear[, -1], type = Type, Nlevels = 0)
[1] 5
Mallow’s Cp from GLM model
Model <- glm(GENDER ~ ., data = binary, family = binomial(link = "logit"))
Type <- "GLM"
MallowsCp(Model = Model, y = binary$GENDER, x = binary[, -1], type = Type, Nlevels = 0)
[1] 9
Mallow’s Cp from other models: splines, ARIMA
y <- others$Total
x <- others$Series
Model <- lm(others$Total ~ bs(Series, knots = c(30, 115)), data = others)
Type <- "LM"
MallowsCp(Model = Model, y = y, x = x, type = Type, Nlevels = 0)
[1] 2
# smooth.spline is not a model
Model <- smooth.spline(others$Series, others$Total)
Type <- "LM"
MallowsCp(Model = Model, y = y, x = x, type = Type, Nlevels = 0)
[1] NaN
Model <- forecast::auto.arima(others$Total)
Type <- "LM"
MallowsCp(Model = Model, y = x, x = x, type = Type, Nlevels = 0)
[1] 2