用理论曲线绘制直方图:随机实现

时间:2015-10-11 05:24:11

标签: python histogram montecarlo probability-density rms

我需要编写一个程序来生成 Cauchy分布的随机实现

具有零位置和单位比例。

另外,我需要在-5到5个柱子之间做一个直方图,随机实现1000个点,和理论曲线确保它们具有相同的单位。

我计算了Cauchy分布的累积分布函数

我编写了以下python代码:

from __future__ import division
import scipy
import random
import matplotlib.pyplot as plt
import numpy as np
import math as m


valuesX = []
for q in range(1000):
    R = random.random()
    x = m.tan(m.pi*(R-0.5)) #Cumulative Function
    valuesX.append(x)

z = np.linspace(-10,10,1000)
y = 1/(m.pi*(1+z**2)) #Theoretical Cauchy

plt.plot(y,z)
plt.hist(valuesX, bins = 50, range = [-5,5], normed=True)

我的结果是:Histogram of random realization for the Cauchy distribution

我不知道这是否可以接受,因为我正在根据概率密度函数绘制离散值(随机实现)。我怎么能比较他们两个?因为我需要找到上图的小数差异,并确定两条曲线之间的全局rms偏差是随机实现大小的函数。

1 个答案:

答案 0 :(得分:0)

如果您有大量的样本点,并且您的直方图分箱足够窄,那么您已经完成的工作应该没问题。在这种情况下," normed = True"在plt.hist()中设置可以很好地逼近每个bin中心的概率密度。然后,采样误差将由每个箱中样本数的平方根给出。

另一方面,如果样本数量较小,每个直方图区域需要更宽,以便包含多个样本,那么直方图和理论概率密度函数之间的比较会变得更加微妙。在这种情况下,需要允许每个bin表示在每个bin的范围内的概率密度的积分。

因此,对于涵盖[a,b]范围的bin,需要评估以下积分:

enter image description here

当乘以样本总数时,这会给出您在给定的bin中平均预期的样本数。

为方便起见,还可以重新安排此公式,使其具有以下形式:

enter image description here

当箱子很薄时(即b不大于a),它应具有更好的数值精度。对于非常薄的箱子,这个公式也更清楚地说明了如何恢复概率密度本身的表达式。