那么为什么 y 的分布矩不匹配 x 的矩
分布?
他们确实 - 或者至少他们在预期的错误范围内这样做 (1)
快速观察是它们都接近标准正态分布;它们的第一个时刻都接近 0,第二个时刻都接近 1。但是,请注意 x 是从 N(0,1) 采样的,y 是从 N(mean(x), std(x)) 采样的。
大样本量n
如果您希望它们的值更接近而不是简单地增加样本大小n。我们将修复random_state 以实现重现性2
import numpy as np
from scipy.stats import norm
n = 200000
for i in range(5):
x = norm.rvs(size=n, random_state=i)
y = norm(*norm.fit(x)).rvs(size=n, random_state=i)
print("Trial {}".format(i))
for i in [x, y]:
print("mu={:.4f}, sd={:.4f}".format(np.mean(i), np.std(i)))
这会产生:
Trial 0
mu=0.0033, sd=0.9980
mu=0.0067, sd=0.9960
Trial 1
mu=0.0045, sd=0.9977
mu=0.0089, sd=0.9953
Trial 2
mu=-0.0004, sd=0.9981
mu=-0.0008, sd=0.9963
Trial 3
mu=-0.0019, sd=0.9965
mu=-0.0037, sd=0.9930
Trial 4
mu=-0.0052, sd=0.9992
mu=-0.0104, sd=0.9984
小样本量 n
对于小样本n,我们自然会预计x 和y 之间存在一些差异,因为我们实际上是从y 中抽取另一个样本。但是,我们可以观察到拟合参数的表现如何,如下所示:
n = 200
for i in range(5):
x = norm.rvs(size=n, random_state=i)
print("Trial {}".format(i))
print(np.mean(x), np.std(x), norm(*norm.fit(x)).args)
这会产生
Trial 0
0.07091049314116117 1.0214227686959954 (0.07091049314116117, 1.0214227686959954)
Trial 1
0.1066888148479486 0.9100459829739235 (0.1066888148479486, 0.9100459829739235)
Trial 2
0.012250008696874187 1.0800421002497833 (0.012250008696874187, 1.0800421002497833)
Trial 3
-0.07079063505988327 0.9767123391405987 (-0.07079063505988327, 0.9767123391405987)
Trial 4
0.028540839305884236 0.9537561748836348 (0.028540839305884236, 0.9537561748836348)
(1) 没有实际计算标准误差,如果我错了,请纠正我。在Cross Validated 上快速搜索可以很好地解释Standard Error 的一般情况。
(2) 修复随机状态x 和norm(*norm.fit(x)) 并不意味着来自后者的随机样本应该产生N(mean(x), std(x))。话又说回来,参考上面的(1) 为什么要呢?