拓端tecdat|R語言Bootstrap的嶺回歸和自適應(yīng)LASSO回歸可視化
原文鏈接:http://tecdat.cn/?p=22921
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
擬合嶺回歸和LASSO回歸,解釋系數(shù),并對(duì)其在λ范圍內(nèi)的變化做一個(gè)直觀的可視化。
# 加載CBI數(shù)據(jù)
# 子集所需的變量(又稱,列)
CBI_sub <- CBI
# 重命名變量列(節(jié)省大量的輸入)
names(CBI_sub)[1] <- "cbi"
# 只要完整案例,刪除缺失值。
CBI_sub <- CBI_sub[complete.cases(CBI_sub),]
#現(xiàn)在檢查一下CBI_sub里面的內(nèi)容
names(CBI_sub)

# 設(shè)置控制參數(shù)
control = method = "cv",number=5) ? ? # 5折CV
cbi ~ ., data = CBI_sub, method = "glmnet",
trControl = control, preProc = c("center","scale"), ?# 中心和標(biāo)準(zhǔn)化數(shù)據(jù)
# 得到系數(shù)估計(jì)值(注意,我們真正關(guān)心的是β值,而不是S.E.)。
coef(ridge_caret.fit, bestTune$lambda)

cbi ~ ., data = CBI_sub, method = "glmnet",
tuneGrid = expand.grid(alpha = 1,
# 獲得系數(shù)估計(jì)
coef(lasso_caret,bestTunelambda)

使用glmnet軟件包中的相關(guān)函數(shù)對(duì)嶺回歸和lasso套索回歸進(jìn)行分析。?
準(zhǔn)備數(shù)據(jù) ?
注意系數(shù)是以稀疏矩陣格式表示的,因?yàn)檠刂齽t化路徑的解往往是稀疏的。使用稀疏格式在時(shí)間和空間上更有效率?
# 擬合嶺回歸模型
glmnet(X, Y, alpha = 0)
#檢查glmnet模型的輸出(注意我們擬合了一個(gè)嶺回歸模型
#記得使用print()函數(shù)而不是summary()函數(shù)
print(glmnet.fit)

# 輸出最佳lamda處的嶺回歸coefs
coef(glmnet.fit, s = lambda.1se)

繪制結(jié)果?
#
plot(ridge_glmnet.fit, label = TRUE)

圖中顯示了隨著lambda的變化,模型系數(shù)對(duì)整個(gè)系數(shù)向量的L1-norm的路徑。上面的軸表示在當(dāng)前l(fā)ambda下非零系數(shù)的數(shù)量,這也是lasso的有效自由度(df)。?
par(mfrow=c(1,2)) ?# 建立1乘2的繪圖環(huán)境
plot_glmnet(ridge_glmnet.fit, xvar = "lambda", label=6, xlab = expression(paste("log(", lambda, ")")), ylab = expression(beta)) ? # "標(biāo)簽"是指你想讓圖表顯示的前N個(gè)變量。

# 進(jìn)行變量選擇,比如說,我想根據(jù)λ>0.1的標(biāo)準(zhǔn)或其他一些值來選擇實(shí)際系數(shù)。
coef(ridge_glmnet.fit, s = 0.1)

交叉驗(yàn)證的嶺回歸?
#
plot(cv.ridge)
# 我們可以查看選定的lambda和相應(yīng)的系數(shù)。例如:
lambda.min

# 根據(jù)最小的lambda(懲罰)選擇變量

# ?lambda.min是λ的值,它使交叉驗(yàn)證的平均誤差最小
# 選擇具有最大懲罰性的一個(gè)
coef

## 對(duì)lasso模型做同樣的處理

數(shù)據(jù)挖掘
使用自適應(yīng)LASSO進(jìn)行函數(shù)形式規(guī)范檢查
# 加載CBI數(shù)據(jù)
CBI <- read.csv("dat.csv")
#對(duì)需要的變量進(jìn)行取子集(列)
names(CBI)<- "cbi"
fitpoly(degree = 2, thre = 1e-4) ? # 設(shè)置多項(xiàng)式的度數(shù)為2

bootstrap?
boot(poly.fit1, nboot = 5) ? #5次bootstrap迭代


交叉驗(yàn)證?
# 交叉驗(yàn)證,10折CV
cbi ~ ., data = CBI_sub, degrees.cv = 1:3,)

# 提取最佳模型并進(jìn)行bootstrap
boot(cv.pred, nboot = 5) ? # 5次bootstrap
# 繪制cv.boot的預(yù)測值的邊際效應(yīng)
marg(cv.boot))

補(bǔ)充
獲得嶺回歸和LASSO模型的bootstrap平均數(shù)
#如果你想要S.E.,通過bootstrap模擬得到它。
library(boot)
boot(CBI_sub, function(data, idx)
bootSamples

最受歡迎的見解
1.R語言多元Logistic邏輯回歸 應(yīng)用案例
2.面板平滑轉(zhuǎn)移回歸(PSTR)分析案例實(shí)現(xiàn)
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
4.R語言泊松Poisson回歸模型分析案例
5.R語言回歸中的Hosmer-Lemeshow擬合優(yōu)度檢驗(yàn)
6.r語言中對(duì)LASSO回歸,Ridge嶺回歸和Elastic Net模型實(shí)現(xiàn)
7.在R語言中實(shí)現(xiàn)Logistic邏輯回歸
8.python用線性回歸預(yù)測股票價(jià)格
9.R語言如何在生存分析與Cox回歸中計(jì)算IDI,NRI指標(biāo)