FAQ-878 ユーザーが設定した定義によって外れ値を排除するには?

最終更新日:2017/7/4

ワークシート内のセルを独自の外れ値の定義によって識別するには、LabTalk関数を使用する必要があります。次のサンプルコードでは、Z絶対値(=abs((x-MeanOfColumn)/SDOfColumn))が設定した閾値より大きいときに、値を外れ値として定義します。

function dataset remoutliers(dataset ds1, double zthresh) { dataset ds2; double ii; sum(ds1); //ds1の統計を収集 double summean=sum.mean; //平均値を保存 double sumsd=sum.SD; //SDを保存 double nr=ds1.getSize(); //行数 for(ii=1; ii<=nr; ii++) { ds2[ii]=abs(ds1[ii]-summean)/sumsd<=zthresh?ds1[ii]:0/0; //外れ値なら欠損値に設定 } return ds2; }

全シートの検索に、関数remoutliers を使用します。例えば、次のワークシート内の外れ値をマスクする場合を考えます。

FAQ 878 1.png

スクリプトは次のようになります。

zthreshold=1.0; //しきい値をセット nc=wks.ncols; //列の数 nr=wks.maxrows; //行の数 for(jj=1; jj<=nc; jj++){ dataset ds=wcol(jj); range rc=wcol(jj); wcol(jj)=remoutliers(wcol(jj),zthreshold); for(ii=1; ii<=nr; ii++) { if(rc[ii]==0/0) { rc[ii]=ds[ii]; //オリジナルからデータを回復 rc<ii>=1; //セルが欠損ならマスクする } } }

次のような結果が出力されます。

FAQ 878 2.png

Note: データセットが行方向の場合は、最初にワークシートの列を転置する必要があります。


キーワード:外れ値のマスク, 外れ値検出