ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

rmoutliers

データ内の外れ値の検出と削除

構文

B = rmoutliers(A)
B = rmoutliers(A,method)
B = rmoutliers(A,movmethod,window)
B = rmoutliers(___,dim)
B = rmoutliers(___,Name,Value)
[B,TF] = rmoutliers(___)

説明

B = rmoutliers(A) は、ベクトル、行列、table、または timetable 内のデータの外れ値を検出し、削除します。

  • A が行または列ベクトルである場合、rmoutliers は外れ値を検出し、削除します。

  • A が行列、table、または timetable である場合、rmoutliersA の各列または変数の外れ値を個別に検出し、その行全体を削除します。

既定では、外れ値とはスケーリングされた中央絶対偏差 (MAD) の 3 倍を超えて中央値から離れている値を指します。

B = rmoutliers(A,method) は外れ値を特定するメソッドを指定します。たとえば、rmoutliers(A,'mean') は、標準偏差の 3 倍を超えて平均値から離れている A の要素を外れ値として定義します。

B = rmoutliers(A,movmethod,window) は、指定されたウィンドウに従って局所外れ値を検出する移動メソッドを指定します。たとえば、rmoutliers(A,'movmean',5) は、5 要素のウィンドウの局所平均値から、局所標準偏差の 3 倍を超えて離れている要素を外れ値として定義します。

B = rmoutliers(___,dim) は、前述のどの構文についても、A の次元 dim に沿って外れ値を削除します。たとえば、rmoutliers(A,2) は行列 A の行の代わりに列を削除します。

