scipy.stats.t.std() 中的“scale”参数代表什么?

问题描述

我的目标是找到具有假定 t 分布的数据集的标准偏差,以计算给定分位数的生存函数。 由于 scipy.stats 的 documentation 对我来说非常反直觉,我尝试了几件事,最终得到了下面的实现。 (注意:数字变量只是说明,有不同的结果。我的目标是每个结果都只有一个结果!)

import scipy

df,loc,scale = scipy.stats.t.fit(data,fdf=len(data)-1)
std1 = scipy.stats.t.std(df=df,loc=loc,scale=scale)
std2 = scipy.stats.t.std(df=df,loc=loc)

res1 = scipy.stats.sf(some_x,df,scale)
res2 = scipy.stats.sf(some_x,std1)
res3 = scipy.stats.sf(some_x,std2)

我遇到过,当给定来自拟合函数的值时,loc 等于 stats.t.mean() 函数。但是 scale 不等于 stats.t.std()。因此,std1std2 不同且不等于 scale。 我只能找到正态分布的来源,其中规定比例等于标准。 应如何正确使用上述功能

对编辑问题的任何帮助或建议将不胜感激:) 编码并保持健康!

解决方法

学生的 T 分布不应移动或缩放,它用作均值 = 0 的标准分布,通常用于测试正态分布总体 https://en.wikipedia.org/wiki/Student%27s_t-distribution 的两个均值之间的差异。

给定具有 n 个观测值的样本和具有 v=n-1 自由度的学生 T 分布,标准偏差为 sqrt(v / (v-2))。

您可以检查 scipy 是否属实

n = 11
v = n - 1
dist = sps.t(df=v)

# standard deviation
# from scipy distribution
print(dist.std())            # will return 1.118033988749895
# standard deviation
# from theory
print(np.sqrt(v / (v - 2)))  # will return 1.118033988749895