R-抽樣

本文簡(jiǎn)單介紹幾種重抽樣方法 (in R)。

我們生成一組數(shù)據(jù)比原,其中x是我們的觀測(cè)值,y是我們對(duì)其的標(biāo)簽产弹。

# generate random data
set.seed(1111)
x <- c(rnorm(10), rnorm(10, mean=5, sd=5))
y <- c(rep("A", 10), rep("B", 10))
df1 <- data.frame(x,y)
str(df1)
## 'data.frame':    20 obs. of  2 variables:
##  $ x: num  -0.0866 1.3225 0.6397 1.1748 0.1163 ...
##  $ y: chr  "A" "A" "A" "A" ...

Permutation

Permutation相當(dāng)于是一種無放回的重抽樣方法,通常用于假設(shè)檢驗(yàn)弯囊。

# single permutation 
set.seed(2222)
sample(df1$x, replace = FALSE)
##  [1]  9.31952342 -0.08658011  5.56155482  3.71174074  1.17478657  0.63970204
##  [7] -2.93084636  0.18759838  1.38404752  1.28394086  0.11629031  6.77816542
## [13]  1.11777194  0.11760093 -4.08500801  1.32252443  4.59743697 -2.67140783
## [19]  0.67750806  9.95418174

我們可以使用Permutation test檢驗(yàn)A痰哨,B兩組的值是否有差異

# permutation test (n=1000)
set.seed(3333)
permt.ls <- list()
for (i in 1:1000) {
  permt.i <- sample(df1$x, replace = FALSE)
  # calculate the mean of difference from permutated samples
  diff.i <- abs(mean(permt.i[1:10]) - mean(permt.i[11:20]))
  permt.ls[[i]] <- c(permt.i, diff.i)
}
permt.df <- Reduce(rbind, permt.ls)
diff.raw <- abs(mean(df1$x[1:10]) - mean(df1$x[11:20]))
# Calculate the p-value
mean(permt.df[,21] >= diff.raw)
## [1] 0.079

每一次重抽樣后,我們都可以計(jì)算兩組樣本均值的差異匾嘱。如果重抽樣樣本組間差異大于原始樣本組間差異的話斤斧,可以認(rèn)為是一次錯(cuò)誤事件,通過計(jì)算錯(cuò)誤事件在總重抽樣次數(shù)中的占比就可以得到置換檢驗(yàn)的p值霎烙。

在這里1000次重抽樣中撬讽,只有79次是錯(cuò)誤事件,所以我們的p值為0.079

Bootstrap

Bootstrap是一種有放回的重抽樣方法悬垃,通常用于參數(shù)估計(jì)游昼。

# single bootstrap
set.seed(4444)
sample(df1$x, replace = TRUE)
##  [1]  1.1177719  9.9541817 -2.9308464  0.1875984 -2.9308464 -4.0850080
##  [7] -4.0850080  4.5974370  0.1162903  0.6397020  6.7781654  4.5974370
## [13]  1.3225244  9.3195234  1.2839409 -4.0850080  0.6397020  1.1177719
## [19]  0.6775081  3.7117407

例如,我們用bootstrap估計(jì)總體的均值

set.seed(5555)
mean.raw <- mean(df1$x)
mean.i <- c()
# bootstrap (n=1000)
for (i in 1:1000) {
  boot.i <- sample(df1$x, replace = TRUE)
  mean.i[i] <- mean(boot.i)
}
mean.boost <- mean(mean.i)
mean.raw; mean.boost
## [1] 1.908527

## [1] 1.956184

此外尝蠕,我們還可以計(jì)算bootstrap預(yù)測(cè)均值的標(biāo)準(zhǔn)誤(SE)

# calculate the standard error 
mean.se.boost <- sqrt(sum((mean.i - mean.boost)^2)/(1000-1))
mean.se.boost
## [1] 0.788522

Jackknife

Jakknife可以被認(rèn)為是一種leave-one-out的重抽樣方法烘豌,對(duì)于大小為k的數(shù)據(jù)集,將產(chǎn)生k個(gè)大小為k-1的樣本.

jack.ls <- list()

