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!