1

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

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, loc, scale)
res2 = scipy.stats.sf(some_x, df, loc, std1)
res3 = scipy.stats.sf(some_x, df, loc, std2)

当给定拟合函数的值时,我遇到了loc等于 stats.t.mean() 函数。但scale不等于 stats.t.std()。因此std1andstd2不同且不等于scale。我只能找到正态分布的来源,其中指出比例等于标准。我应该如何适当地使用上述功能?

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

4

1 回答 1

1

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

给定具有 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 
于 2021-03-27T16:57:43.127 回答