for (i in 1:nrow(df1)) {
  jack.ls[[i]] <- df1[-i,]
}

length(jack.ls); dim(jack.ls[[1]])
## [1] 20

## [1] 19  2

Cross validation

交叉驗(yàn)證將數(shù)據(jù)切分為測(cè)試集和驗(yàn)證集趟佃,常在模型擬合中使用扇谣。例如k-fold cross validation將數(shù)據(jù)劃分為k組不重疊的數(shù)據(jù)集昧捷。

Figure: Illustration of 5-fold CV (https://yey.world/2020/08/31/MAST90083-05/).

# 1-fold cv
set.seed(6666)
training_size <- round(nrow(df1)*0.7)
training_idx <- sample(nrow(df1), size = training_size, replace = FALSE)
training_set <- df1[training_idx,]
val_set <- df1[-training_idx,]

nrow(training_set); nrow(val_set)
## [1] 14

## [1] 6

有時(shí)候闲昭,由于樣本量太小,無法滿足k-fold CV中不重疊分組的要求靡挥,有的樣本不可避免地被重復(fù)使用序矩。

# 5-fold cv
set.seed(7777)
fold_idx <- list()
val_size <- nrow(df1) - training_size
all_idx <- 1:nrow(df1)
for (i in 1:5) {
  fold_idx_i <- unique(unlist(fold_idx))
  if (all(all_idx %in% fold_idx_i) | is.null(fold_idx_i)) {
    fold_idx[[i]] <- sample(all_idx, val_size, replace = FALSE)
  } else if (val_size < length(all_idx[-fold_idx_i])) {
    fold_idx[[i]] <- sample(all_idx[-fold_idx_i], val_size, replace = FALSE)
  } else if (val_size > length(all_idx[-fold_idx_i])) {
    fold_idx[[i]] <- c(all_idx[-fold_idx_i], sample(all_idx, val_size-length(all_idx[-fold_idx_i]), replace = FALSE))
  }
}
fold_data <- lapply(fold_idx, function(i) {
  list(training = df1[-i,], valdation = df1[i,])
})
fold_idx
## [[1]]
## [1] 16  3 19  5 15 14
## 
## [[2]]
## [1] 13  1 18  4  9 17
## 
## [[3]]
## [1]  7 20  6  8  2 12
## 
## [[4]]
## [1] 10 11 14 13  7 15
## 
## [[5]]
## [1]  3 10  2  5 15 12

以上就是對(duì)重抽樣方法的簡(jiǎn)單介紹。

Ref:

https://stats.stackexchange.com/questions/104040/resampling-simulation-methods-monte-carlo-bootstrapping-jackknifing-cross

https://yey.world/2020/08/31/MAST90083-05/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跋破,一起剝皮案震驚了整個(gè)濱河市簸淀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毒返,老刑警劉巖租幕,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拧簸,居然都是意外死亡劲绪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贾富,“玉大人歉眷,你說我怎么就攤上這事〔梗” “怎么了汗捡?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)畏纲。 經(jīng)常有香客問我扇住,道長(zhǎng),這世上最難降的妖魔是什么盗胀? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任台囱,我火速辦了婚禮,結(jié)果婚禮上读整,老公的妹妹穿的比我還像新娘簿训。我一直安慰自己,他們只是感情好米间,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布强品。 她就那樣靜靜地躺著,像睡著了一般屈糊。 火紅的嫁衣襯著肌膚如雪的榛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天逻锐,我揣著相機(jī)與錄音夫晌,去河邊找鬼。 笑死昧诱,一個(gè)胖子當(dāng)著我的面吹牛晓淀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盏档,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼凶掰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蜈亩?” 一聲冷哼從身側(cè)響起懦窘,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稚配,沒想到半個(gè)月后畅涂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡道川,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年午衰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苹丸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苇经,死狀恐怖赘理,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扇单,我是刑警寧澤商模,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蜘澜,受9級(jí)特大地震影響施流,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鄙信,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一瞪醋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧装诡,春花似錦银受、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渔伯,卻和暖如春顶霞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锣吼。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工选浑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玄叠。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓古徒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诸典。 傳聞我的和親對(duì)象是個(gè)殘疾皇子描函,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容