簡體   English   中英

為什么我在 python 中使用 ks test 時我的 p 值等於 0 而統計量等於 1?

[英]Why did my p-value equals 0 and statistic equals 1 when I use ks test in python?

感謝任何先看的人。

我的代碼是:

import numpy as np
from scipy.stats import kstest
data=[31001, 38502, 40842, 40852, 43007, 47228, 48320, 50500, 54545, 57437, 60126, 65556, 71215, 78460, 81299, 96851, 106472, 108398, 118495, 130832, 141678, 155703, 180689, 218032, 222238, 239553, 250895, 274025, 298231, 330228, 330910, 352058, 362993, 369690, 382487, 397270, 414179, 454013, 504993, 518475, 531767, 551032, 782483, 913658, 1432195, 1712510, 2726323, 2777535, 3996759, 13608152]
x=np.array(data)
test_sta=kstest(x, 'norm')
print(test_sta)

kstest 的結果是 KstestResult(statistic=1.0, pvalue=0.0)。 代碼有問題還是數據根本不正常?

我以前沒有用過這個,但我認為你正在測試你的數據是否是標准正態的(即均值=0,方差=1)

繪制直方圖表明它更接近對數正態。 因此,我會這樣做:

x = np.log(data)
x -= np.mean(x)
x /= np.std(x)
kstest(x, 'norm')

這給了我 0.095 的測試統計量和 0.75 的 p 值,確認我們不能拒絕它不是對數正態的。

檢查此類事情的一個好方法是生成一些隨機數據(來自已知分布)並查看測試返回的內容。 例如:

kstest(np.random.normal(size=100), 'norm')

給我接近 1 的 p 值,而:

kstest(np.random.normal(loc=13, size=100), 'norm')

給我接近 0 的 p 值。

對數正態分布只是意味着它在對數轉換后呈正態分布。 如果您真的想針對正態分布進行測試,則只需不對數據進行日志轉換,例如:

x = np.array(data, dtype=float)
x -= np.mean(x)
x /= np.std(x)
kstest(x, 'norm')

這給了我 7e-7 的 p 值,表明我們可以可靠地拒絕它是正態分布的假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM