You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Sampling包中Sampford抽样适配响应概率的问题咨询

问题背景

我在用R的sampling包中UPsampford()函数做不等概率、无放回且固定样本量的抽样时碰到了棘手的问题:

  • 当是标准PPS抽样场景(包含概率之和刚好等于样本量n1,比如下面的case1)时,Sampford方法工作正常;
  • 但用逻辑回归模型生成响应概率(此时包含概率之和不等于n1,比如case2)时,不仅会弹出一堆警告,当n1=200时直接报错:

Error in UPsampford(prob2, eps = 1e-06, max_iter = 500) : Too many iterations. The algorithm was stopped.
同时还有50+类似的警告信息:
1: In .as_int(n) : the argument is not integer
2: In .as_int(n - 1) : the argument is not integer

问题1:Sampford方法能不能用响应概率?

明确说:不行。Sampford抽样的核心前提就是所有单元的包含概率之和必须严格等于样本量n——它本质是无放回PPS抽样的一种实现,天生要求∑π_i = n。而你用逻辑回归生成的响应概率,只是反映了单元被选中的“倾向”,它们的和大概率不等于样本量,这完全违反了Sampford方法的前置条件,自然会出现迭代失败(算法找不到符合要求的样本)和类型警告(内部计算依赖整数参数,概率和不匹配导致计算出非整数)。

问题2:有没有其他支持逻辑模型响应概率的抽样方法/R包?

当然有!针对这种包含概率和不等于样本量,但需要固定样本量的无放回不等概率抽样,这些方法和工具可以解决你的问题:

  • Madow抽样:属于无放回PPS抽样的变种,允许对包含概率做调整(当∑π_i ≠ n时,通过截断或缩放概率来满足条件),sampling包的UPmadow()函数直接支持。
  • Tille平衡抽样:sampling包的UPtille()函数实现了Tille的方法,它专门处理包含概率和不等于样本量的场景,能自动调整概率来实现固定样本量的无放回抽样,同时尽可能贴近你设定的目标响应概率。
  • ipfp包:通过迭代比例拟合算法来调整概率,确保最终样本量固定,同时最大程度匹配你的响应概率分布。

Case2的具体解决方案

针对你的case2,这里提供两种可直接落地的实现方式:

方案1:用Tille方法直接抽样(推荐)

Tille方法不需要手动调整概率,会自动处理概率和不等于样本量的情况:

library(sampling)

# 原始数据
x <- c(30,45,60,25,80,100,30,67,87,56,23,78, 81, 39, 40)
n1 <- 5

# case2:逻辑回归生成响应概率
xst <- (x - mean(x))/sd(x)
prob2 <- exp(xst)/(1 + exp(xst))

# 使用Tille方法执行固定样本量的无放回抽样
sample2 <- UPtille(prob2, n = n1)
# 查看抽样结果(1表示被选中,0表示未被选中)
sample2

方案2:缩放概率后用Sampford抽样

如果你更偏好Sampford方法,可以先对响应概率做线性缩放,让它们的和等于n1,这样就满足Sampford的要求了:

library(sampling)

x <- c(30,45,60,25,80,100,30,67,87,56,23,78, 81, 39, 40)
n1 <- 5

xst <- (x - mean(x))/sd(x)
prob2 <- exp(xst)/(1 + exp(xst))

# 线性缩放概率,使其总和等于n1
scaled_prob <- prob2 * (n1 / sum(prob2))
# 验证:sum(scaled_prob) 应该等于n1
sum(scaled_prob)

# 用缩放后的概率执行Sampford抽样
sample2 <- UPsampford(scaled_prob, eps=1e-6, max_iter=500)
sample2

这里的缩放操作不会改变原始响应概率的相对比例,只是整体调整到符合Sampford的要求,是一种简单有效的折中方案。


内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:50