Numpy 用样本平均值估计t分布是行不通的

Numpy 用样本平均值估计t分布是行不通的,numpy,distribution,Numpy,Distribution,我试图通过从正态分布中获取多个样本的平均值来创建一个t分布(然后用核密度估计来估计形状) 出于某种原因,当我将得到的结果与适当的t分布进行比较时,我得到了非常不同的结果。我不明白出了什么问题,所以我想我有些困惑 代码如下: import numpy as np from scipy.stats import gaussian_kde import matplotlib.pyplot as plt import seaborn inner_sample_size = 10 X = np.

我试图通过从正态分布中获取多个样本的平均值来创建一个t分布(然后用核密度估计来估计形状)

出于某种原因,当我将得到的结果与适当的t分布进行比较时,我得到了非常不同的结果。我不明白出了什么问题,所以我想我有些困惑

代码如下:

import numpy as np
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt
import seaborn    

inner_sample_size = 10
X = np.arange(-3, 3, 0.01)

results = [
    np.mean(np.random.normal(size=inner_sample_size))
    for _ in range(10000)
]
estimation = gaussian_kde(results)
plt.plot(X, estimation.evaluate(X))

t_samples = np.random.standard_t(inner_sample_size, 10000)
t_estimator = gaussian_kde(t_samples)
plt.plot(X, t_estimator.evaluate(X))

plt.ylabel("Probability density")
plt.show()
下面是我得到的情节:


其中橙色线是numpy自己的t分布,蓝色线是通过抽样估计的。

您认为标准正态平均值具有t分布的假设是不正确的。事实上,标准法线的平均值具有正态分布,这解释了蓝色图形的形状。要从具有
k
自由度的T分布生成一个随机变量
T
,首先生成
k+1
独立标准正态值
Z_i,i=0,…,k
。然后进行计算

T=Z_0/sqrt(和(Z_i^2,i=1到k)/k)


标准法线的平方和
sum(Z_i^2,i=1到k)
具有卡方分布,自由度
k
,因此如果有一种预屏蔽方法来生成此值,您应该使用它,因为它可能更有效。

啊,是的,由于中心极限定理,样本的平均值必须服从正态分布,不是吗。我在写代码的时候弄糊涂了。谢谢您实际上不需要CLT来保证这一点。平均值为正态的原因是正态分布为a,这意味着两个独立的正态之和在位置和比例上也是正态的。因此,任意数量的法线之和都是法线。CLT保证,如果你加上足够大的数量,比如说30个iid随机变量(几乎)任意分布,它的平均值是正态的。