T分布奇怪的行为

时间:2015-09-17 03:31:22

标签: python numpy matplotlib

我有一个经验分布,我正在尝试使用Tnumpy分布拟合到它并使用matplotlib进行绘制。

这是我无法理解的:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import t

arr = np.array( [140, 36, 44, 24, 15, 48, 19, 2, 84, 6, 70, 3, 20, 6, 133, 23, 30, 7, 37, 165] )

params = t.fit( arr )

mean = arr.mean()
std = arr.std()

r = np.arange( mean - 3 * std, mean + 3 * std, 0.01 ) 

pdf_fitted = t.pdf(r, *params[0:-2], loc=params[-2], scale=params[-1])
plt.plot( r,  pdf_fitted )

plt.plot( [mean, mean], [0, max(pdf_fitted)] )

plt.show()

这个情节:

enter image description here

绿线是经验数据的平均值,蓝线是相同数据的拟合T分布。

问题是经验均值和分布的峰值不匹配。当我将normal分布拟合到相同的数据时,我会按预期与绿线和分布的峰值完美匹配。

现在,关注Wikipedia T distribution

  

t分布是对称的,钟形,与法线一样   分布,但尾巴较重...

因为它说对称我希望我的平均值和峰值匹配完美,但事实并非如此。

我的问题是:我的Python代码有什么问题,还是T发布的预期行为?如果是,为什么?如果不是,我的代码出错了什么?

1 个答案:

答案 0 :(得分:3)

就我所见,Python代码中没有错误;实际上,这是一个很好的例子来说明学生 t 分布与高斯分布相比的稳健性。指数族分布(高斯,指数,二项式,泊松等)的一个特征是它们具有非常薄的尾部,这意味着当您偏离平均值时,pdf会呈指数减小。这一特性为它们提供了很好的理论属性,但通常是将它们应用于模拟真实世界分布的瓶颈,其中数据集中存在异常值。因此, t 分布是一种流行的替代方案,因为观察到的数据集中的几个异常值不会对您的推论产生太大影响。在您的示例中,将原始数据集视为由除三个高异常值之外的所有点组成。然而,这些异常值在一些嘈杂的过程中被引入。统计推断旨在描述原始数据集的属性(例如,均值),因此假设您在这种情况下使用高斯,您将严重高估真实均值。如果您在这种情况下使用 t ,它将与您的嘈杂样本的平均值不匹配,但无论异常值如何,它都会更准确地估计原始真实均值。