Scipy kstest returns 相似值集的不同 p 值
Scipy kstest returns different p-values for similar sets of values
在 Python 3.6.5 和 scipy 1.1.0 中,当我 运行 Kolmogorov-Smirnov 检验检查均匀分布时,我得到了两个相反的结果(来自p 值透视)如果我用行或列向量提供 kstest 函数:
from scipy import stats
import numpy as np
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(10000, 1)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.0)
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(1, 10000)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.00013567662455016283)
你知道为什么会这样吗?
docstring of kstest
中提到,当kstest
的第一个参数是数组时,期望是一维数组.在您的示例中,您正在传递 二维 数组(其中一个维度在每种情况下都是微不足道的)。事实证明,当输入数组为二维时,kstest
中的代码不会执行您期望的操作。
简单的解决方法是在将数组传递给 kstest
之前展平数组。 ravel()
方法可用于执行此操作。例如,
In [50]: np.random.seed(seed=123)
In [51]: x = np.random.uniform(low=0, high=1, size=(10000, 1))
In [52]: stats.kstest(x.ravel(), 'uniform')
Out[52]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)
In [53]: np.random.seed(seed=123)
In [54]: x = np.random.uniform(low=0, high=1, size=(1, 10000))
In [55]: stats.kstest(x.ravel(), 'uniform')
Out[55]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)
在 Python 3.6.5 和 scipy 1.1.0 中,当我 运行 Kolmogorov-Smirnov 检验检查均匀分布时,我得到了两个相反的结果(来自p 值透视)如果我用行或列向量提供 kstest 函数:
from scipy import stats
import numpy as np
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(10000, 1)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.0)
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(1, 10000)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.00013567662455016283)
你知道为什么会这样吗?
docstring of kstest
中提到,当kstest
的第一个参数是数组时,期望是一维数组.在您的示例中,您正在传递 二维 数组(其中一个维度在每种情况下都是微不足道的)。事实证明,当输入数组为二维时,kstest
中的代码不会执行您期望的操作。
简单的解决方法是在将数组传递给 kstest
之前展平数组。 ravel()
方法可用于执行此操作。例如,
In [50]: np.random.seed(seed=123)
In [51]: x = np.random.uniform(low=0, high=1, size=(10000, 1))
In [52]: stats.kstest(x.ravel(), 'uniform')
Out[52]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)
In [53]: np.random.seed(seed=123)
In [54]: x = np.random.uniform(low=0, high=1, size=(1, 10000))
In [55]: stats.kstest(x.ravel(), 'uniform')
Out[55]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)