Google ColabのPythonを使ってCWFの外れ値を検出・除外してみる

統計処理を真面目にやるためには、触ったこともないRかPythonだなあと思っていたのだが、調べたところGoogle Colaboratoryを使えばPCでの環境構築が必要なくPythonga使えるらしいので、やってみた。触り始めてからまともに使えるまで数日間かかったのだが、引っかかっていたのはPythonデータ形式の扱いであった。ファイルを読み込んだら数字が文字として認識されていたり、データ形式が配列だったりリストだったり、関数によっては配列・リストのどちらかしか適応できなかったり…おかげで勉強になりました。

 Pythonで出力したCWFヒストグラムが以下。これは先日エクセルで作ったものと同じ。Pythonに自動生成させたので軸のラベル貼りはサボってます。

f:id:QtCsf:20210102165630p:plain

1023本分のCWFヒストグラム

で、こっから外れ値を除外するわけであるが、使った手法はスミルノフ・グラブス検定という手法。参考にしたのは下記のサイト

実験データの外れ値を統計学的に判別する方法 | BioTech ラボ・ノート

で、Pythonのコードは

Smirnov-Grubbs検定を用いる外れ値除去のPython実装 | Graviness Blog

にあったので使わせてもらった。有意水準は5%とかがよく用いられているらしいので、5%にした。その結果、15本が外れ値として検定され、ヒストグラムは以下のように変化した。

f:id:QtCsf:20210102170429p:plain

スミルノフ・グラブス検定で外れ値を除外したあとのヒストグラム

で、先日と同じようにQ-Qプロットをして比較してみる(自動生成グラフなので、横軸の値は先日のものと違います)。

f:id:QtCsf:20210102170658p:plain

外れ値除外前のQ-Qプロット

f:id:QtCsf:20210102170741p:plain

外れ値除外後のQ-Qプロット

うーん、直線とは言えないかな…

他にもシャピロウィルク検定ってのもやってみたけど、正規分布とは言えない値が得られた。外れ値除外しても正規分布を仮定した分析は正確ではないみたい。

まあ、それでも目立った外れ値を除外するには十分かな?とりあえずはこれで良いことにして、今後バラツキを評価してみたい。

結論:Pythonと統計分析の勉強になりました(ワイン関係ないな…)