卡方拟合优度检验 Python SciPy

问题描述 投票:0回答:1

在 SciPy 手册 v1.12.0 https://docs.scipy.org/doc/scipy/tutorial/stats.html 有一个卡方拟合优度检验的示例:

import scipy.stats as stats
import numpy as np

x = stats.t.rvs(10, size=1000)
quantiles = [0.0, 0.01, 0.05, 0.1, 1-0.10, 1-0.05, 1-0.01, 1.0]
crit = stats.t.ppf(quantiles, 10)
crit
# array([       -inf, -2.76376946, -1.81246112, -1.37218364,  1.37218364,
#         1.81246112,  2.76376946,         inf])
n_sample = x.size
freqcount = np.histogram(x, bins=crit)[0]
tprob = np.diff(quantiles)
nprob = np.diff(stats.norm.cdf(crit))
tch, tpval = stats.chisquare(freqcount, tprob*n_sample)
nch, npval = stats.chisquare(freqcount, nprob*n_sample)
print('chisquare for t:      chi2 = %6.2f pvalue = %6.4f' % (tch, tpval))
# chisquare for t:      chi2 =  2.30 pvalue = 0.8901  # random
print('chisquare for normal: chi2 = %6.2f pvalue = %6.4f' % (nch, npval))
# chisquare for normal: chi2 = 64.60 pvalue = 0.0000  # random

我的问题是,为什么他们在“crit = stats.t.ppf(quantiles, 10)”中使用 df=10,以及如何确定 df 的正确值?

提前非常感谢。

这只是一个关于一般理解的问题。

python statistics chi-squared goodness-of-fit
1个回答
0
投票

如果您查看 scipy.stats.t.rvs 的文档

rvs(df, loc=0, scale=1, size=1, random_state=None)

在您的示例中,他们已经将 df 设置为 10,因此它只是为 ppf 函数保留。

计算“理想”自由度的另一种方法是跑步

stats.t.fit(x)
© www.soinside.com 2019 - 2024. All rights reserved.