统计模拟结果中的奇怪条带

Weird banding in stats simulation results

所以我目前正在上统计学课程,我们一直在谈论抽样变化。我构建了一个执行采样模拟并显示结果的 Web 应用程序 (cobra5707.dx.am/SampleSim) 当我使用像 1000 这样的不错的样本量时,我得到了一个很好的正态分布。

0.45、1000、10000 的结果:

然而,当样本量不是一个很好的数字时,生成的直方图会出现奇怪的间隙。

0.45、808、10000 的结果:

代码没有最小化,所以你可以在开发工具中查看源代码,工作代码是:

onmessage = function(event) {
  e = event.data;
  var s = 0;
  var p = e.true_value;

  for(var i=0; i<e.sample_size; i++){
      if(Math.random()<p)
          s++;
  }

  postMessage(s/e.sample_size);
}

编辑 1: 所以这个过程是这样进行的,工作人员运行选定数量的模拟并计算成功模拟的比例和 returns 百分比 [0, 1]。这些百分比乘以 100,然后存储在数组中。最后,Plotly 根据数据生成直方图。直方图似乎没有错误,因为遍历数组确认空百分比范围内没有值。

编辑 2:仔细观察后,似乎是因为某些百分比根本不可能造成间隙,并且 xbin 大小足够小,这些间隙可见,所以我想我需要玩一下.很抱歉浪费了大家的时间,认为这可能是一些奇怪的浮点错误。

您似乎已经意识到,这是因为 Plotly 选择的自动选择的 bin 大小与您的数据不一致。

最简单的方法是 运行 样本大小为“3” - 只有四种可能的结果:0.0、33.33333333、66.66666667 和 100.0。

然而 Plotly 选择的 bins 是 -10 到 10、10 到 30、30 到 50、50 到 70、70 到 90 和 90 到 110。

解决方案是修改方法 UpdatePlot 以便它使用您的样本大小来确定 bin;像这样:

function UpdatePlot(data, args){
    Plotly.deleteTraces("plot", 0);
    Plotly.addTraces("plot",
        {x:data, type:"histogram", autobinx: false,
         xbins: {start: -50/ss, end: 100 + (50/ss), size: 100/ss}});
}