2017-09-27 43 views
0

我试图运行KS检验两个图形 一个是原始数据图(红色),另一种是功法适合Python的KS检验 - 这是为什么P值如此之大

enter image description here

from scipy import stats 
stats.ks_2samp(Red.Y, Blue.Y) 

其中Red.Y是x的每个点的y值,而Blue.Y是每个x的幂律y值。

Out[210]: 
Ks_2sampResult(statistic=0.16666666666666669, pvalue=0.99133252540492101) 

它看起来像p值是非常大的,因为图形是不一样的。我可以问一下原因吗?

为Red.Y值是:

(0.03, 0.09] 0.000018 
(0.09, 0.16] 0.000019 
(0.16, 0.29] 0.000016 
(0.29, 0.5]  0.000018 
(0.5, 0.77]  0.000018 
(0.77, 1.0]  0.000022 
(1.0, 1.05]  0.000021 
(1.05, 1.5]  0.000022 
(1.5, 2.0]  0.000025 
(2.0, 3.0]  0.000025 
(3.0, 4.0]  0.000024 
(4.0, 6.42]  0.000026 

Blue.Y的价值观是:

(0.03, 0.09] 0.000017 
(0.09, 0.16] 0.000017 
(0.16, 0.29] 0.000018 
(0.29, 0.5]  0.000019 
(0.5, 0.77]  0.000020 
(0.77, 1.0]  0.000021 
(1.0, 1.05]  0.000021 
(1.05, 1.5]  0.000022 
(1.5, 2.0]  0.000023 
(2.0, 3.0]  0.000024 
(3.0, 4.0]  0.000025 
(4.0, 6.42]  0.000026 
+0

在我看来,红色曲线的值可以从蓝色曲线的相同分布中绘制出来。 KS检验用于测量2个样本是否来自相同的分布。在这种情况下,它们来自相同的分布。 – titipata

+0

谢谢你的回答。但是,如果我对不同的原始数据(红色曲线)和相应的最佳拟合的幂律线(蓝色曲线)尝试相同的方法,则P值可以低至0.3以下。请问这个背后的原因? – bing

回答

0

基本上,在KS检验,要比较2累积分布(CDF )的2个数据样本(see from from Wikipedia)。假设,你有蓝线数据和红色线数据

red_line = [0.000018, 0.000019, 0.000016, 
0.000018, 0.000018, 0.000022, 
0.000021, 0.000022, 0.000025, 
0.000025, 0.000024, 0.000026] 

blue_line = [0.000017, 0.000017, 0.000018, 
0.000019, 0.000020, 0.000021, 
0.000021, 0.000022, 0.000023, 
0.000024, 0.000025, 0.000026] 

n1 = len(red_line) 
n2 = len(blue_line) 

# CDF of red line 
cdf1 = np.searchsorted(red_line, red_line + blue_line, side='right')/(1.0*len(red_line)) 
# CDF of blue line 
cdf2 = np.searchsorted(blue_line, red_line + blue_line, side='right')/(1.0*len(blue_line)) 

# D-statistic 
d = np.max(np.absolute(cdf1 - cdf2)) 

的d统计量(第一值返回)为2级的CDF之间的最大距离。

对于p值,它是通过将此CDF差异与布朗桥分布相乘来计算的。你可以看到他们如何计算from the source code。基本上,如果您比较CDF与分配之间的差异,并且它仍然相似,我们将获得p > 0.1例如(意味着您不能拒绝它们不是来自同一分配)。

from scipy.stats import distributions 

en = np.sqrt(n1 * n2/float(n1 + n2)) 
prob = distributions.kstwobign.sf((en + 0.12 + 0.11/en) * d) # p-value 

从这里给出的数据中,我得到了(D, p) = (0.1667, 0.9913)

所以,即使图表看起来不同,当您绘制2个样本的CDF时,它可能非常相似,这就是为什么p值仍然很大。