摘錄|R語言在抽樣技術中的運用

在《抽樣技術》(第四版)一書的末尾有關於R語言代碼如何實現抽樣技術的運用,現在把它搬運到這裡。

————————————————

目錄:

一、準備工作

二、簡單隨機抽樣

三、分層抽樣

四、系統抽樣

五、PPS抽樣

六、Brewer抽樣

七、整群抽樣

——————————————-

數據文件鏈接:pan.baidu.com/s/1bqIK5M 密碼: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

其中1表示抽取到的樣本

調用getdata提取樣本數據

data.srswor<-getdata(data,s)n

名為data.srswor的樣本數據文件(部分預覽)

三、分層抽樣

抽樣要求:以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條數據,分四層,每層75個樣本數據

這裡只獲得了四列數據,所以需要用表連接匹配數據從而獲得完整的樣本數據。

四、系統抽樣

抽樣要求:採用等距抽樣方法抽取樣本容量為300的樣本

抽樣特點:先將總體的全部單元按照一定順序排列,採用簡單隨機抽樣抽取第一個樣本單元(或稱為隨機起點),再順序抽取其餘的樣本單元,這類抽樣方法被稱為系統抽樣。

抽樣思路:

  • 定義每個總體單元的入樣概率,記為pik變數
  • 調用系統抽樣函數「UPsystematic」其參數為總體單元的入樣概率變數
  • 輸出樣本數據

n <-300npik<-rep(n/N,N)ns <- UPsystematic(pik)ndata.sys <- getdata(data,s)n

部分數據預覽(共300條)

五、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

一共287條數據,有些是重複被抽到2次的

六、Brewer抽樣

抽樣要求:以1992年每個縣所擁有的農場數(farms92)為規模變數,採用Brewer抽樣(不放回)抽取樣本容量為300的樣本

抽樣思路:

  • 調用inclusionprobabilities函數定義每個總體單元的入樣概率,第一個參數定義規模變數,第二個參數定義樣本容量
  • 調用Brewer抽樣函數「UPbrewer」,其參數為總體單元的入樣概率變數
  • 輸出樣本數據

n <- 300npik <- inclusionprobabilities(data$farms92,n)ns <- UPbrewer(pik)ndata.brewer <- data[s==1,]n

部分樣本數據預覽(共300條)

七、整群抽樣

抽樣要求:以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 項目總結
女生有做數據分析的么?
洞察「用戶」, 從精準定位用戶群體開始
數據分析,從入門到摔門

TAG:R编程语言 | 抽样技术 | 数据分析 |