R语言 分层抽样---分层随机抽样(SRS) strata的使用(一)

来源:互联网 发布:idg 知乎 编辑:程序博客网 时间:2024/05/01 17:52

R语言 分层抽样---分层随机抽样(SRS) strata的使用


例子 一:

手动创新一个数据框,如下。

test    a  b  c d1   2 qw a1 y2   2 qw a1 y3   3 we b1 y4   4 er b1 y5   4 er c1 y6   5 wd c1 y7   5 rt d1 y8   6 rt d2 n9   7 we d1 n10  7 we d1 n11  8 we d1 n12  8 we d1 n13  8 we d1 n14  9 we d1 n15  9 we d1 n16  9 we d1 n17 10 we d1 y18 10 we d1 y19 10 we d1 y20 10 we d1 y21 10 we d1 y22 10 we d1 y23 11 we d1 y24 11 we d1 y25 11 we d1 y26 11 we d1 y27 11 we d1 y28 11 we d1 y29 11 we d1 y30 11 we d1 y
查看各层分布情况:
table(test$d) n  y  9 21  
排序:
test=test[order(test$d),]
语法:
strata(data, stratanames=NULL, size, method=c("srswor","srswr","poisson","systematic"), pik,description=FALSE)

data: 带抽样数据。

stratanames: 进行分层所依据的变量名称。

size: 各层中要抽出的观测样本数。

method: 选择4中抽样方法,分别为无放回、有放回、泊松、系统抽样,默认为srswor。

pik: 设置各层中样本的抽样概率。

description: 选择是否输出含有各层基本信息的结果。

四个任选一:c("srswor","srswr","poisson","systematic")
用法:
sized1= round(0.7*length(test$d))
sized2=1-sized1
选择某一列作为分层依据:这里例子选的是 d 列
st=strata(test,stratanames=c("d"),size=c(sized), method="srswor")
分层后的数据:(ID_unit,是每层随机行被选中了,同时显示行的ID,Prob 是分层的概率,Stratum是分了多少层
  
st   d ID_unit      Prob Stratum28 y      28 0.1428571       129 y      29 0.1428571       130 y      30 0.1428571       18  n       8 0.7777778       29  n       9 0.7777778       211 n      11 0.7777778       212 n      12 0.7777778       213 n      13 0.7777778       214 n      14 0.7777778       215 n      15 0.7777778       2
这里再次用pik来说明一下分层效果:
st=strata(test,stratanames=c("d"),size=c(sized),pik=c(.25,.75), method="srswor")> st   d ID_unit      Prob Stratum5  y       5 0.1428571       17  y       7 0.1428571       123 y      23 0.1428571       18  n       8 0.7777778       210 n      10 0.7777778       211 n      11 0.7777778       212 n      12 0.7777778       213 n      13 0.7777778       214 n      14 0.7777778       216 n      16 0.7777778       2
查看分层后的全部数据:
getdata(test,st)
   b  c a ID_unit Prob Stratum1 qw a1 2       1  0.5       13 we b1 3       3  1.0       24 er b1 4       4  0.5       36 wd c1 5       6  0.5       48 rt d2 6       8  1.0       5
拿出b,c,a放到数据框.
testdata<-getdata(test,st)
testdata<-as.data.frame(testdata)
执行三次
testdata[-4]
分层完毕:
> testdata   b  c a1 qw a1 23 we b1 34 er b1 46 wd c1 58 rt d2 6
例子二:引用R包sampling 的数据
library(sampling)ps.options(pointsize=12)options(width=60)
###################################################### code chunk number 2: calib1###################################################data = rbind(matrix(rep("A", 150), 150, 1, byrow = TRUE), matrix(rep("B", 100), 100, 1, byrow = TRUE))data = cbind.data.frame(data, c(rep(1, 60), rep(2,50), rep(3, 60), rep(1, 40), rep(2, 40)), 1000 * runif(250))sex = runif(nrow(data))for (i in 1:length(sex)) if (sex[i] < 0.3) sex[i] = 1 else sex[i] = 2data = cbind.data.frame(data, sex)names(data) = c("state", "region", "income", "sex")summary(data)
###################################################### code chunk number 3: calib2###################################################table(data$state)
s=strata(data,c("state"),size=c(25,20), method="srswor")
##s=strata(data,c("state"),size=c(25,20),pik=c(.75,.25) method="srswor") 用了pik产生的值差不多。
s=getdata(data,s)



0 0
原创粉丝点击