2017-09-27 7 views
0

P値であることは、生データプロット(赤)で、PythonのKSテスト - なぜ私は2つのグラフ 一つのためKSテストを実行しようとしていますので、大

enter image description here

に合う他のべき乗則であります
from scipy import stats 
stats.ks_2samp(Red.Y, Blue.Y) 

ここで、Red.Yはxの各点でのy値で、Blue.Yはxのそれぞれのべき乗則値です。

グラフが似ていないため、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の値がされています。基本的には、KS-テストでは、あなたは、2累積分布を比較したい

(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

(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統計量(第1の値戻り)を有する、と仮定すると、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値がまだ大きいのです。

関連する問題