【視頻】什么是Bootstrap自抽樣及應用R語言線性回歸預測置信區(qū)間實例|數據分享
全文鏈接:http://tecdat.cn/?p=21625?
原文出處:拓端數據部落公眾號
自抽樣統(tǒng)計是什么以及為什么使用它?
本文將自抽樣方法與傳統(tǒng)方法進行比較,并了解它為何有用。并在R語言軟件中通過對汽車速度和制動距離數據(查看文末了解數據獲取方式)進行線性回歸預測來實踐它。
相關視頻:什么是Bootstrap自抽樣及應用R語言線性回歸預測置信區(qū)間實例
什么是Bootstrap自抽樣及R語言Bootstrap線性回歸預測置信區(qū)間
,時長05:38
統(tǒng)計學是從數據中學習的科學。統(tǒng)計知識有助于收集數據的正確方法,使用正確的方法分析數據,并有效地呈現從數據中得出的結果。這些方法對于做出決策和預測至關重要,無論是預測消費者對產品的需求;使用文本挖掘過濾垃圾郵件;或在自動駕駛汽車中做出實時決策。
大多數時候,在進行研究時,從總體中收集數據是不切實際的。這可能是因為預算和/或時間限制以及其他因素。取而代之的是,獲取總體的一個子集,并從該子集中收集洞察力以了解有關該人口的更多信息。

這意味著可以從適當抽取的樣本中高效且相對低成本地獲得適當準確的信息。
然而,許多因素會影響樣本反映總體的程度。因此,結論的有效性和可靠性如何?

因此,讓我們談談自抽樣統(tǒng)計。
Bootstrapping 是一種統(tǒng)計程序,它對單個數據集重新采樣以創(chuàng)建許多模擬樣本。_Bootstrap_又稱自展法、自舉法、_自助法_、靴帶法 。
這個過程允許計算標準誤差、置信區(qū)間和假設檢驗”(_Forst)。_自抽樣方法是傳統(tǒng)假設檢驗方法的一種非常有用的替代方法,因為它相當簡單,并且可以減少傳統(tǒng)方法中遇到的一些缺陷,這將在后面討論。統(tǒng)計推斷通常依賴于樣本分布和感興趣特征的標準誤差。傳統(tǒng)方法(或大樣本方法)抽取一個大小為_n的樣本_從總體中提取,該樣本用于計算總體估計值,然后進行推斷?,F在,實際上,只觀察到了一個樣本。但是,存在抽樣分布的概念,如果要對總體進行重新抽樣,它是所有可能估計值的理論集合。該理論指出,在樣本量大等特定條件下,抽樣分布近似正態(tài)分布,分布的標準差等于標準誤。但是如果樣本量不夠大怎么辦?那么,就不一定能假設理論上的抽樣分布是正態(tài)的。這使得很難確定估計的標準誤差,也更難從數據中得出合理的結論。
與傳統(tǒng)方法一樣,大小為_n_的樣本是從自抽樣方法中的總體中抽取的。讓我們將此樣本稱為_S_。然后,不是使用理論來確定所有可能的估計值,而是通過對觀測值進行重采樣并從_S_中替換_m_次來創(chuàng)建采樣分布,每個重采樣集具有_n 個_觀測值?,F在,如果抽樣得當,_S_應該代表總體。因此,通過放回重采樣_S __m_次,就好像_m_樣本是從原始總體中抽取的,得出的估計值將代表傳統(tǒng)方法下的理論分布。

現在我們了解了自抽樣方法,必須注意得出的結果與傳統(tǒng)方法的結果基本相同。此外,自抽樣方法將始終有效,因為它不假設數據的任何潛在分布。這與理論上假設數據是正態(tài)分布的傳統(tǒng)方法形成對比。
傳統(tǒng)的程序需要一個滿足特定假設的檢驗統(tǒng)計量才能獲得有效的結果,這在很大程度上取決于實驗設計。傳統(tǒng)方法也使用理論來說明抽樣分布應該是什么樣子,但如果不滿足理論的假設,結果就會崩潰。
另一方面,自抽樣方法獲取原始樣本數據,然后對其重新采樣以創(chuàng)建許多 [模擬] 樣本。這種方法不依賴于理論,因為可以簡單地觀察采樣分布,并且不必擔心任何假設。這種技術可以準確估計統(tǒng)計數據,這在使用數據做出決策時至關重要。
樣本量
在機器學習中,通常使用與原始數據集相同的樣本大小。
bootstrap 樣本與原始數據集大小相同。結果,一些樣本將在引導樣本中多次表示,而其他樣本則根本不會被選中。
— 第 72 頁,應用預測建模,2013 年。
如果數據集龐大且計算效率存在問題,則可以使用較小的樣本,例如數據集大小的 50% 或 80%。

