0

我正在尝试生成一些钟形数据(正态分布)。有一些数学公式可以实现这一点,但我希望通过现实生活中发生的自然日常事件来模拟它。

例如,我说的是,对于 50 名学生,假设他们有 70% 的机会在 100 道题的多项选择考试中答对一题。那么每个学生的分数是多少呢?我有 JavaScript 中的代码:

students = Array.from({ length: 50 });

students.forEach((s, i, arr) => {
  let score = 0;
  for (let i = 0; i < 100; i++) {
    if (Math.random() >= 0.3) score++;
  }
  arr[i] = score;
});

console.log(students);

但结果似乎不是正态分布。例如,我得到:

[
  69, 70, 67, 64, 71, 72, 77, 70, 71, 64, 74,
  74, 73, 80, 69, 68, 67, 72, 69, 70, 61, 72,
  72, 75, 63, 68, 71, 69, 76, 70, 69, 69, 67,
  63, 65, 80, 70, 62, 68, 63, 73, 69, 64, 79,
  79, 72, 72, 70, 70, 66
]

没有12分、20分的学生,也没有88分、90分、95分的学生(能拿到A的学生)。有没有办法模拟现实生活中的事件来生成正态分布数据?

4

1 回答 1

1

两个问题:

  • 100 名学生的样本量可能太小,无法产生这样的模式;10000名学生将给出更好的看法。
  • 您可以通过计算具有给定分数的学生人数来更好地可视化统计数据。所以你会得到每个潜在分数的计数(0..100)。

现在您可以看到贝尔曲线:

let students = Array.from({ length: 10000 });
let studentsWithScore = Array(101).fill(0); 

students.forEach(() => {
  let score = 0;
  for (let i = 0; i < 100; i++) {
    if (Math.random() >= 0.3) score++;
  }
  studentsWithScore[score]++;
});

console.log(studentsWithScore);

于 2021-04-04T11:46:59.927 回答