根据Wikipedia 上给出的处方,我尝试生成具有三个自由度的学生 t 分布随机数。我还使用 numpy 的内置随机数生成器生成了这些数字,用于 t 分布。但是,我觉得我使用 Wikipedia 处方生成的数字与分布的分析形式不太吻合。下图显示了每种情况的五个示例直方图:手动(维基百科)生成(上排)和 python 的内置生成(下排)。我觉得在附近,存在一些问题。我的观察正确吗?如果是的话,我这样做的方式有什么问题?我的python代码也在下面给出..
每个直方图包含个数字,绿色曲线代表解析分布
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("seaborn")
import seaborn as sns
from scipy.stats import t
"""Generate t distributed values"""
def f(x, mu):
n = len(x)
return np.sqrt(n) * (x.mean()-mu)/ x.std()
mu = 0
df = 3
for i in range(5):
plt.subplot(2,5,i+1)
t_vals = [f(np.random.normal(loc = mu, size = df + 1), mu) for i in range(10000)]
sns.distplot(t_vals, kde = False, norm_hist = True)
x = np.linspace(-5, 5, 100)
plt.plot(x, t.pdf(x, df))
plt.xlim([-5, 5])
plt.xlabel(r"$x$")
if i == 0:
plt.ylabel(r"$p(x)$")
if i == 2:
plt.title("Manually generated")
for i in range(5):
plt.subplot(2,5,i+6)
t_vals = np.random.standard_t(df, size = 10000)
sns.distplot(t_vals, kde = False, norm_hist = True)
x = np.linspace(-5, 5, 100)
plt.plot(x, t.pdf(x, df))
plt.xlim([-5, 5])
plt.xlabel(r"$x$")
if i == 0:
plt.ylabel(r"$p(x)$")
if i == 2:
plt.title("Generated using python")
plt.tight_layout()
plt.savefig("t_dists.pdf", bboxinches = "tight")




