日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

格拉布斯离群值检验——理论与 Python 实现

發(fā)布時間:2023/12/31 python 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 格拉布斯离群值检验——理论与 Python 实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 原理
  • Python 代碼

參考文章: https://en.wikipedia.org/wiki/Grubbs%27s_test

原理

格拉布斯檢驗1是一種假設(shè)檢驗方法(顯著檢驗法),其原假設(shè)為:
H0:H_0:H0?: 數(shù)據(jù)集中沒有離群值
H1:H_1:H1?: 數(shù)據(jù)集中存在離群值

設(shè)數(shù)據(jù)集為:x1,x2,?,xnx_1, x_2, \cdots, x_nx1?,x2?,?,xn?計算 Grubbs 檢驗的檢驗統(tǒng)計量如下:
G=max?∣xi?xˉ∣sG=\frac{\max |x_i-\bar{x}|}{s} G=smaxxi??xˉ?
其中 sss 為樣本的標準差:
s=∑i=1n(xi?xˉ)2n?1s=\sqrt{\frac{\sum_{i=1}^{n} (x_i-\bar{x})^2}{n-1}} s=n?1i=1n?(xi??xˉ)2??
其中檢驗統(tǒng)計量 G 服從:
G~n?1n×t(1?α)/2n2(n?2)n?2+t(1?α)/2n2(n?2)G\sim \frac{n-1}{\sqrt{n}} \times \sqrt{\frac{t^2_{(1-\alpha)/2n}(n-2)}{n-2+t^2_{(1-\alpha)/2n}(n-2)}} Gn?n?1?×n?2+t(1?α)/2n2?(n?2)t(1?α)/2n2?(n?2)??
取顯著水平為 α=0.95\alpha=0.95α=0.95,若:
G>n?1n×t(1?α)/2n2(n?2)n?2+t(1?α)/2n2(n?2)G > \frac{n-1}{\sqrt{n}} \times \sqrt{\frac{t^2_{(1-\alpha)/2n}(n-2)}{n-2+t^2_{(1-\alpha)/2n}(n-2)}} G>n?n?1?×n?2+t(1?α)/2n2?(n?2)t(1?α)/2n2?(n?2)??
拒絕原假設(shè),意味著樣本中存在離群值,而離群值就是那個離 xˉ\bar{x}xˉ 最遠的樣本,一般只要將其從樣本中刪除即可。

于是,對樣本 x1,x2,?,xnx_1, x_2, \cdots, x_nx1?,x2?,?,xn?,重復(fù)上述過程,直到 格拉布斯 檢驗無法檢驗的離群值為止。

Python 代碼

def grubbs_test(x, alpha=0.95):'''格拉布斯檢驗Parameters----------x : array, series樣本.alpha : float, optional置信水平. The default is 0.95.Returns-------x : np.array移除了 outliers 后的樣本.'''# https://en.wikipedia.org/wiki/Grubbs%27s_testif isinstance(x, pd.Series) or isinstance(x, pd.DataFrame):x = x.astype('float').valueselif isinstance(x, list):x = np.array(x)# 樣本個數(shù)p = len(x)beta = 1-alphawhile True:# 格拉布斯法算出離群值if p > 2:# 求均值和方差mean, std, _ = mean_standard(x)G_arr = np.abs(x-mean)/std# 最有可能是離群值的樣本的 indexG_idx = G_arr.argmax()# 求出 Grubbs test 的能力統(tǒng)計量 GG = G_arr[G_idx]t_crital = t.ppf(beta/(2*p), p-2)# 求檢驗統(tǒng)計量在顯著性水平中的臨界值criteria = (p-1)/np.sqrt(p)*np.sqrt(t_crital**2/(p-2+t_crital**2))if G > criteria:# 若樣本中有離群值, 刪除離群值x = np.delete(x, G_idx)# 重新求取參加者個數(shù)p = len(x)else:# 若樣本中沒有離群值,則返回return xelse:return x
  • 這里介紹的方法是雙邊(two-sides)格拉布斯檢驗法。也即同時檢驗兩個方向的離群值,若需要單邊,則只需把 (1?α)/2n(1-\alpha)/2n(1?α)/2n 換做 (1?α)/n(1-\alpha)/n(1?α)/n,把 G 換成 (xmax?xˉ)/s(x_{max}-\bar{x})/s(xmax??xˉ)/s(xˉ?xmin)/s(\bar{x}-x_{min})/s(xˉ?xmin?)/s 即可。 ??

  • 總結(jié)

    以上是生活随笔為你收集整理的格拉布斯离群值检验——理论与 Python 实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。