我需要编写一个程序来生成 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)
我不知道这是否可以接受,因为我正在根据概率密度函数绘制离散值(随机实现)。我怎么能比较他们两个?因为我需要找到上图的小数差异,并确定两条曲线之间的全局rms偏差是随机实现大小的函数。
答案 0 :(得分:0)
如果您有大量的样本点,并且您的直方图分箱足够窄,那么您已经完成的工作应该没问题。在这种情况下," normed = True"在plt.hist()中设置可以很好地逼近每个bin中心的概率密度。然后,采样误差将由每个箱中样本数的平方根给出。
另一方面,如果样本数量较小,每个直方图区域需要更宽,以便包含多个样本,那么直方图和理论概率密度函数之间的比较会变得更加微妙。在这种情况下,需要允许每个bin表示在每个bin的范围内的概率密度的积分。
因此,对于涵盖[a,b]范围的bin,需要评估以下积分:
当乘以样本总数时,这会给出您在给定的bin中平均预期的样本数。
为方便起见,还可以重新安排此公式,使其具有以下形式:
当箱子很薄时(即b不大于a),它应具有更好的数值精度。对于非常薄的箱子,这个公式也更清楚地说明了如何恢复概率密度本身的表达式。