網站首頁 編程語言 正文
專題:隨機抽樣
簡單隨機抽樣
從總體中抽取樣本的方法很多,最常用的方法是簡單隨機抽樣。
簡單隨機抽樣:從容量為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
原文鏈接:https://blog.csdn.net/W_chuanqi/article/details/127700240
相關推薦
- 2022-04-07 C++11新特性之列表初始化的具體使用_C 語言
- 2022-07-30 jQuery?UI菜單部件Menu?Widget_jquery
- 2024-01-15 spring boot jpa 執行test測試,發現執行未報錯但是事務會自動回滾
- 2022-09-24 pytorch使用nn.Moudle實現邏輯回歸_python
- 2022-12-24 kali2021.4a使用virtualenv安裝angr的詳細過程_其它綜合
- 2022-12-21 C和C++中argc和argv的含義及用法詳解_C 語言
- 2022-05-05 Flutter如何保證數據操作原子性詳解_Android
- 2022-12-09 c++利用vector創建二維數組的幾種方法總結_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支