R语言统计1:LASSO回归

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,表明无法拒绝原假设

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容