0

我发现解释随机样本形状的方式对 kstest 有很大影响。我尝试以下代码:

import numpy as np
from scipy import stats

N = 260
np.random.seed(1)
X = np.random.rand(N)
Xarray = X.reshape(N,1)
XarrayT = Xarray.T

print('X' + str(X.shape) + ': ' + str(stats.kstest(X, 'uniform') ) )
print( 'Xarray' + str(Xarray.shape) + ':' + str( stats.kstest(Xarray, 'uniform') ) )
print( 'XarrayT' + str(XarrayT.shape) + ': ' + str( stats.kstest(XarrayT, 'uniform') ) )

它给出了结果:

X(260,): KstestResult(statistic=0.052396054203786291, pvalue=0.46346349447418866)
Xarray(260, 1):KstestResult(statistic=0.99988562518265511, pvalue=0.0)
XarrayT(1, 260): KstestResult(statistic=0.99988562518265511, pvalue=0.00022874963468977327)

其中 X、Xarray、XarrayT 具有相同的数据,只是它们的形状不同。pvalues完全不同。是由于错误还是我错过了正确使用 kstest 的某些要点?

谢谢!

4

1 回答 1

0

好吧,scipy kstest 文档告诉我们它应该是一维数组。

如果我们运行以下命令:

print('X ' + 'ndimensions=' + str(X.ndim) + ' ' + (str(stats.kstest(X, 'uniform'))))

我们在目标数组中看到 1 个维度。

输出:

X ndimensions=1 KstestResult(statistic=0.052396054203786291, pvalue=0.46346349447418866)

但是,当我们尝试其他 Xarray 时:

print('Xarray ' + 'ndimensions=' + str(Xarray.ndim) + ' ' + (str(stats.kstest(Xarray, 'uniform'))))

Xarray ndimensions=2 KstestResult(statistic=0.99988562518265511, pvalue=0.0)

这向我表明,在输入数组中使用二维会破坏 Kolmogorov-Smirnov 拟合优度检验。

我还建议阅读这个 stackoverflow 问题的答案

于 2017-10-26T15:09:35.187 回答