本文简要介绍 python 语言中 scipy.stats.kstest
的用法。
用法:
scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', method='auto')#
执行(一个样本或两个样本)Kolmogorov-Smirnov 拟合优度检验。
单样本检验将样本的基础分布 F(x) 与给定分布 G(x) 进行比较。双样本检验比较两个独立样本的基本分布。这两个检验仅对连续分布有效。
- rvs: str、数组 或可调用
如果是数组,它应该是随机变量观察值的一维数组。如果是可调用的,它应该是一个生成随机变量的函数;需要有一个关键字参数尺寸.如果是字符串,它应该是分布的名称
scipy.stats
,这将用于生成随机变量。- cdf: str、数组 或可调用
如果是 数组,则应该是随机变量观测值的一维数组,并进行二样本检验(并且 rvs 必须是 数组)。如果是可调用的,则该可调用用于计算 cdf。如果是字符串,它应该是
scipy.stats
中的分布名称,它将用作 cdf 函数。- args: 元组,序列,可选
分布参数,当 rvs 或 cdf 是字符串或可调用对象时使用。
- N: 整数,可选
如果 rvs 是字符串或可调用的,则样本大小。默认值为 20。
- alternative: {‘双面’,‘less’, ‘greater’},可选
定义原假设和备择假设。默认为“双面”。请参阅下面注释中的说明。
- method: {‘auto’, ‘exact’, ‘approx’, ‘asymp’},可选
定义用于计算 p 值的分布。以下选项可用(默认为‘auto’):
‘auto’ : selects one of the other options.
‘exact’ : uses the exact distribution of test statistic.
‘approx’ : approximates the two-sided probability with twice the one-sided probability
‘asymp’: uses asymptotic distribution of test statistic
- 资源:KstestResult
包含属性的对象:
- 统计 浮点数
KS 检验统计量,D+、D- 或 D(两者中的最大值)
- p值 浮点数
One-tailed 或 two-tailed p 值。
- statistic_location 浮点数
在单样本检验中,这是与 KS 统计量对应的 rvs 值;即,在该观察中测量经验分布函数和假设的累积分布函数之间的距离。
在双样本检验中,这是与 KS 统计量相对应的 rvs 或 cdf 的值;即,在该观察中测量经验分布函数之间的距离。
- statistic_sign int
在单样本检验中,如果 KS 统计量是经验分布函数与假设累积分布函数 (D+) 之间的最大正差,则此值为 +1;如果 KS 统计量是最大负差 (D-),则为 -1。
在双样本检验中,如果 rvs 的经验分布函数超过 statistic_location 处的 cdf 经验分布函数,则为 +1,否则为 -1。
参数 ::
返回 ::
注意:
可以使用替代参数选择零和相应替代假设的三个选项。
双面:原假设是两个分布相同,对于所有 x,F(x)=G(x);另一种情况是它们不相同。
less:原假设是所有 x 的 F(x) >= G(x);另一种选择是对于至少一个 x,F(x) < G(x)。
更大:原假设是所有 x 的 F(x) <= G(x);另一种选择是对于至少一个 x,F(x) > G(x)。
请注意,替代假设说明了CDF的基础分布,而不是观察值。例如,假设 x1 ~ F 和 x2 ~ G。如果所有 x 的 F(x) > G(x),则 x1 中的值往往小于 x2 中的值。
例子:
假设我们希望检验样本按照标准正态分布的原假设。我们选择置信度为95%;也就是说,如果 p 值小于 0.05,我们将拒绝原假设并支持替代假设。
在测试均匀分布的数据时,我们希望原假设被拒绝。
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> stats.kstest(stats.uniform.rvs(size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.5001899973268688, pvalue=1.1616392184763533e-23)
事实上,p 值低于我们的阈值 0.05,因此我们拒绝零假设,转而支持默认的 “two-sided” 替代方案:数据不按照标准正态分布。
在测试标准正态分布的随机变量时,我们期望数据在大多数情况下与原假设一致。
>>> x = stats.norm.rvs(size=100, random_state=rng) >>> stats.kstest(x, stats.norm.cdf) KstestResult(statistic=0.05345882212970396, pvalue=0.9227159037744717)
正如预期的那样,p 值 0.92 不低于我们的阈值 0.05,因此我们不能拒绝原假设。
然而,假设随机变量按照正态分布进行分布,该正态分布向更大的值移动。在这种情况下,基础分布的累积密度函数 (CDF) 往往是较少的比标准法线的 CDF。因此,我们期望原假设被拒绝
alternative='less'
:>>> x = stats.norm.rvs(size=100, loc=0.5, random_state=rng) >>> stats.kstest(x, stats.norm.cdf, alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743)
事实上,当 p 值小于我们的阈值时,我们拒绝零假设,转而支持替代方案。
为方便起见,可以使用分布名称作为第二个参数来执行前面的测试。
>>> stats.kstest(x, "norm", alternative='less') KstestResult(statistic=0.17482387821055168, pvalue=0.001913921057766743)
上面的示例都是单样本测试,与
ks_1samp
执行的测试相同。请注意,kstest
也可以执行与ks_2samp
执行的相同的两个样本测试。例如,当从同一分布中抽取两个样本时,我们期望数据在大多数情况下与原假设一致。>>> sample1 = stats.laplace.rvs(size=105, random_state=rng) >>> sample2 = stats.laplace.rvs(size=95, random_state=rng) >>> stats.kstest(sample1, sample2) KstestResult(statistic=0.11779448621553884, pvalue=0.4494256912629795)
正如预期的那样,p 值 0.45 不低于我们的阈值 0.05,因此我们不能拒绝原假设。
相关用法
- Python SciPy stats.kstwobign用法及代码示例
- Python SciPy stats.kstwo用法及代码示例
- Python SciPy stats.kstat用法及代码示例
- Python SciPy stats.ksone用法及代码示例
- Python SciPy stats.ks_2samp用法及代码示例
- Python SciPy stats.ks_1samp用法及代码示例
- Python SciPy stats.kurtosis用法及代码示例
- Python SciPy stats.kruskal用法及代码示例
- Python SciPy stats.kurtosistest用法及代码示例
- Python SciPy stats.kappa3用法及代码示例
- Python SciPy stats.kappa4用法及代码示例
- Python SciPy stats.kendalltau用法及代码示例
- Python SciPy stats.anderson用法及代码示例
- Python SciPy stats.iqr用法及代码示例
- Python SciPy stats.genpareto用法及代码示例
- Python SciPy stats.skewnorm用法及代码示例
- Python SciPy stats.cosine用法及代码示例
- Python SciPy stats.norminvgauss用法及代码示例
- Python SciPy stats.directional_stats用法及代码示例
- Python SciPy stats.invwishart用法及代码示例
- Python SciPy stats.bartlett用法及代码示例
- Python SciPy stats.levy_stable用法及代码示例
- Python SciPy stats.page_trend_test用法及代码示例
- Python SciPy stats.itemfreq用法及代码示例
- Python SciPy stats.exponpow用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.kstest。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。