前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言:PPS抽样

R语言:PPS抽样

作者头像
努力在北京混出人样
发布2019-02-18 16:40:15
2K0
发布2019-02-18 16:40:15
举报
文章被收录于专栏:祥子的故事祥子的故事

今天有朋友咨询我怎么写PPS抽样的代码,试着找了下,找到一个实现PPS抽样的R包。

百度百科: PPS 抽样是指按概率比例抽样,属于概率抽样中的一种。是指在多阶段抽样中,尤其是二阶段抽样中,初级抽样单位被抽中的机率取决于其初级抽样单位的规模大小,初级抽样单位规模越大,被抽中的机会就越大,初级抽样单位规模越小,被抽中的机率就越小。就是将总体按一种准确的标准划分出容量不等的具有相同标志的单位在总体中不同比率分配的样本量进行的抽样。

R语言源码:

代码语言:javascript
复制
function (m, x) 
{
    N <- length(x)
    pk <- x/sum(x)
    cumpk <- cumsum(pk)
    U <- runif(m)
    ints <- cbind(c(0, cumpk[-N]), cumpk)
    sam <- rep(0, m)
    for (i in 1:m) {
        sam[i] <- which(U[i] > ints[, 1] & U[i] < ints[, 2])
    }
    return(cbind(sam, pk[sam]))
}

这段代码来自R包:TeachingSampling,从代码便可以知道它的原理。

例子:

代码语言:javascript
复制
> library(TeachingSampling)
> data(Lucy)
> attach(Lucy)
The following objects are masked from Lucy (pos = 3):

    Employees, ID, Income, Level, SPAM, Taxes, Ubication, Zone

> res<-S.PPS(400,Income)#基于Income抽样
> head(res)
      sam             
[1,]  894 0.0002994541
[2,] 1717 0.0006278877
[3,]   49 0.0003226377
[4,] 2336 0.0015590934
[5,]  194 0.0003187737
[6,] 1700 0.0007921045
> sam <- res[,1]
> head(sam)
[1]  894 1717   49 2336  194 1700
> data <- Lucy[sam,]#得到的抽样样本
> head(data)
         ID Ubication  Level Zone Income Employees Taxes SPAM
894  AB2054     c10k3  Small    C    310        94     4  yes
1717 AB1145    c18k34 Medium    A    650       117    21  yes
49    AB050     c1k49  Small    A    334        16     5   no
2336 AB1126    c25k59    Big    A   1614       159   138  yes
194  AB1398     c2k95  Small    B    330        39     4  yes
1700 AB1122    c18k17 Medium    A    820        82    34  yes
> dim(data)
[1] 400   8

理论部分的解释请看:http://blog.csdn.net/zrjdds/article/details/50231551

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档