Python實現 MK檢驗

2022-07-11 15:24:15 字數 1724 閱讀 6925

mk檢驗:時間序列進行檢測,並找出突變點,本文參考網上的matlab程式改寫為python**如下:

import

numpy as np

import

pandas as pd

import

matplotlib.pyplot as plt

#讀取時間序列資料

data = pd.read_csv('')#

定義時間和徑流資料列

x =list(range(len(data)))

y =data.to_list

#獲取樣本資料

n =len(y)

#正序計算

#定義累計量序列sk,長度n,初始值為0

sk =np.zeros(n)

ufk =np.zeros(n)

#定義sk序列元素s

s =0

#i從2開始,根據統計量ufk公式,i=1時,sk(1)、e(1)、var(1)均為0,此時ufk無意義,因此公式中,令ufk(1) = 0

for i in range(2,n):

for j in range(1,i):

if y[i]>y[j]:

s += 1sk[i] =s

e = i * (i - 1)/4var = i * (i - 1) * (2 * i + 5)/72ufk[i] = (sk[i] - e)/np.sqrt(var)

#逆序計算,構造逆序列y2,長度為n,初值為0

#定義逆累計量序列sk2,長度n,初始值為0

#定義逆統計量序列sk2,長度n,初始值為0

y2 =np.zeros(n)

sk2 =np.zeros(n)

ubk =np.zeros(n)

#s歸零

s =0

#按時間序列逆轉樣本

y2 = y[::-1]

#i從2開始,根據統計量ubk公式,i=1時,sk(1)、e(1)、var(1)均為0,此時ufk無意義,因此公式中,令ubk(1) = 0

for i in range(2, n):

for j in range(1, i):

if y2[i] >y2[j]:

s += 1sk2[i] =s

e = i * (i - 1) / 4var = i * (i - 1) * (2 * i + 5) / 72ubk[i] = -(sk2[i] - e) /np.sqrt(var)

#逆轉逆序列

ubk2 = ubk[::-1]#畫圖

plt.figure(figsize=(10,5))

plt.plot(range(1 ,n+1),ufk,label = '

ufk',color = '

orange')

plt.plot(range(1 ,n+1),ubk2,label = '

ubk',color = '

cornflowerblue')

plt.ylabel(

'ufk-ubk')

x_lim =plt.xlim()

plt.plot(x_lim,[-1.96,-1.96],'

m--',color = 'r'

)plt.plot(x_lim, [0,0],

'm--')

plt.plot(x_lim,[1.96,1.96],'

m--',color = 'r'

)plt.show()

python假設檢驗的實現

這裡以熟悉的鳶尾花資料集舉例 from sklearn.datasets import load iris data load iris df pd.dataframe data data 100 df target data.target 100 df 0 mean z檢驗 import stat...

曼 惠特尼U檢驗以及Python實現

曼 惠特尼u檢驗又稱 曼 惠特尼秩和檢驗 英文 mann whitney u test 是由h.b.mann和d.r.whitney於1947年提出的。它假設兩個樣本分別來自除了總體均值以外完全相同的兩個總體,目的是檢驗這兩個總體的均值是否有顯著的差別,簡單來說就是ab小樣本 樣本數不一定相等 分別...

IP報頭檢驗和演算法的python實現

ip校驗和字段是用來檢驗資料傳輸正確性的。在傳送資料時,為了計算 ip資料報的校驗和,按如下步驟 1 把ip 資料報的校驗和字段置為0 2 把首部看成以 16位為單位的數字組成,依次進行二進位制反碼求和 3 把得到的結果存入校驗和字段中。在接收方,要驗證資料的正確性,按如下步驟 1 把首部看成以 1...