maxframe.tensor.random.standard_t#

maxframe.tensor.random.standard_t(df, size=None, chunk_size=None, gpu=None, dtype=None)[源代码]#

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

双曲分布的一个特例。当 df 变大时,结果类似于标准正态分布 (standard_normal)。

参数:
  • df (float or array_like of floats) -- 自由度,应大于 0。

  • size (int or tuple of ints, optional) -- 输出形状。如果给定的形状是,例如 (m, n, k),则抽取 m * n * k 个样本。如果 size 是 None``(默认),当 ``df 是标量时返回单个值。否则,抽取 mt.array(df).size 个样本。

  • chunk_size (int or tuple of int or tuple of ints, optional) -- 每个维度上期望的块大小

  • gpu (bool, optional) -- 如果为 True,则将张量分配在 GPU 上,默认为 False

  • dtype (data-type, optional) -- 返回张量的数据类型。

返回:

out -- 从参数化的标准学生 t 分布中抽取的样本。

返回类型:

Tensor or scalar

备注

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 年在都柏林的吉尼斯酿酒厂工作时发表。由于产权问题,他必须使用笔名发表,因此他使用了“Student”这个名字。

引用

示例

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

>>> import maxframe.tensor as mt
>>> intake = mt.array([5260., 5470, 5640, 6180, 6390, 6515, 6805, 7515, \
...                    7515, 8230, 8770])

她们的能量摄入是否系统性偏离推荐值 7725 千焦?

我们有 10 个自由度,那么样本均值是否在推荐值的 95% 范围内?

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

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

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

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

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

因此 p 值约为 0.009,这意味着原假设为真的概率约为 99%。