美文网首页
R语言统计1:LASSO回归

R语言统计1:LASSO回归

作者: cc的生信随记 | 来源:发表于2023-02-15 15:28 被阅读0次

LASSO回归,全称:least absolute shrinkage and selection operator(最小绝对值收敛和选择算子算法),是一种压缩估计。在拟合广义线性模型的同时进行\color{blue}{变量筛选}(variable selection)和\color{blue}{复杂度调整}(regularization),以提高所得统计模型的预测准确性和可解释性

LASSO回归复杂度调整的程度由参数 λ 来控制,λ 越大对变量较多的线性模型的惩罚力度就越大,从而最终获得一个变量较少的模型。 LASSO回归与\color{blue}{Ridge回归}同属于一个被称为\color{blue}{Elastic} \color{blue}{Net}的广义线性模型家族。 这一家族的模型除了相同作用的参数 λ之外,还有另一个参数 α来控制应对高相关性(highly correlated)数据时模型的性状。 LASSO回归 α=1,Ridge回归 α=0,一般Elastic Net模型 0<α<1

\color{green}{❈} \color{green}{Step1}:加载数据

# install.packages("glmnet")
library(glmnet)

## 定义响应变量
y <- mtcars$hp

## 定义预测变量矩阵
x <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])

\color{green}{❈} \color{green}{Step2}:拟合 Lasso 回归模型

library(glmnet)

# 执行k折交叉验证(https://www.statology.org/k-fold-cross-validation/)并确定产生最低测试均方误差 (MSE) 的 lambda 值
cv_model <- cv.glmnet(x, y, alpha = 1)  

# 找寻最小化测试 MSE 的最佳 lambda 值
best_lambda <- cv_model$lambda.min #l
best_lambda
## [1] 2.215202

# produce plot of test MSE by lambda value
plot(cv_model) 
glmnet-1
★ 图中有两条虚线,左边为\color{green}{均方误差最小}的线,右边为\color{green}{特征少}的线。
ambda.min是指在所有的λ值中,得到最小目标参量均值的那一个;
     lambda.1se是指在 lambda.min一个方差范围内得到最简单模型的那一个λ值;
     λ值到达一定大小之后,继续增加模型自变量个数即缩小λ值,并不能很显著的提高模型性能, lambda.1se 给出的就是一个具备优良性能但是自变量个数最少的模型

\color{green}{❈} \color{green}{Step3}:分析最终模型

# 找寻最佳模型系数
best_model <- glmnet(x, y, alpha = 1 , lambda = best_lambda) 
coef(best_model) 
## 5 x 1 sparse Matrix of class "dgCMatrix"
##                     s0
## (Intercept) 486.013958
## mpg          -2.916499
## wt           21.989615
## drat          .       
## qsec        -19.692037

print(best_model)
## Call:  glmnet(x = x, y = y, alpha = 1, lambda = best_lambda) 

##   Df  %Dev Lambda
## 1  3 80.47  2.215
glmnet()参数 family 规定了回归模型的类型:

family = "gaussian" 适用于一维连续因变量(univariate)
family = "mgaussian" 适用于多维连续因变量(multivariate)
family = "poisson" 适用于非负次数因变量(count)
family = "binomial" 适用于二元离散因变量(binary)
family = "multinomial" 适用于多元离散因变量(category)

★ 没有显示预测变量 drat的系数,因为套索回归将系数一直缩小到零。这意味着它完全从模型中\color{green}{删除},因为它的影响力不够。

\color{green}{Ridge回归}\color{green}{LASSO回归}之间的关键区别。Ridge回归将所有系数缩小为零,但LASSO回归有可能通过将系数完全缩小为零来从模型中删除预测变量。

# 定义一个新矩阵
new = matrix(c(24, 2.5, 3.5, 18.5), nrow = 1, ncol = 4) 

# 使用lasso回归模型预测响应值
predict(best_model, s = best_lambda, newx = new)
##            s1
[1,] 106.6893

★ 根据输入值,模型预测这辆车的hp值为106.6893

# 使用拟合最佳模型进行预测
y_predicted <- predict(best_model, s = best_lambda, newx = x)
y_predicted
##                            s1
## Mazda RX4           158.24933
## Mazda RX4 Wag       152.82914
## Datsun 710          104.06486
## Hornet 4 Drive      111.48428
## Hornet Sportabout   171.96122
## Valiant             111.13639
## Duster 360          210.88907
## Merc 240D            91.15750
## Merc 230             37.83740
## Merc 280            145.29716

# find SST(离差平方和 ) and SSE(残差平方和)
sst <- sum((y - mean(y))^2)
sse <- sum((y_predicted - y)^2)

# find R-Squared
rsq <- 1 - sse/sst
rsq
## [1] 0.8047064

★ 最佳模型能够\color{green}{解释}训练数据响应值中80.47%的变异

\color{orange}{❈} \color{orange}{Step3.1}:拟合广义线性模型

从上面的模型可以看出,drat的系数因为影响力不够被删除,即,可把剩下的参数mpgwtqsec,拿出来组成广义线性方程

mod <- glm(y~mpg+wt+qsec, data = data.frame(x))
summary(mod)
## Call:
## glm(formula = y ~ mpg + wt + qsec, data = data.frame(x))

## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -48.392  -14.285   -6.816   12.320   97.624  

## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  494.570     78.276   6.318 7.81e-07 ***
## mpg           -2.700      2.269  -1.190   0.2442    
## wt            25.042     12.892   1.942   0.0622 .  
## qsec         -20.966      3.865  -5.425 8.68e-06 ***
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

## (Dispersion parameter for gaussian family taken to be 1006.536)

##     Null deviance: 145727  on 31  degrees of freedom
## Residual deviance:  28183  on 28  degrees of freedom
## AIC: 317.8

## Number of Fisher Scoring iterations: 2

★ 依据上面回归系数的结果,有2个指标(wt和qsec)入选,写出logistic回归的方程式:
Logit(y)=494.570 + 25.042 × wt - 20.966 × qsec

\color{orange}{❈} \color{orange}{Step3.2}:Hosmer-Lemeshow拟合优度

# install.packages("ResourceSelection")
library(ResourceSelection)

hoslem.test(mod$y,fitted(mod))
##  Hosmer and Lemeshow goodness of fit (GOF) test

## data:  mod$y, fitted(mod)
## X-squared = -1.4297, df = 8, p-value = 1

★ p = 1,表明无法拒绝原假设

相关文章

网友评论

      本文标题:R语言统计1:LASSO回归

      本文链接:https://www.haomeiwen.com/subject/wlpjkdtx.html