摘錄|R語言在抽樣技術中的運用
在《抽樣技術》(第四版)一書的末尾有關於R語言代碼如何實現抽樣技術的運用,現在把它搬運到這裡。
————————————————
目錄:
一、準備工作
二、簡單隨機抽樣
三、分層抽樣
四、系統抽樣
五、PPS抽樣
六、Brewer抽樣
七、整群抽樣
——————————————-
數據文件鏈接:https://pan.baidu.com/s/1bqIK5MR 密碼:0jdl
agpop數據文件是美國政府每五年做一次有關農業的普查,收集50個州的所有農場的有關數據。共3078個美國縣級或與縣級規模相當的農場數據。
這裡沒有對每個變數進行具體解釋分析了。本文主要學習如何用R來從總體中抽取一部分數據。
一、準備工作
所謂抽樣,簡單點來說,就是從總體中按某種方法得到一個樣本。比如有10000個數據抽取300個樣本。主要用到的R包是sampling和survey包。
準備工作:安裝並導入sampling包,survey包
install.packages(sampling)ninstall.packages(survey)nlibrary(grid)nlibrary(sampling)nlibrary(survey)n
導入原始文件並對進行缺失值做剔除處理:
setwd("c:UsersAdministratordesktop")ndata <- read.csv("agpop.csv")nattach(data)nnew <-acres92>=0&acres87>=0&acres82>=0ndata <- data[new,]ndetach(data)n
這個時候數據從3078條變為了3041條數據,即剔除了缺失值的完整數據。
二、簡單隨機抽樣
抽樣要求:不放回簡單隨機抽樣樣本容量300的樣本
抽樣特點:簡單隨機抽樣是應用最廣的抽樣方法。
抽樣思路:
- 調用不放回簡單隨機抽樣函數「srswor」,其第一個參數為抽取的樣本容量n,第二個參數為總體單位數量N。所得抽樣結果為一個取值為1或0的變數。1代表這個樣本單元被抽中,0表示未被抽中。
- 輸出樣本數據
N<-nrow(data)nn <-300ns<-srswor(n,N)nsn
調用getdata提取樣本數據
data.srswor<-getdata(data,s)n
三、分層抽樣
抽樣要求:以region為分層變數,每層簡單隨機抽取75個樣本單元
抽樣特點:分層抽樣要求層內方差儘可能小,層間方差儘可能大
抽樣思路:
- 定義分層抽樣涉及的變數:總體單位數量N,第h層單位總數Nh,第h層層權Wh,層數L,各層樣本單位數量nh
- strata的第一個參數為總體數據集,第二個參數是分層變數,第三個是各層樣本單位數量,第四個參數為各層的抽樣方法(通常為srswor簡單隨機抽樣)
- 輸出樣本文件
N <- nrow(data)nNh <- table(data$region)nWh <- Nh/NnL <- length(unique(data$region))nnh <- rep(75,L)n
利於分層函數strata進行抽樣
st <- sampling:::strata(data[order(data$region),], stratanames = "region", n size = c(75, 75, 75, 75), method="srswor")n
生成數據文件
data.strata <- getdata(data,st)n
這裡只獲得了四列數據,所以需要用表連接匹配數據從而獲得完整的樣本數據。
四、系統抽樣
抽樣要求:採用等距抽樣方法抽取樣本容量為300的樣本
抽樣特點:先將總體的全部單元按照一定順序排列,採用簡單隨機抽樣抽取第一個樣本單元(或稱為隨機起點),再順序抽取其餘的樣本單元,這類抽樣方法被稱為系統抽樣。
抽樣思路:
- 定義每個總體單元的入樣概率,記為pik變數
- 調用系統抽樣函數「UPsystematic」其參數為總體單元的入樣概率變數
- 輸出樣本數據
n <-300npik<-rep(n/N,N)ns <- UPsystematic(pik)ndata.sys <- getdata(data,s)n
五、pps抽樣
抽樣要求:以1992年每個縣所擁有的農場數(farms92)為規模變數,採用PPS抽樣(有放回)抽取樣本容量為300的樣本
抽樣特點:不等概抽樣分為兩種,放回不等概和不放回不等概。前者主要方法是PPS抽樣,後者主要方法是布魯爾法(Brewer)
抽樣思路:
- 調用inclusionprobabilities函數定義每個總體單元的入樣概率,第一個參數定義規模變數,第二個參數定義樣本容量
- 調用PPS抽樣函數「UPmultinomial」,其參數為總體單元的入樣概率變數,所得抽樣結果s表示總體單元被抽中的次數(0表示未被抽中,1表示被抽中1從,2表示被抽中2次,以此類推。)
- 輸出樣本數據
n <-300npik <-inclusionprobabilities(data$farms92,n)ns <- UPmultinomial(pik)nsn
生成樣本數據文件
data.pps <- data[s!=0,]n
六、Brewer抽樣
抽樣要求:以1992年每個縣所擁有的農場數(farms92)為規模變數,採用Brewer抽樣(不放回)抽取樣本容量為300的樣本
抽樣思路:
- 調用inclusionprobabilities函數定義每個總體單元的入樣概率,第一個參數定義規模變數,第二個參數定義樣本容量
- 調用Brewer抽樣函數「UPbrewer」,其參數為總體單元的入樣概率變數
- 輸出樣本數據
n <- 300npik <- inclusionprobabilities(data$farms92,n)ns <- UPbrewer(pik)ndata.brewer <- data[s==1,]n
七、整群抽樣
抽樣要求:以state為分群變數,不放回簡單隨機抽樣方法抽五個群
抽樣特點:將總體中各單位歸併成若干個互不交叉、互不重複的集合,稱之為群;然後以群為抽樣單位進行單純隨機抽樣抽取個體的一種抽樣方式。
抽樣思路:
- 設定樣本群數,這裡設置為5
- 調用整群抽樣函數cluster,使用不放回簡單隨機抽樣方法進行等概率整群抽樣,第一個參數是總體數據框,第二個參數是入群變數,第三個參數size設定樣本群數,參數method設定群的抽樣方法。設定description=TRUE運行結果會顯示抽樣信息,本例中我們抽取的群數為5,總體中基本單位有3041個,最終樣本中的基本單位有355個。
- 輸出樣本數據
c <- sampling:::cluster(data,clustername="state",size=5,method="srswor",description=TRUE)n
c <- getdata(data,c)n
除了上面的方法,書中還涉及了樣本估計和多階段抽樣(等概率兩階段抽樣和兩階段放回不等概抽樣),但考慮不常用且代碼複雜,有些地方頻繁報錯,這次就不先放上來了,有興趣的可以去書里找找。
完結撒花?(^?^*)~~
推薦閱讀:
※「一起學」Udaicty 數據分析(入門)P4 項目總結
※女生有做數據分析的么?
※洞察「用戶」, 從精準定位用戶群體開始
※數據分析,從入門到摔門