计算结果子集的 CI 时,正确的样本量是多少?

机器算法验证 置信区间 二项分布 民意调查
2022-04-11 17:55:33

假设我对 3031 人进行了一项研究,该研究获得了对各种问题的回答(95% CL)。其中一个问题(Q1a)得到了 616 人的肯定回答。在这 616 个中,只有 34 个具有 QualityB(其余 582 个没有)取决于对(Q1a)的肯定回答。

使用此在线计算器确定 QualityB(置信区间)的误差范围时,我是使用 34 还是 616 作为样本量?我想我应该使用 616 作为样本量,3031 作为人口规模,5% 作为百分比,但我不确定。

  • 使用 616 作为样本大小,结果为 +/- 1.54%。
  • 使用 34 作为样本大小,结果为 +/- 7.29%。
2个回答

当我解释这个问题时,这个问题可以很容易地通过对正在发生的事情和调查目标的一些仔细推理来解决。我们甚至可以做一些简单的心算来检查软件产生的置信区间。

考虑这个调查模型。 在一个群体中,成员具有以下属性:他们对 Q1a 的回答(“是”或“否”)和他们的 QualityB(存在或不存在)。但是,QualityB 值仅对回答“是”的人可用且有意义。调查的目的之一是估计有 QualityB 存在的“是”回答者的比例。为此,本次调查从人群中独立随机抽取了3031人。

如果该模型合理地接近调查及其目标,那么请注意,选择所有 3031 人的随机化程序构成在“是”回答者中进行选择的随机程序。但是(与指定 3031 的样本量不同,这通常由调查员确定),“是”回答者的数量不是事先确定的:它也是一个随机数量。

然而,部分因为 616 的子样本量太大,将其分析为从总体中的“是”回答者中选择的 616 人的随机样本是一个合理的近似值。 (作为为什么我们可以通过使用下面的近似二项式理论计算来考虑 616 个“大”的部分理由,可以计算出一项可比较的调查可能包括 579 到 653 个“是”回答者;这种变化量将根本不会改变置信限的计算。)因此,对在场的 34 名有 QualityB 的人的分析可以照常进行。

二项式理论是适用的:我们估计“是”回答者中 QualityB 人的比例为 = %,我们估计该比例的方差为,对于估计的标准差为因为子样本大小是,所以比例的标准误是 = %。所以——只是为了看看它的发展方向——我们可以使用一个正常的近似值作为粗略的检查。这告诉我们期望置信区间程序给我们一个从大约 - = % 到34/6165.5(34/616)(134/616)0.228366160.22836/6160.925.51.65×0.924.05.5+1.65×0.92 = %。这个范围非常接近 % 的引用值。(乘数应该给出大约 % 的双边置信区间。)7.05.5±1.541.6590

我们得出结论,在人口中所有回答“是”的人中,拥有 QualityB 的人的比例可能介于4% 和7%。为了推断这一点,我们使用了一个最多会误导我们的程序(靠抽签的运气)10适当应用的时间百分比;这就是我们的“信心”的来源。


编辑

因为在评论中已经提出了一些关于这个答案有效性的问题,让我们检查一下。一种方法是引导数据以评估偏差。但在继续之前,让我们以更具体的形式重述问题。

那么,假设我们对曾经尝试过消遣性药物的美国老年人(例如,定义为 2012 年 1 月 1 日 55 岁或以上并且在该日期居住在美国)的比例感兴趣。为此,我们确定了所有常住成年人,并向随机选择的 3011 名成年人发送了一份问卷。上面有两个问题,类似于前面讨论的 Q1a 和 QualityB 问题:

  1. 您在 2012 年 1 月 1 日时几岁?

  2. 如果您对问题 1 的回答是 55 岁或以上,您是否曾出于娱乐目的而故意服用某种药物,而该药物当时需要医生处方或在美国非法使用或销售?

奇迹般地——也许是通过极其勤奋的跟进——你在所有 3011 问卷上都收到了有效的答复。数据是:

  • 616 份回复的年龄在 55 岁或以上。

  • 在这 616 人中,有 34 人对第二个问题回答“是”。

你应该估计什么比例?有没有任何有效的方法来估计一个比例?

bootstrap 的一种形式是通过采用与在数据中观察到的比例完全相同的合成群体来研究这个问题,并独立地多次重新创建实验及其分析。这是使用上面推荐的二项式估计的 100,000 次独立试验的可重现R代码

trial <- function(n.trials, n=1, p1=1/2, p2=1/2) {
  x <- rmultinom(n.trials, n, c(p2,1-p2) %o% c(p1,1-p1))
  m <- x[1,]+x[2,] # Total who answer the second question
  mean <- x[1,]/m  # Proportion of "yeses" in the second question
  se <- sqrt(mean*(1-mean)/m)
  rbind(mean, se)  # Estimate and standard error of the estimate for each trial
}
set.seed(17)
sim <- trial(100000, 3031, 616/3031, 34/616)

平均估计mean(sim[1,), 是0.0551537: 几乎与正确的值相同34/6160.0551948在合成人群中。 没有偏见。

近似置信区间程序怎么样?我们可以检查 100,000 次试验中的每一次试验的置信区间是否覆盖了34/616或不:

coverage.upper <- sim[2,] * 1.65 + sim[1,] > 34/616
coverage.lower <- -sim[2,] * 1.65 + sim[1,] < 34/616
(sum(coverage.upper) + sum(coverage.lower))/100000 - 1

结果,0.89542,在所需覆盖率的百分之一的二分之一范围内0.90: 太好了,特别是考虑到所做的近似。

鉴于这些(假设的)数据,我们可以合理地得出结论,大约5.52% 的美国老年人使用过消遣性药物。90百分比之间的置信度百分比4% 和7%。

不,616 并不构成人口中的随机样本。它是对问题 1a 回答“是”的特定子集。质量 B 是仅对这 616 个进行评估,还是对剩余的 2415 个也进行了研究?你的问题没有简单的答案。您可以引导 3031,对于每个引导样本,您将获得 616 的一个子集,对 Q1a 的回答是肯定的,然后您将获得质量为 B 的 34 个子集。引导将为您提供百分比分布,您可以从中获得构建自举置信区间。很抱歉让它变得复杂,但我没有看到一个简单的方法。