我已经导出并实现了一个期望值的方程。为了证明我的代码没有错误,我多次使用蒙特卡罗计算来证明它收敛到与我推导出的方程相同的值。
由于我现在有数据,我该如何可视化呢?这甚至是正确的测试吗?我可以衡量一下我对结果正确的把握程度吗?
我已经导出并实现了一个期望值的方程。为了证明我的代码没有错误,我多次使用蒙特卡罗计算来证明它收敛到与我推导出的方程相同的值。
由于我现在有数据,我该如何可视化呢?这甚至是正确的测试吗?我可以衡量一下我对结果正确的把握程度吗?
目前尚不清楚可视化数据的含义,但这里有一些想法。
如果您的蒙特卡洛模拟是正确的,那么您的数量的蒙特卡洛估计量就是样本的平均值。您的估计器的方差(平均值与“正确”值的距离)将与您采集的样本数量成反比:只要您采集足够多的样本,您就会任意接近正确答案. 因此,使用中等(如果是单变量,1000 应该足够)样本数量,并查看平均值。如果这与您的理论预期不符,那么您的某个估计中的某个地方就有错误。
如果它们是一维的,您也可以再次使用样本的直方图。直方图中的样本分布应该与您期望的理论分布相匹配。
如果您以与了解期望相同的方式了解方差,您还可以查看样本方差(样本与期望之间的均方差),并检查它是否也匹配。
编辑:在答案中加入更“正式”的内容!
如果 M(x) 是 E[X] 的蒙特卡洛估计量,则作为 n -> inf,abs(M(x) - E[X]) -> 0。M(x) 的方差与n,但它究竟是什么将取决于 M 是 的估计量。您可以根据样本的均值和方差为此构建一个特定的测试,以查看您所做的事情是否有意义。每 100 次迭代,您可以计算样本的平均值,并取其与理论 E[X] 之间的差异。如果这减少,您可能没有错误。如果没有,您的理论估计或蒙特卡洛估计量都有问题。
为什么不做一个简单的 t 检验?从你的理论方程,你有真正的平均值mu_0
,你的模拟器意味着,mu_1
。请注意,我们无法计算mu_1
,我们只能使用平均值/平均值来估计它。所以我们的假设是:
H_0: mu_0 = mu_1 and H_1: mu_0 does not equal mu_1
检验统计量是通常的单样本检验统计量,即
T = (mu_0 - x)/(s/sqrt(n))
在哪里
mu_0
是等式中的值x
是您模拟器的平均值s
是标准差n
是用于计算平均值的值的数量。在你的情况下,n
将会很大,所以这相当于一个正常的测试。我们拒绝H_0
何时T
大于/小于 (-3, 3)。这相当于 p 值 < 0.01。
一些评论:
p-value/N
在哪里。N
n=....
T
仅来自正态分布。