用R中的包实现逐步回归

逐步回归

  • 逐步回归三种策略
  • 计算逐步回归
    • MASS包的stepAIC()方法
    • leaps包的regsubsets()方法
    • caret包的train()方法

逐步回归三种策略

1.前向选择从模型中没有预测变量开始,迭代地添加最多的贡献预测变量,并在改进不再具有统计显着性时停止。
2.向后选择(或向​​后消除),从模型中的所有预测变量(完整模型)开始,迭代地移除最少的贡献预测变量,并在您拥有所有预测变量具有统计显着性的模型时停止。
3.逐步选择(或顺序替换),这是前向和后向选择的组合。从没有预测变量开始,然后依次添加最有贡献的预测变量(如前向选择)。添加每个新变量后,删除任何不再提供模型拟合改进的变量(如向后选择)。

前向选择和逐步选择可以应用于高维配置,其中样本数n不如预测变量p的数量,例如在基因组数据中。
向后选择要求样本数n大于变量数p,以便可以拟合整个模型。

计算逐步回归

MASS包的stepAIC()方法

有许多函数和R包用于计算逐步回归。 这些包括:stepAIC()[MASS包],由AIC选择最佳型号。 它有一个名为direction的选项,它可以采用以下值:i)“both”(对于逐步回归,前向和后向选择); “backward”(用于向后选择)和“forward”(用于向前选择)。 它返回最好的最终模型

library(MASS)
# Fit the full model 
full.model <- lm(Fertility ~., data = swiss)
# Stepwise regression model
step.model <- stepAIC(full.model, direction = "forward", 
                      trace = FALSE)
summary(step.model)

用R中的包实现逐步回归_第1张图片

leaps包的regsubsets()方法

其调整参数nvmax指定要包含在模型中的最大预测变量数。 它返回多个不同大小的模型,最高可达nvmax。 您需要比较不同模型的性能以选择最佳模型。 regsubsets()有选项方法,它可以取值“backforward”,“向前”和“forward”(前向和后向选择的组合)。

models <- regsubsets(Fertility~., data = swiss, nvmax = 5,
                     method = "forward")
summary(models)

用R中的包实现逐步回归_第2张图片

caret包的train()方法

以下示例使用swiss数据集执行向后选择(method =“leapBackward”),以根据社会经济指标确定用于预测生育率的最佳模型。由于数据集仅包含5个预测变量,因此我们将nvmax从1变为5,从而识别出具有不同大小的5个最佳模型:最佳1变量模型,最佳2变量模型,…,最佳5 变量模型。

我们将使用10倍交叉验证来估计5个模型中每个模型的平均预测误差(RMSE)(参见章节@ref(交叉验证))。 RMSE统计度量用于比较5个模型并自动选择最佳模型,其中最佳定义为最小化RMSE的模型。

# Set seed for reproducibility
set.seed(123)
# Set up repeated k-fold cross-validation
train.control <- trainControl(method = "cv", number = 10)
# Train the model
step.model <- train(Fertility ~., data = swiss,
                    method = "leapBackward", 
                    tuneGrid = data.frame(nvmax = 1:5),
                    trControl = train.control
                    )
step.model$results

用R中的包实现逐步回归_第3张图片
上面的输出显示了不同的指标及其标准偏差,用于比较5种最佳模型的准确性。
nvmax:模型中变量的数量。 例如,nvmax = 2,指定最佳的2变量模型
RMSE和MAE是衡量每个模型的预测误差的两个不同指标。 RMSE和MAE越低,模型越好。
Rsquared表示观察到的结果值与模型预测的值之间的相关性。 R平方越高,模型越好

你可能感兴趣的:(技术分享)