如何创建遵循指定人口统计数据的人口样本?

时间:2016-03-10 17:04:54

标签: algorithm statistics

我有以下课程:

class Person
{
  GenderEnum Gender;
  RaceEnum Race;
  double Salary;
  ...
}

我想创建此类的1000个实例,以便1000个人的集合遵循这5个人口统计数据:

  1. 50%的男性; 50%的女性

  2. 55%白色; 20%黑色; 15%西班牙裔; 5%亚洲人; 2%美洲原住民; 3%其他;

  3. 10%< $ 10K; 15%$ 10K- $ 25K; 35%$ 25K- $ 50K; 20%$ 50K- $ 100K; 15%$ 100K- $ 200K; 5%超过$ 200K

  4. 女性的平均工资是男性平均工资的77%

  5. 平均薪资占平均白薪的百分比: 白色 - 100%。 黑色 - 75%。 西班牙裔 - 83%。 亚洲 - 115%。 美洲原住民 - 94%。 其他 - 100%。

  6. 上面的类别正是我想要的,但给出的百分比只是示例。实际百分比将是我的应用程序的输入,并将基于我的应用程序正在查看的区域。

    我该如何做到这一点?

    我尝试了什么:

    我可以非常轻松地创建我的Person类的1000个实例,并指定Gender和race来匹配我的人口统计信息。 (对于我的项目,我假设男女比例与种族无关)。我还可以根据指定的百分比随机创建工资列表。遇到麻烦的地方是弄清楚如何将这些工资分配给我的个人实例,使得不同性别的平均工资和不同种族的平均工资符合指定的条件。

1 个答案:

答案 0 :(得分:1)

我认为你可以通过假设所有类别的收入分配与你给出的收入分布相同来解决这个问题,但是通过一个使所有值变大或变小的因子来缩放。也就是说,收入分配在每个柱中具有相同的柱数和相同的质量比例,但是柱向较小的值或向较大的值移动,并且所有柱都移动了相同的因子。

如果这是合理的,那么这是一个简单的解决方案。请注意,所有人的收入分配平均值为sum(p[i]*c[i], i, 1, #bars),我称之为M,其中p[i] =条形i的质量比例和{ {1}} =酒吧c[i]的中心。对于每个组i,您的平均值为j,其中sum(s[j]*p[i]*c[i], i, 1, #bars) = s[j]*M是组s[j]的比例因子。此外,您知道总体平均值等于组的平均值之和,每个平均值按该类别中人员的比例加权,即j其中M = sum(s[j]*M*q[j], j, 1, #groups)是该组中人员的比例。最后,您将获得每组平均值相对于白人平均值的具体值,即您知道q[j] =某个分数,其中(s[j]*M)/(s[k]*M) = s[j]/s[k]是白色组的索引。从这么多,你可以解决k(白色组的缩放因子)的这些方程式,然后从s[k]解决这些方程式。

我已经为种族群体拼写了这个。您可以针对男性与女性重复此过程,从您为每个种族群体找到的分布开始,并找到额外的缩放因子。我猜想如果你以另一种方式做到这一点,性别优先然后比赛,你会得到相同的结果,但是虽然看起来很明显我不确定,除非我做出证据。