【问题标题】:Plotting histogram with theoretical curve: Random realization用理论曲线绘制直方图:随机实现
【发布时间】:2016-01-08 19:02:31
【问题描述】:

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

位置和单位比例为空。

我还需要在 -5 到 5 个 bin 之间制作直方图,以随机实现 1,000 个点,连同理论曲线确保它们具有相同的单位。

我计算了柯西分布的累积分布函数:

我写了以下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 偏差。

【问题讨论】:

  • 如果您想将概率密度函数与随机实现进行比较,我建议计算给定n的预期实现并将其与随机实现(n = 1000)进行比较。然后将比较两个离散的实现,而一个类似于真实(=随机),另一个类似于理论(=预期)实现。

标签: python histogram montecarlo probability-density rms


【解决方案1】:

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

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

因此,对于覆盖范围 [a,b] 的 bin,需要计算以下积分:

当乘以样本总数时,这给出了您期望的平均样本数,在给定的 bin 内。

为方便起见,还可以将这个公式重新排列为以下形式:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多