重復
重復次數必須足夠大,以確保可以對樣本計算有意義的統(tǒng)計數據,例如平均值、標準差和標準誤差。
最少可以重復 20 或 30 次??梢允褂幂^小的值將進一步增加對估計值樣本計算的統(tǒng)計數據的方差。
理想情況下,在給定時間資源的情況下,估計樣本應盡可能大,重復數以百計或數千次。
必須注意的是,增加重新采樣的數量_m_不會增加數據中的信息量。也就是說,將原始集合重采樣 100,000 次并不比僅重采樣 1,000 次有用。集合中的信息量取決于樣本大小_n_,它將在每次重新采樣期間保持不變。因此,更多重采樣的好處是可以更好地估計采樣分布。

了解自抽樣方法的工作原理后,一個合乎邏輯的問題是“自抽樣方法是否過于依賴觀察到的數據?”?這是一個很好的問題,因為重采樣來自初始樣本。正因為如此,假設異常值會扭曲重新采樣的估計值是合乎邏輯的。雖然這是真的,但如果考慮到傳統(tǒng)的做法,可以看出,數據集中的異常值也會扭曲均值并夸大估計的標準誤差。因此,雖然人們可能會認為異常值會在重新采樣的數據中多次出現并扭曲結果,從而使傳統(tǒng)方法更好,但自抽樣方法與傳統(tǒng)方法一樣依賴數據。bootstrapping 的優(yōu)點是它是一種直接得出標準誤差和置信區(qū)間估計值的方法,而且它很方便,因為它避免了重復實驗以獲取其他組采樣數據的成本。盡管不可能知道大多數問題的真實置信區(qū)間_。_
R語言基于Bootstrap的線性回歸預測置信區(qū)間估計方法
我們知道參數的置信區(qū)間的計算,這些都服從一定的分布(t分布、正態(tài)分布),因此在標準誤前乘以相應的t分值或Z分值。但如果我們找不到合適的分布時,就無法計算置信區(qū)間了嗎?幸運的是,有一種方法幾乎可以用于計算各種參數的置信區(qū)間,這就是Bootstrap 法。
本文使用BOOTSTRAP來獲得預測的置信區(qū)間。我們將在線性回歸基礎上討論。
> reg=lm(dist~speed,data=cars)
> points(x,predict(reg,newdata= data.frame(speed=x)))