B = rmoutliers(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、外れ値の検出および削除を行うための追加のパラメーターを指定します。たとえば、rmoutliers(A,'SamplePoints',t) は時間ベクトル t の対応する要素を基準として A の外れ値を検出します。

[B,TF] = rmoutliers(___) は、A の削除された行または列に対応する logical ベクトルも返します。

すべて折りたたむ

2 つの外れ値を含むベクトルを作成し、その外れ値を削除します。TF によって、入力ベクトルのどの要素が外れ値として検出され、削除されたかを特定できます。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
[B,TF] = rmoutliers(A)
B = 1×13

    57    59    60    59    58    57    58    61    62    60    62    58    57

TF = 1x15 logical array

   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0

A(TF)
ans = 1×2

   100   300

データの平均値から標準偏差の 3 倍を超えて離れている点を外れ値として定義しているベクトルの外れ値を削除します。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
[B,TF] = rmoutliers(A,'mean')
B = 1×14

    57    59    60   100    59    58    57    58    61    62    60    62    58    57

TF = 1x15 logical array

   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0

A(TF)
ans = 300

局所外れ値を含むデータのベクトルを作成します。

x = -2*pi:0.1:2*pi;
A = sin(x);
A(47) = 0;

A のデータに対応する時間ベクトルを作成します。

t = datetime(2017,1,1,0,0,0) + hours(0:length(x)-1);

スライディング ウィンドウ内の局所中央値から、スケーリングされた局所 MAD の 3 倍を超えて離れている点として、外れ値を定義します。ウィンドウ サイズを 5 時間に設定し、t の点を基準として A の外れ値の位置を検出し、外れ値を削除します。

[B,TF] = rmoutliers(A,'movmedian',hours(5),'SamplePoints',t);

入力データと、外れ値が削除されたデータをプロットします。

plot(t,A,'b.-',t(~TF),B,'r-')
legend('Input Data','Output Data')

2 つの外れ値を含んでいる行列を作成し、外れ値を含んでいる列を削除します。

A = magic(5);
A(4,4) = 500;
A(5,5) = 500;
A
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19   500     3
    11    18    25     2   500

B = rmoutliers(A,2)
B = 5×3

    17    24     1
    23     5     7
     4     6    13
    10    12    19
    11    18    25

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、table または timetable として指定します。

データ型: double | single

外れ値を検出するメソッド。次のいずれかとして指定します。

メソッド説明
'median'外れ値は、スケーリングされた MAD の 3 倍を超えて中央値から離れている要素と定義されます。スケーリングされた MAD は c*median(abs(A-median(A))) と定義されます。ここで、c=-1/(sqrt(2)*erfcinv(3/2)) です。
'mean'外れ値は、標準偏差の 3 倍を超えて平均値から離れている要素と定義されます。このメソッドは 'median' より高速ですが、ロバスト性は低下します。
'quartiles'外れ値は、上位四分位数 (75%) から上に、または下位四分位数 (25%) から下に、四分位範囲の 1.5 倍を超える要素と定義されます。このメソッドは、A のデータが正規分布でない場合に便利です。
'grubbs'外れ値に対してグラブス検定を使用して、外れ値を検出します。これにより、仮説検定に基づいて反復ごとに 1 つの外れ値が除去されます。このメソッドは A のデータが正規分布であることを前提としています。
'gesd'外れ値に対して一般化 ESD 検定を使用して、外れ値を検出します。この反復メソッドは 'grubbs' に似ていますが、複数の外れ値が相互にマスキングしている場合により効果的に機能します。

外れ値を特定する移動メソッド。次のいずれかとして指定します。

メソッド説明
'movmedian'外れ値は、window で指定されたウィンドウの長さでの局所中央値から、スケーリングされた局所 MAD の 3 倍を超えて離れている要素と定義されます。
'movmean'外れ値は、window で指定されたウィンドウの長さでの局所平均値から、局所標準偏差の 3 倍を超えて離れている要素と定義されます。

ウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして指定します。

window が正の整数スカラーである場合、ウィンドウは現在の要素を中心にして配置され、window-1 個の隣接する要素を含みます。window が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。

window が正の整数の 2 要素ベクトル [b f] である場合、ウィンドウには現在の要素、b 個前までの要素、f 個後までの要素が含まれます。

A が timetable であるか、'SamplePoints'datetime ベクトルまたは duration ベクトルとして指定されている場合、windowduration 型でなければならず、ウィンドウはサンプル点を基準に計算されます。

操作次元。1 または 2 を指定します。既定では、rmoutliers はサイズが 1 に等しくない最初の次元に沿って動作します。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: rmoutliers(A,'ThresholdFactor',4)

検出しきい値の係数。'ThresholdFactor' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

'grubbs' および 'gesd' メソッドでは、検出しきい値の係数は 0 ~ 1 の範囲のスカラーです。値が 0 に近くなると外れ値の数は少なくなり、値が 1 に近くなると外れ値の数が多くなります。既定の検出しきい値の係数は 0.5 です。

'movmedian' および 'movmean' メソッドでは、検出しきい値の係数はスケーリングされた MAD または平均値からの標準偏差の係数を置き換えます。既定値は 3 です。

'quartile' メソッドでは、検出しきい値の係数は四分位数間範囲の係数を置き換えます。既定値は 1.5 です。

サンプル点。'SamplePoints' とベクトルで構成されるコンマ区切りのペアとして指定します。サンプル点は A 内のデータの位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔でサンプリングされている必要はありません。A が timetable の場合、既定のサンプル点ベクトルは行時間のベクトルです。それ以外の場合、既定のベクトルは [1 2 3 ...] です。

移動ウィンドウは、サンプル点を基準にして定義されます。たとえば、t が入力データに対応する時間のベクトルである場合、rmoutliers(rand(1,10),'movmean',3,'SamplePoints',t) には t(i)-1.5 から t(i)+1.5 までの時間間隔を表すウィンドウがあります。

サンプル点ベクトルのデータ型が datetime または duration である場合、移動ウィンドウの長さの型は duration でなければなりません。

データ型: single | double | datetime | duration

table 変数。'DataVariables' と、変数名、変数名の cell 配列、数値ベクトル、論理ベクトルまたは関数ハンドルのいずれかで構成されるコンマ区切りのペアとして指定します。'DataVariables' 値は、外れ値を検出する入力 table 内の列を示し、次のいずれかにすることができます。

  • 単一の table 変数名を指定する文字ベクトル

  • 各要素が table 変数名である文字ベクトルの cell 配列

  • table 変数インデックスのベクトル

  • 各要素が table 変数に対応する論理ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

  • 入力として table をとり、論理スカラーを返す関数ハンドル

例: 'Age'

例: {'Height','Weight'}

例: @isnumeric

データ型: char | cell | double | single | logical | function_handle

外れ値の最小数。'MinNumOutliers' と正のスカラーで構成されるコンマ区切りのペアとして指定します。'MinNumOutliers' 値は、行または列を削除するために必要な外れ値の最小数を指定します。たとえば、rmoutliers(A,'MinNumOutliers',3) は、列内で 3 つ以上の外れ値が検出された場合に、行列 A の行を削除します。

外れ値の最大数。'gesd' メソッドでのみ使用します。'MaxNumOutliers' と正のスカラーで構成されるコンマ区切りのペアとして指定します。'MaxNumOutliers' 値は、'gesd' メソッドにより返される外れ値の最大数を指定します。たとえば、rmoutliers(A,'MaxNumOutliers',5) は最大で 5 つの外れ値を返します。

'MaxNumOutliers' の既定値は、A の要素数の 10% に最も近い整数です。外れ値の最大数の値を大きく設定すると、すべての外れ値を確実に検出できるようになりますが、演算の効率性は低下します。

出力引数

すべて折りたたむ

外れ値が削除されたデータ。ベクトル、行列、table または timetable として返されます。B のサイズは削除された行または列の数に依存します。

削除されたデータ インジケーター。logical ベクトルとして返されます。値 1 (true) は A の削除された行または列に対応します。値 0 (false) は変更されていない行または列に対応します。TF の向きとサイズは、A および動作対象の次元に依存します。

詳細

すべて折りたたむ

中央絶対偏差

N 個のスカラー観測値で構成される確率変数ベクトル A の場合、中央絶対偏差 (MAD) は i = 1,2,...,N について次のように定義されます。

MAD = median(|Aimedian(A)|)

スケーリングされた MAD は c*median(abs(A-median(A))) と定義されます。ここで、c=-1/(sqrt(2)*erfcinv(3/2)) です。

拡張機能

R2018b で導入