scipy.stats.ks_1samp¶
- scipy.stats.ks_1samp(x, cdf, args=(), alternative='two-sided', mode='auto')[源代码]¶
对拟合优度执行单样本Kolmogorov-Smirnov检验。
此测试将样本的基础分布F(X)与给定的连续分布G(X)进行比较。有关可用的空假设和备选假设的说明,请参阅注释。
- 参数
- xarray_like
IID随机变量的观测值的一维阵列。
- cdf可调用
用于计算CDF的Callable。
- args元组、序列、可选
分布参数,与一起使用 cdf 。
- alternative{‘双面’,‘少’,‘大’},可选
定义空的和可选的假设。默认值为“双面”。请参阅下面注释中的说明。
- mode{‘auto’,‘Exact’,‘Approx’,‘symp’},可选
定义用于计算p值的分布。以下选项可用(默认为‘AUTO’):
‘AUTO’:选择其他选项之一。
‘Exact’:使用测试统计数据的精确分布。
‘近似’:以单边概率的两倍近似双边概率
“symp”:使用测试统计量的渐近分布
- 退货
- statistic浮动
KS测试统计量,D、D+或D-(取决于‘Alternative’的值)
- pvalue浮动
单尾或双尾p值。
注意事项
对于NULL和相应的替代假设,有三个选项可以使用 alternative 参数。
two-sided :零假设是两个分布是相同的,对于所有x,F(X)=G(X);另一种假设是它们不相同。
less 零假设是对所有x都有F(X)>=G(X);或者对至少一个x有F(X)<G(X)。
greater 零假设是对所有x都有F(X)<=G(X);或者对至少一个x有F(X)>G(X)。
请注意,备选假设描述了 CDFs 而不是观测值。例如,假设x1~F和x2~G,如果所有x的F(X)>G(X),则x1中的值往往小于x2中的值。
示例
>>> from scipy import stats >>> rng = np.random.default_rng()
>>> x = np.linspace(-15, 15, 9) >>> stats.ks_1samp(x, stats.norm.cdf) (0.44435602715924361, 0.038850142705171065)
>>> stats.ks_1samp(stats.norm.rvs(size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.165471391799..., pvalue=0.007331283245...)
Test against one-sided alternative hypothesis
将分布移动到更大的值,以便 `` CDF(x) < norm.cdf(x)`` :
>>> x = stats.norm.rvs(loc=0.2, size=100, random_state=rng) >>> stats.ks_1samp(x, stats.norm.cdf, alternative='less') KstestResult(statistic=0.100203351482..., pvalue=0.125544644447...)
拒绝零假设,支持替代假设:更少
>>> stats.ks_1samp(x, stats.norm.cdf, alternative='greater') KstestResult(statistic=0.018749806388..., pvalue=0.920581859791...)
拒绝零假设,支持替代假设:更大
>>> stats.ks_1samp(x, stats.norm.cdf) KstestResult(statistic=0.100203351482..., pvalue=0.250616879765...)
不要拒绝零假设而支持另一种假设:双面的
检验t个分布的随机变量是否服从正态分布
对于100个自由度,t分布看起来接近正态分布,并且K-S检验并不排除样本来自正态分布的假设:
>>> stats.ks_1samp(stats.t.rvs(100,size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.064273776544..., pvalue=0.778737758305...)
对于3个自由度,t分布看起来与正态分布完全不同,因此我们可以在10%的水平上拒绝样本来自正态分布的假设:
>>> stats.ks_1samp(stats.t.rvs(3,size=100, random_state=rng), ... stats.norm.cdf) KstestResult(statistic=0.128678487493..., pvalue=0.066569081515...)