這是一個單點預測。當我們想給預測一個置信區(qū)間時,預測的置信區(qū)間取決于參數估計誤差。
預測置信區(qū)間
讓我們從預測的置信區(qū)間開始
> for(s in 1:500){
+ indice=sample(1:n,size=n,
+ replace=TRUE)
+ points(x,predict(reg,newdata=data.frame(speed=x)),pch=19,col="blue")

藍色值是通過在我們的觀測數據庫中重新取樣獲得的可能預測值。值得注意的是,在殘差正態(tài)性假設下(回歸線的斜率和常數估計值),置信區(qū)間(90%)如下所示:
predict(reg,interval ="confidence",

在這里,我們可以比較500個生成數據集上的值分布,并將經驗分位數與正態(tài)假設下的分位數進行比較,
> hist(Yx,proba=TRUE
> boxplot(Yx,horizontal=TRUE
> polygon(c( x ,rev(x I]))))

可以看出,經驗分位數與正態(tài)假設下的分位數是可以比較的。
> quantile(Yx,c(.05,.95))
5% ? ? ?95%
58.63689 70.31281
+ level=.9,newdata=data.frame(speed=x))
fit ? ? ?lwr ? ? ?upr
1 65.00149 59.65934 70.34364
感興趣變量的可能值
現在讓我們看看另一種類型的置信區(qū)間,關于感興趣變量的可能值。這一次,除了提取新樣本和計算預測外,我們還將在每次繪制時添加噪聲,以獲得可能的值。
> for(s in 1:500){
+ indice=sample(1:n,size=n,
+ base=cars[indice,]
+ erreur=residuals(reg)
+ predict(reg,newdata=data.frame(speed=x))+E

在這里,我們可以(首先以圖形方式)比較通過重新取樣獲得的值和在正態(tài)假設下獲得的值,
> hist(Yx,proba=TRUE)
> boxplot(Yx) abline(v=U[2:3)
> polygon(c(D$x[I,rev(D$x[I])

數值上給出了以下比較
> quantile(Yx,c(.05,.95))
5% ? ? ?95%
44.43468 96.01357
U=predict(reg,interval ="prediction"
fit ? ? ?lwr ? ? ?upr
1 67.63136 45.16967 90.09305
這一次,右側有輕微的不對稱。顯然,我們不能假設高斯殘差,因為有更大的正值,而不是負值??紤]到數據的性質,這是有意義的(制動距離不能是負數)。
然后開始討論在供應中使用回歸模型。為了獲得具有獨立性,有人認為必須使用增量付款的數據,而不是累計付款。
可以創(chuàng)建一個數據庫,解釋變量是行和列。
> base=data.frame(
+ y
> head(base,12)
y ? ai bj
1 ?3209 2000 ?0
2 ?3367 2001 ?0
3 ?3871 2002 ?0
4 ?4239 2003 ?0
5 ?4929 2004 ?0
6 ?5217 2005 ?0
7 ?1163 2000 ?1
8 ?1292 2001 ?1
9 ?1474 2002 ?1
10 1678 2003 ?1
11 1865 2004 ?1
12 ? NA 2005 ?1

然后,我們可以從基于對數增量付款數據的回歸模型開始,該模型基于對數正態(tài)模型
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) ? ? ? ? 7.9471 ? ? 0.1101 ?72.188 6.35e-15 ***
as.factor(ai)2001 ? 0.1604 ? ? 0.1109 ? 1.447 ?0.17849
as.factor(ai)2002 ? 0.2718 ? ? 0.1208 ? 2.250 ?0.04819 *
as.factor(ai)2003 ? 0.5904 ? ? 0.1342 ? 4.399 ?0.00134 **
as.factor(ai)2004 ? 0.5535 ? ? 0.1562 ? 3.543 ?0.00533 **
as.factor(ai)2005 ? 0.6126 ? ? 0.2070 ? 2.959 ?0.01431 *
as.factor(bj)1 ? ? -0.9674 ? ? 0.1109 ?-8.726 5.46e-06 ***
as.factor(bj)2 ? ? -4.2329 ? ? 0.1208 -35.038 8.50e-12 ***
as.factor(bj)3 ? ? -5.0571 ? ? 0.1342 -37.684 4.13e-12 ***
as.factor(bj)4 ? ? -5.9031 ? ? 0.1562 -37.783 4.02e-12 ***
as.factor(bj)5 ? ? -4.9026 ? ? 0.2070 -23.685 4.08e-10 ***
---
Signif. codes: ?0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1753 on 10 degrees of freedom
(15 observations deleted due to missingness)
Multiple R-squared: 0.9975, ? ?Adjusted R-squared: 0.9949
F-statistic: 391.7 on 10 and 10 DF, ?p-value: 1.338e-11
>
exp(predict(reg1,
+ newdata=base)+summary(reg1)$sigma^2/2)
[,1] ? [,2] [,3] [,4] [,5] [,6]
[1,] 2871.2 1091.3 41.7 18.3 ?7.8 21.3
[2,] 3370.8 1281.2 48.9 21.5 ?9.2 25.0
[3,] 3768.0 1432.1 54.7 24.0 10.3 28.0
[4,] 5181.5 1969.4 75.2 33.0 14.2 38.5
[5,] 4994.1 1898.1 72.5 31.8 13.6 37.1
[6,] 5297.8 2013.6 76.9 33.7 14.5 39.3
> sum(py[is.na(y)])
[1] 2481.857

這與鏈式梯度法的結果略有不同,但仍然具有可比性。我們也可以嘗試泊松回歸(用對數鏈接)
glm(y~
+ as.factor(ai)+
+ as.factor(bj),data=base,
+ family=poisson)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) ? ? ? ?8.05697 ? ?0.01551 519.426 ?< 2e-16 ***
as.factor(ai)2001 ?0.06440 ? ?0.02090 ? 3.081 ?0.00206 **
as.factor(ai)2002 ?0.20242 ? ?0.02025 ? 9.995 ?< 2e-16 ***
as.factor(ai)2003 ?0.31175 ? ?0.01980 ?15.744 ?< 2e-16 ***
as.factor(ai)2004 ?0.44407 ? ?0.01933 ?22.971 ?< 2e-16 ***
as.factor(ai)2005 ?0.50271 ? ?0.02079 ?24.179 ?< 2e-16 ***
as.factor(bj)1 ? ?-0.96513 ? ?0.01359 -70.994 ?< 2e-16 ***
as.factor(bj)2 ? ?-4.14853 ? ?0.06613 -62.729 ?< 2e-16 ***
as.factor(bj)3 ? ?-5.10499 ? ?0.12632 -40.413 ?< 2e-16 ***
as.factor(bj)4 ? ?-5.94962 ? ?0.24279 -24.505 ?< 2e-16 ***
as.factor(bj)5 ? ?-5.01244 ? ?0.21877 -22.912 ?< 2e-16 ***
---
Signif. codes: ?0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 46695.269 ?on 20 ?degrees of freedom
Residual deviance: ? ?30.214 ?on 10 ?degrees of freedom
(15 observations deleted due to missingness)
AIC: 209.52
Number of Fisher Scoring iterations: 4
> predict(reg2,
newdata=base,type="response")
> sum(py2[is.na(y)])
[1] 2426.985

預測結果與鏈式梯度法得到的估計值吻合??藙谒埂な┟芴兀↘laus Schmidt)和安吉拉·溫什(Angela Wünsche)于1998年在鏈式梯度法、邊際和最大似然估計中建立了與最小偏差方法的聯系。
數據獲取
在下面公眾號后臺回復“汽車數據”,可獲取完整數據。

點擊文末“閱讀原文”
獲取全文完整資料。
本文選自《R語言基于Bootstrap的線性回歸預測置信區(qū)間估計方法》。
點擊標題查閱往期內容
R語言參數自抽樣法Bootstrap:估計MSE、經驗功效、杰克刀Jackknife、非參數自抽樣法可視化自測題
數據分享|R語言Bootstrap、百分位Bootstrap法抽樣參數估計置信區(qū)間分析通勤時間和學生鍛煉數據
R語言實現隨機前沿分析SFA、數據包絡分析DEA、自由處置包分析FDH和BOOTSTRAP方法
R語言GARCH模型對股市sp500收益率bootstrap、滾動估計預測VaR、擬合診斷和蒙特卡羅模擬可視化
R語言BOOTSTRAP(自舉法,自抽樣法)估計回歸模型置信區(qū)間分析股票收益
R語言實現隨機前沿分析SFA、數據包絡分析DEA、自由處置包分析FDH和BOOTSTRAP方法
R語言Bootstrap的嶺回歸和自適應LASSO回歸可視化
R語言基于Bootstrap的線性回歸預測置信區(qū)間估計方法
R語言使用bootstrap和增量法計算廣義線性模型(GLM)預測置信區(qū)間
R語言中回歸模型預測的不同類型置信區(qū)間應用比較分析
R語言中固定與隨機效應Meta分析 - 效率和置信區(qū)間覆蓋
R語言自適應LASSO 多項式回歸、二元邏輯回歸和嶺回歸應用分析
R語言分段線性回歸分析預測車輛的制動距離
R語言時變面板平滑轉換回歸模型TV-PSTR分析債務水平對投資的影響
R語言stan進行基于貝葉斯推斷的回歸模型
R語言線性回歸和時間序列分析北京房價影響因素可視化案例
R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例
R語言用標準最小二乘OLS,廣義相加模型GAM?,樣條函數進行邏輯回歸LOGISTIC分類
R語言實現CNN(卷積神經網絡)模型進行回歸數據分析
R語言中實現廣義相加模型GAM和普通最小二乘(OLS)回歸