计算的包含概率与采样函数返回的内容之间的差异?

机器算法验证 r 采样 调查抽样
2022-04-03 20:47:46

我有一个(小)人口,我希望从中抽样。我分配与成比例的概率。的概率乘积确定每个样本发生的概率我将包含的样本的概率相加,并且我相信(错误地?)在独立的假设下(即使用替换抽样),这给了我的包含概率。我查看了采样包中包含概率函数返回的包含概率,我得到了不同的答案。我不明白为什么,有人能解释一下吗?yyiy1y1

library(survey)
library(sampling)
library(gtools)

set.seed(123)
y <- c(1190,26751,68570,34536)
p <- y/sum(y)

df <- data.frame(permutations(n=length(y), r=2, v=1:length(y), repeats.allowed = T))
df$p <- p[df$X1] * p[df$X2]; df

# X1 and X2 denote the index of the y value that is included 
# in the sample.

    X1 X2  p
1   1  1 0.00008245932
2   1  2 0.00185367169
3   1  3 0.00475145854
4   1  4 0.00239312195
5   2  1 0.00185367169
6   2  2 0.04167022794
7   2  3 0.10681198947
8   2  4 0.05379697926
9   3  1 0.00475145854
10  3  2 0.10681198947
11  3  3 0.27378782541
12  3  4 0.13789611111
13  4  1 0.00239312195
14  4  2 0.05379697926 
15  4  3 0.13789611111
16  4  4 0.06945282329

samplesSet <- data.frame(df[1 == df$X1  | 1 == df$X2, ])
sum(samplesSet$p)

pik <- inclusionprobabilities(y, 2)
data.frame(pik=pik,name=1:length(y))

更新:感谢@whuber 和@StasK。很明显,包含概率反映了没有替换的抽样。但是,我不确定包含概率返回的包含概率是多少。它们似乎是这样计算的:

nyii=1Nyi

并进行调整以确保没有概率大于 1,并且概率之和对应于样本大小。

如果我假设我的人口是使得选择的概率是然后我取 2 个样本,计算包含概率分别为显然,这些不是包含概率返回的内容,所以我现在的问题是我是否错误地计算了包含概率,或者包含概率函数是否返回了代表包含概率但实际上不是包含概率的东西?y={1,2,3}16263651211151720

myn <- 2
a <- c(1,2,3)
p <- myn * a/sum(a); p
[1] 0.3333333 0.6666667 1.0000000

inclusionprobabilities(a, myn)
[1] 0.3333333 0.6666667 1.0000000

谢谢。

1个回答

替换采样很无聊。无需替换的采样非常有趣。这就是为什么作者library(sampling)将注意力限制在采样 WOR 上。因此inclusionprobabilities(),在您的 中获取基线率y,并找出将适当的不等概率 WOR 抽样算法应用于这些数字时的包含概率。

查看源代码,我想您的代码片段重现了inclusionprobabilities()包含概率均不超过 1 的“常规”情况。在这种常规情况下,包含概率只是按比例放大的输入概率,因此它们的总和相等到目标样本量。请注意,包含概率是指框架上的单位,而不是特定样本,就像您的代码一样。

对于带放回抽样,我相信您的计算是正确的,因为每对的概率是概率的乘积。然后inclusionprobabilities指的是所有行的总和,其中任一X1X2等于 1、2、3 或 4(原始单位的索引):

for(k in 1:4) {
  print(sum(df$p[df$X1==k|df$X2==k]))
}

也就是说,单元 1 出现在 1.8% 的样本中,而单元 3 出现在 77.3% 的样本中。然而,这些数字加起来既不是 1(基本概率应该)也不是 2(正确包含概率应该),所以最后它们有点奇怪。