对组进行采样以匹配预期比例的算法

时间:2013-03-08 00:47:56

标签: r sas frequency

我需要找到一种方法来对组进行采样,以便观察到的比例与预期的比例相匹配。我想尽可能多地保留每组的观察结果。

简单示例: A组= 302(60.3%) B组= 199(39.7%)

我预期的比例为46.6%和53.4%,因此在这种情况下,我会将所有观察结果保持在B组,并将A组样本保持0.576,以获得174次观察。这是对的吗?

无论如何,在SAS或R中写一条规则可以为n组提供适当的采样率吗?我的实际问题包括14组,计数从2到77:

组A = 77,观察到= 21.51%,预期= 15.10%

组B = 5,观察到= 1.4%,预期= 0.54%

组C = 2,观察到= 0.56%,预期= 1.62%

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

我相信您可以使用PROC SURVEYSELECT来实现这一目标。您需要将每个组的预期采样率存储在单独的数据集中,然后在PROC SURVEYSELECT语句中应用选项“SAMPRATE = SAS数据集”。有关详细信息,请参阅有关此过程的联机文档。

答案 1 :(得分:1)

这是一个狡猾的小功能:

minsamp <- function(obs,expect) {

  ## get the groups where the number of people available
  ## isn't enough to simply multiply it out
  underrep <- obs[which(obs - expect * sum(obs) < 0)]

  # name of the smallest underrepresented group
  urname <- names(which.min(underrep))

  # get the final result
  round(expect * (obs[urname]/expect[urname]))

}

一个示例(基于您的simple example

obs <- c(a=302,b=199)
expect <- c(a=0.466,b=0.534)

> minsamp(obs,expect)
  a   b 
174 199 

你可以看到它有效:

> prop.table(minsamp(obs,expect))
        a         b 
0.4664879 0.5335121 

答案 2 :(得分:1)

我假设您正在绘制数据集的简单随机样本(SRS)。在这种情况下, 期望得到群体的“代表性不足”和/或“过度代表”。就推论而言,这是问题。如果您正在绘制样本以获得某些人口特征的估计值(例如,总数或比例),那么您不必担心样本中的频率是否与人口中的频率不匹配。事实上,这些频率仅等于平均值​​,即i。例如,所有可能的样本。这已经被通常的估算师“考虑”了。

另一方面,可以强制频率匹配;但我们将进入复杂样本领域。该领域的一些不错的作者是Särndal等人。 (1992)和蒂尔(2006)。一些谷歌搜索将告诉你他们的工作有多广泛。在您的实际案例中,我相信您正在寻找分层样本,i。例如,由在人口群体内绘制的子样本形成的样本。如果你在每个组中绘制简单的随机样本,那么在R中实现一个不超过10行代码的例程是很直接的。

但是如果你想要一些准备好的东西,请查看R的“sampling”包: http://cran.r-project.org/web/packages/sampling/index.html

请注意,如果您选择复杂的样本方法,您必须格外小心,因为这是一个有许多微妙之处的理论。估计量采用不同的形式(谷歌,例如,“Horvitz-Thompsom估算器”),他们的采样分布更难以描述,并且使用这种分布的正态近似通常是非常粗略的近似。

仅提及所涉及的一些细微之处,在分层样本的情况下,考虑确定应该为每个层(人口组)分配多少个抽样单位的问题,因为样本必须具有固定的总数单位。比例分配(即匹配样本和群体中组的比例)必然是最佳解决方案。有关详细信息,请参阅Cochran(1997)的简短讨论或上述书籍。