上一个主题

numpy.random.standard_normal

下一个主题

numpy.random.triangular

numpy.random.standard_t

numpy.random.standard_t(df, size=None)

从标准学生t分布中抽取样本 df 自由度。

双曲分布的特例。AS df 变大,结果类似于标准正态分布。 (standard_normal

参数:
df : 浮点数或类似浮点数的数组

自由度应大于0。

size : int或int的元组,可选

输出形状。如果给定的形状是,例如, (m, n, k) 然后 m * n * k 取样。如果尺寸是 None (默认),如果 df 是标量。否则, np.array(df).size 取样。

返回:
out : ndarray或scalar

从参数化标准学生t分布中提取样本。

笔记

t分布的概率密度函数是

P(x,df)=frac gamma(frac df+1 2)sqrt pi df gamma(frac df 2 bigl(1+frac x^2 df bigr)^-(df+1)/2

t检验基于数据来自正态分布的假设。t检验提供了一种检验样本平均值(即根据数据计算的平均值)是否是真实平均值的良好估计的方法。

T分布的起源于1908年由威廉·戈塞特在都柏林吉尼斯啤酒厂工作时首次出版。由于专利问题,他不得不用笔名发表文章,所以他用了学生这个名字。

工具书类

[1](1, 2) Dalgaard,Peter,“R导论统计”,Springer,2002年。
[2]维基百科,“学生t-分布”https://en.wikipedia.org/wiki/student's_t-分布

实例

摘自Dalgaard第83页 [1], 假设11名妇女的每日能量摄入量(单位:千焦(kj))为:

>>> intake = np.array([5260., 5470, 5640, 6180, 6390, 6515, 6805, 7515, \
...                    7515, 8230, 8770])

他们的能量摄入是否有系统地偏离推荐值7725千焦?

我们有10个自由度,那么样本平均值在推荐值的95%以内吗?

>>> s = np.random.standard_t(10, size=100000)
>>> np.mean(intake)
6753.636363636364
>>> intake.std(ddof=1)
1142.1232221373727

计算t统计量,将ddof参数设置为无偏值,使标准偏差中的除数为自由度n-1。

>>> t = (np.mean(intake)-7725)/(intake.std(ddof=1)/np.sqrt(len(intake)))
>>> import matplotlib.pyplot as plt
>>> h = plt.hist(s, bins=100, density=True)

对于单侧t检验,t统计量在分布中出现的距离有多远?

>>> np.sum(s<t) / float(len(s))
0.0090699999999999999  #random

所以p值约为0.009,也就是说零假设有99%的概率是真的。

../../_images/numpy-random-standard_t-1.png