y本文展示了如何使用 R 建構Bootstrap自舉置信區間的示例。還強調了 R 包 ggplot2 用于圖形的用途。但是,在學習引導程式和 R 語言時,學習如何在沒有包的情況下從頭開始應用Bootstrap程式有助于更好地了解 R 的工作原理并加強對Bootstrap的概念了解。
相關視訊:什麼是Bootstrap自抽樣及應用R語言線性回歸預測置信區間執行個體
什麼是Bootstrap自抽樣及R語言Bootstrap線性回歸預測置信區間
,時長05:38
具有标準誤差的自舉置信區間
描述了如何通過建構一個以點估計為中心的區間來建構總體參數的置信區間,其誤差幅度等于标準誤差的兩倍。在這裡,我們将通過應用 bootstrap 并從原始樣本中對許多樣本進行帶放回抽樣來估計标準誤差的大小,每個樣本與原始樣本的大小相同,計算每個樣本的點估計值,并找到該分布的标準差引導統計。
通勤時間
關于 500 名通勤者樣本的變量。
- str(Cotlaa)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM2kjMyUDO0gTM1QmY3gjNzYzX5IDMzETM3AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
為了建構平均通勤時間的置信區間,我們需要從原始樣本中找到點估計(樣本均值)。
- tiean = with(Commta, mean(Time))
- tiean
- ## [1] 29.11
為了找到标準誤差,我們将建立一個包含 1000 行(每個引導樣本一個)和 500 列(每個采樣值一個,以比對原始樣本大小)的巨大矩陣。然後我們将使用 apply() 将 mean() 應用于矩陣的每一行。這種方法不同于作者 R 指南中使用 for 循環的示例,但我們也可以稍後展示這種方法。
首先建立一個大矩陣來存儲所有樣本。
- boot.ames = matrix(sale(Comnta$Tie, size = B * n, replace = TRUE),
- B, n)
用密度圖覆寫直方圖來繪制不同的東西。在這裡,ggplot() 需要一個帶有輸入資料的資料框,是以我們使用 data.frame() 建立一個帶有唯一感興趣的變量的資料框
- require(ggplot2)
- ggplot(dtframeanT = boot.satitics),as(x=meaime)) +
- geom_istram(binwih=0.25,aes(y=..ensity..)) +
- geodnity(olor"red")
我們看到了一個不太不對稱的分布,或多或少呈鐘形。該分布的标準差如下
- tie.s= sd(bo.sattics)
- tie.s
- ## [1] 0.9414
最後,建構置信區間。在這裡,我将誤差範圍向上舍入到小數點後一位,使其具有兩位有效數字,并且在四舍五入時要小心不要使間隔太小。
- me= cilig(10 * 2 * tim.se)/10
- rond(tme.an, 1) + c(-1, 1) * me
- ## [1] 27.2 31.0
現在在上下文中解釋。
我們有 95% 的信心認為,不在家工作的通勤者在平均通勤時間在 27.2 到 31 分鐘之間。
編寫函數
由于有幾個複雜的步驟,是以有一個函數來完成所有這些步驟會很有用,這樣将來我們可以在函數中擷取源代碼,然後調用它。這是一個示例函數,它接受一個參數 x,該參數假定為一個數字樣本并執行 B 次引導。該函數會将有用的資訊輸出到控制台,繪制分布圖,并以清單的形式傳回統計、區間、标準誤差和圖表。
- out= with(tdens botmean(eit))
- ## [1] 66.90 69.56
- out$interval
- ## [1] 66.90 69.56
我們需要謹慎,因為學生樣本不是随機的,而是我們班的友善樣本。這裡有兩個可能的混淆變量:性别和原籍國。
for 循環
for 循環不是一次采集所有樣本,而是一次采集一個樣本。通常,使用 apply() 的 R 代碼比使用 for 循環的代碼更有效。嘗試大量的 bootstrap 複制!
- n = ngth(studentseiht)
- B = 100
- reslt = re(NA, )
- fo(i in 1:) f
- bo.sale= smpe(, replace = TRUE)
- reult[i] mean(udetsHeht[bot.mple])
- with(stdnt, men(Hit) + c(-1, 1) * 2 * sd(result))
- ## [1] 66.89 69.58
比例
考慮估計橙色裡斯糖果的比例問題。選擇了一個有 11 個橙色糖果和 19 個非橙色糖果的學生。讓我們使用 bootstrap 找到橙色 Reese 比例的 95% 置信區間。最簡單的方法是将樣本資料表示為具有 11 個 1 和 19 個 0 的向量,并使用與樣本均值相同的機器
rees.bot= bot.man(rees, 1000,nwith = 1/30)
## [1] 0.1947 0.5386
是以,僅基于這個單一樣本,我們有 95% 的信心認為橙色的真實比例在 0.19 到 0.54 之間。如果我們将所有 48 個樣本組合成一個大樣本,我們可以重做這個問題。觀察到的比例為 0.515,共有 741 個橙色糖果和 699 個非橙色糖果。
- reeses = c(rep(1, 741), rep(0, 699))
- reeses.boot = boot.mean(reeses, 1000, binwidth = 0.005)
## [1] 0.4888 0.5404
均值差異
我将使用學生調查資料集來說明如何使用 bootstrap 來估計均值的差異。有趣的變量是聯系,每周每個學生練習的小時數。
data(Stey)
我們從這個總結中看到,在樣本中,男性每周鍛煉的時間比女性多。如果我們将此學生樣本視為從大學生群體中随機選擇的,我們可以估計每種性别的鍛煉時間差異。
在建構置信區間之前,這裡是兩個分布的圖表。
- geom_boxpot(lor=red,ouolor="ed") +
- geom_oin(poitio osio_jitt(h=0w=0.3)) +
我們使用 length() 來查找每個組的樣本大小。請注意,女性人數為 n[1],男性人數為 n[2]。
n = withnewSt、nt, by(Ec Gende, lengh))
下一個代碼塊為樣本中的男性和女性建立一個矩陣,每個樣本的替換大小相同。然後我們使用 apply() 來微調每個樣本的平均值并取內插補點(男性減去女性)來獲得統計的分布。我們用圖表來檢查對稱性。
- ggplot(data.amex = oot.at), aes( = x)) + ge_ensty()
最後,取點估計(樣本均值的差異)并加上和減去兩倍的标準誤差。檢視未四舍五入的版本後,将兩位有效數字四舍五入到小數點後一位。
boot包
有一個帶有函數 boot() 的包 boot,它在許多情況下都可以進行boottrap。我将重溫通勤時報的例子。
但是内置函數 boot.ci() 将使用多種方法計算 bootstrap confidenceintervals。
boot.ci(t.boot)
基本使用估計的标準誤差。百分位數使用百分位數。BCa 也使用百分位數,但會根據偏差和偏度進行調整。
百分位bootstrap
使用來自 bootstrap 的百分位數的置信區間的想法是從 bootstrap 分布的中間選擇與所需置信水準相對應的端點。
- for ( i in 1:B ) f
- te.boot] = meanmplta,size=tea.neplTRU)
- cofeebot[i] = eanampe(ffee,ize=cen,repla=TRUE)
- g
- quatil(bot.tt0.025,0.975))
- quantie(boottac(0.005,0.995))