R語言隨機抽樣詳解

專題:隨機抽樣

簡單隨機抽樣

從總體中抽取樣本的方法很多,最常用的方法是簡單隨機抽樣。

簡單隨機抽樣:從容量為N的總體中,任意抽取n個單位作為樣本,使每個可能的樣本被抽中的概率相等的一種抽樣方式。

  • 放回抽樣(重復抽樣):本次從整體中抽取的數據樣本,在下一次抽取時同樣有機會被抽取。
  • 不放回抽樣(不重復抽樣):一旦被抽取為樣本,下次就不能再被抽取瞭。

srswr() srswor() sample()

sample函數

sample可以實現放回隨機抽樣和不放回隨機抽樣,也可以對數據進行隨機分組。

格式:

 sample(x, size, replace=FALS, prob=NULL)

參數說明:

參數 說明
x 為向量,表示抽樣的總體,或者是一個正整數,表示樣本總體為1~n;
size 為樣本容量,即要抽取的樣本個數,是一個非負整數;
replace 表示是否為有放回的抽樣,是一個邏輯值,默認為FALSE,即默認為無放回抽樣;
prob 為權重向量,即x中元素被抽取到的概率,是一個取值0~1的向量,其長度應該與x的長度相同。

從26個大寫字母中不放回隨機抽取5個

> sample(LETTERS,5)
[1] "E" "W" "L" "X" "Q"

將26個大寫字母隨機分成2組,第2組和第1組的比例為7:3

> n<-sample(2,26,replace = TRUE,prob=c(0.7,0.3))
> n
 [1] 1 1 2 1 1 2 2 2 1 1 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1
> sample1<-LETTERS[n==1]
> sample2<-LETTERS[n==2]
> sample1
 [1] "A" "B" "D" "E" "I" "J" "L" "M" "N" "Q" "S" "U" "W" "X" "Y" "Z"
> sample2
 [1] "C" "F" "G" "H" "K" "O" "P" "R" "T" "V"

將26個大寫字母隨機分成3組,每組的個數分配比例為0.4,0.4,0.2

> n<-sample(3,26,replace = TRUE,prob = c(0.4,0.4,0.2))
> n
 [1] 2 1 2 1 3 2 3 1 3 1 1 1 1 2 1 1 2 3 3 1 2 3 3 2 2 3
> sample1<-LETTERS[n==1]
> sample1
 [1] "B" "D" "H" "J" "K" "L" "M" "O" "P" "T"
> sample2<-LETTERS[n==2]
> sample2
[1] "A" "C" "F" "N" "Q" "U" "X" "Y"
> sample3<-LETTERS[n==3]
> sample3
[1] "E" "G" "I" "R" "S" "V" "W" "Z"

有10位學生的學號分別為1,2,…,10,現在要進行畢業答辯,答辯順序要求 隨機產生。請給出代碼。

> sample(10)
 [1]  7  9 10  6  3  4  1  2  5  8
> x=c(1,3,5,7)
> sample(x,size=20,replace=T, prob=c(0.1,0.2,0.3,0.9))
 [1] 5 3 7 7 5 7 7 7 7 5 7 7 7 1 7 3 1 7 1 7

結論:對每一個元素都可以給定一個概率,且每個概率是獨立的,即在參數prob中,不一定所有元素的概率加起來等於1,它隻代表某元素被抽取的概率而已。

模擬拋硬幣遊戲,拋10次,看看出現正面H(Heads)和反面T(Tails)的情況。

將拋硬幣視為有放回的實驗,即將參數replace設置為TRUE。

> sample(c("H","F"),10,replace = TRUE)
 [1] "H" "F" "H" "F" "F" "F" "F" "H" "H" "H"

某籃球運動員投籃命中率為70%,模擬10次投籃的命中(S)和未命中(F)情況。

> sample(c("S","F"),10,replace = TRUE,prob = c(0.7,0.3))
 [1] "S" "S" "F" "S" "S" "S" "F" "S" "S" "S"

srswor函數

Simple random sampling without replacement

Description:Draws a simple random sampling without replacement of size n (equal probabilities, fixed sample size, without replacement).

Usage:srswor(n,N)

Value:Returns a vector (with elements 0 and 1) of size N, the population size. Each element k of this vector indicates the status of unit k (1, unit k is selected in the sample; 0, otherwise).

> library(sampling)
> s<-srswor(10,26)
> s
 [1] 1 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 0 0
> obs<-which(s==1)
> obs
 [1]  1  4  7  9 12 13 16 17 21 23
> sample<-LETTERS[obs]
> sample
 [1] "A" "D" "G" "I" "L" "M" "P" "Q" "U" "W"

在26個中抽取10個,1表示被抽取的狀態,0表示沒有被抽取狀態

srswr函數

Simple random sampling with replacement

Description:Draws a simple random sampling with replacement of size n (equal probabilities, fixed sample size, without replacement).

Usage:srswr(n,N)

Value:Returns a vector of size N, population size. Each element k of this vector indicates the number of replicates for unit k in the sample.

> s<-srswr(10,26)
> s
 [1] 1 2 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0
> obs<-which(s!=0)
> obs
[1]  1  2  6  7 18 19 20 22
> sample<-LETTERS[obs]
> sample
[1] "A" "B" "F" "G" "R" "S" "T" "V"

分層抽樣

分層抽樣將分成不同子總體(或稱為層)的總體中,按規定的比例從不同層中隨機抽取樣品(個體)的方法。

這種方法的優點是,樣本的代表性比較好,抽樣誤差比較小。缺點是抽樣手續較簡單隨機抽樣還要繁雜些。

R語言sampling包的sampling::strata()可以實現

其命令為:

strata(data, stratanames=NULL, size, method=c(“srswor”,“srswr”,“poisson”,“systematic”), pik,description=FALSE)

其中,x為樣本數據, stratanames為分層抽樣要使用的變量,size為各層抽取個數,method指的是抽樣方法,“srswor”、“srswr”、“poisson”、"systematic"分別指不重置簡單抽樣、重置簡單抽樣、泊松抽樣、系統抽樣,pik指的是各數據包含在樣本中的概率,description默認為FALSE,若設置為TRUE則輸出樣本個數和總體個數。返回值ID_unit(被選單元的標志符)、Stratum(單元層)、Prob(包含單元的概率)

> library(sampling)
> x<-strata(c("Species"),size=c(2,3,4),method="srswor",data=iris)
> x
       Species ID_unit Prob Stratum
11      setosa      11 0.04       1
21      setosa      21 0.04       1
68  versicolor      68 0.06       2
83  versicolor      83 0.06       2
98  versicolor      98 0.06       2
102  virginica     102 0.08       3
103  virginica     103 0.08       3
111  virginica     111 0.08       3
112  virginica     112 0.08       3

到此這篇關於R語言隨機抽樣的文章就介紹到這瞭,更多相關R語言隨機抽樣內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: