Graviness Blog

算数・数学・科学・電脳・雑記・アホの順の密度で記事が構成されます。
<< May 2018 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >> ブログランキング・にほんブログ村へ
 
RECOMMEND
ビッグバン宇宙論 (上)
ビッグバン宇宙論 (上) (JUGEMレビュー »)
サイモン・シン, 青木 薫
RECENT COMMENT
  • 豊臣秀吉と曾呂利新左衛門から学ぶ数列の和
    優乃 (07/12)
  • 【誰か解いて】漸化式 a_(n+1) = f(n) * a_n ^ g(n) + h(n) の一般項
    優乃 (02/18)
  • 【誰か解いて】漸化式 a_(n+1) = f(n) * a_n ^ g(n) + h(n) の一般項
    S.S.+ (02/16)
  • 豊臣秀吉と曾呂利新左衛門から学ぶ数列の和
    坂井昭 (03/19)
  • d/dx(x↑↑n): 高さが定数のテトレーションの微分 - 数学的帰納法を用いる方法
    (09/30)
  • 全ての三角形は二等辺三角形
    優乃 (09/28)
  • 全ての三角形は二等辺三角形
    亀レス (09/28)
  • 全ての三角形は二等辺三角形
    優乃 (09/24)
  • 全ての三角形は二等辺三角形
    亀レス (09/23)
  • 【未解決】新しい演算子を創る
    $_ (09/10)
RECENT TRACKBACK
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
Smirnov-Grubbs検定を用いる外れ値除去のPython実装

スミルノフ−グラブス検定を用いる外れ値除去のPython(NumPy/SciPy使用)の実装です。

 

下記smirnov_grubbs関数にサンプルデータと有意水準α(両側100α%)を入力すると、外れ値を除去したサンプルデータと、抽出した外れ値データを出力します。

 

サンプルデータのうち平均値からの偏差が最も大きいデータを、有意水準(両側)でスミルノフ−グラブス検定し、帰無仮説を棄却した場合に当該データを外れ値とします。当該データを除いたサンプルデータに対し、外れ値がなくなるまでこの操作を繰り返します。

 

ref. スミルノフ−グラブス検定@wikipedia

 

# coding: utf-8
#
# smirnov_grubbs(data, alpha)
#   Generate outlier-removed data with Smirnov-Grubbs.
#
#   Parameters:
#     data: array_like
#       Numeric data values.
#     alpha: float
#       Significance level. (two-sided)
#
#   Returns:
#     outlier-removed-data
#     outlier-data
#
#   e.g.
#     data = [1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 1000]
#     alpha = 0.01
#     smirnov_grubbs(data, alpha)
#     ==> ([100, 101, 102, 103, 104, 105, 106, 107, 108, 109], [1000, 1])

import numpy as np
import scipy.stats as stats

def smirnov_grubbs(data, alpha):
    x, o = list(data), []
    while True:
        n = len(x)
        t = stats.t.isf(q=(alpha / n) / 2, df=n - 2)
        tau = (n - 1) * t / np.sqrt(n * (n - 2) + n * t * t)
        i_min, i_max = np.argmin(x), np.argmax(x)
        myu, std = np.mean(x), np.std(x, ddof=1)
        i_far = i_max if np.abs(x[i_max] - myu) > np.abs(x[i_min] - myu) else i_min
        tau_far = np.abs((x[i_far] - myu) / std)
        if tau_far < tau: break
        o.append(x.pop(i_far))
    return (np.array(x), np.array(o))

 

JUGEMテーマ:コンピュータ

統計学入門 (基礎統計学)

E(・)とかV(・)とか、気になる中心極限定理の原理とか、確率分布の再生性とか、確率分布の畳み込みとかとかとか、数式や証明レベルで理解できるようになります。統計学的手法を業務等で活用するときに、既にあるライブラリをただ使うだけでなく、正しく組み合わせて実用化範囲を拡げることができるようになるでしょう。数式の少ない簡単な入門書に飽きてきた人も必見です♪

コメント
コメントする









 
トラックバック
この記事のトラックバックURL
http://blog.graviness.com/trackback/949269
 

(C) 2018 ブログ JUGEM Some Rights Reserved.