mars.tensor.stats.ks_1samp#
- mars.tensor.stats.ks_1samp(x: 联合[ndarray, 列表, TileableType], cdf: 可调用的, args: 元组 = (), alternative: 字符串 = 'two-sided', mode: 字符串 = 'auto')[来源]#
进行单样本Kolmogorov-Smirnov适合度检验。
本测试将样本的基础分布 F(x) 与给定的连续分布 G(x) 进行比较。有关可用的原假设和备择假设的描述,请参见说明。
- Parameters
x (array_like) – 一个独立同分布随机变量的1-D观察数组。
cdf (可调用) – 用于计算cdf的可调用对象。
args (tuple, sequence, optional) – 分布参数,与 cdf 一起使用。
alternative ({'two-sided', 'less', 'greater'}, optional) – 定义原假设和替代假设。默认值是‘two-sided’。 请参阅下面的说明。
mode ({'auto', 'exact', 'approx', 'asymp'}, 可选) –
定义用于计算p值的分布。 以下选项可用(默认是‘auto’):
’auto’ : 选择其他选项中的一个。
’exact’ : 使用检验统计量的确切分布。
’approx’ : 用两倍的一侧概率来近似双侧概率
’asymp’: 使用检验统计量的渐近分布
- Returns
statistic (float) – KS检验统计量,可以是D、D+或D-(取决于'alternative'的值)
pvalue (float) – 单尾或双尾p值。
另请参阅
ks_2samp,kstest备注
可以通过alternative参数选择三种原假设及其对应的备择假设。
双侧: 虚无假设是这两个分布是相同的,对于所有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 中的值。
示例
>>> import numpy as np >>> from scipy import stats >>> import mars.tensor as mt >>> from mars.tensor.stats import ks_1samp
>>> np.random.seed(12345678) #fix random seed to get the same result >>> x = mt.linspace(-15, 15, 9, chunk_size=5) >>> ks_1samp(x, stats.norm.cdf).execute() (0.44435602715924361, 0.038850142705171065)
>>> ks_1samp(stats.norm.rvs(size=100), stats.norm.cdf).execute() KstestResult(statistic=0.165471391799..., pvalue=0.007331283245...)
针对单侧备择假设的测试
将分布移动到更大的值,以便`` CDF(x) < norm.cdf(x)``:
>>> x = stats.norm.rvs(loc=0.2, size=100) >>> ks_1samp(x, stats.norm.cdf, alternative='less').execute() KstestResult(statistic=0.235488541678..., pvalue=1.158315030683...)
拒绝原假设,支持备择假设:小于
>>> ks_1samp(x, stats.norm.cdf, alternative='greater').execute() KstestResult(statistic=0.010167165616..., pvalue=0.972494973653...)
拒绝原假设,以支持备择假设:更大
>>> ks_1samp(x, stats.norm.cdf).execute() KstestResult(statistic=0.235488541678..., pvalue=2.316630061366...)
不要拒绝原假设以支持备择假设:双侧
测试 t 分布随机变量与正态分布的对比
在100个自由度下,t分布看起来接近正态分布,而K-S检验不拒绝样本来自正态分布的假设:
>>> ks_1samp(stats.t.rvs(100, size=100), stats.norm.cdf).execute() KstestResult(statistic=0.077844250253..., pvalue=0.553155412513...)
在3个自由度下,t分布与正态分布看起来有足够的不同,因此我们可以在10%的水平上拒绝样本来自正态分布的假设:
>>> ks_1samp(stats.t.rvs(3, size=100), stats.norm.cdf).execute() KstestResult(statistic=0.118967105356..., pvalue=0.108627114578...)