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

时间:2016-02-26 03:19:34

标签: javascript math web-applications statistics

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

0.45,1000,10000:

的结果

Amazing Results

然而,当样本大小不是一个很好的数字时,得到的直方图中有奇怪的空白。

结果为0.45,808,10000:

Ugly Results

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

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: 因此,该过程起作用,工作人员运行选定数量的模拟并计算成功的模拟的比例并返回百分比[0,1]。这些百分比乘以100,然后存储在数组中。最后,Plotly从数据中生成直方图。直方图似乎没有错误,因为循环数组确认空百分比范围内没有值。

编辑2:仔细观察似乎是由于某些百分比根本不可能导致间隙,并且xbin尺寸足够小以至于这些间隙是可见的,所以我想我将需要使用它。很抱歉浪费了人们的时间,认为这可能是一些奇怪的浮点错误。

1 个答案:

答案 0 :(得分:0)

正如您似乎已经意识到的那样,因为Plotly选择的自动选择的纸槽尺寸与您的数据非常吻合。

最简单的方法是运行样本大小为&#34; 3&#34; - 只有四种可能的结果:0.0,33.33333333,66.66666667和100.0。

然而,Plotly选择的垃圾箱是-10到10,10到30,30到50,50到70,70到90和90到110.

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

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}});
}