Main Content

rmoutliers

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

説明

B = rmoutliers(A) は、A 内のデータの外れ値を検出し、削除します。

  • A が行列の場合、rmoutliersA の各列の外れ値を個別に検出し、その行全体を削除します。

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

既定での外れ値とは、中央値からの距離が中央絶対偏差 (MAD) の 3 倍を超えている値です。

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

B = rmoutliers(A,"percentiles",threshold) は、外れ値を threshold で指定された百分位数の範囲外にある点として定義します。threshold 引数は、[10 90] など、百分位数の上下のしきい値を含む 2 要素の行ベクトルです。

B = rmoutliers(A,movmethod,window) は、ウィンドウの長さ window をもつ移動ウィンドウの平均値または中央値を使用して、局所外れ値を検出します。たとえば、rmoutliers(A,"movmean",5) は、5 要素のウィンドウの局所平均値から、局所標準偏差の 3 倍を超えた位置にある要素を外れ値として定義します。

B = rmoutliers(___,dim) は、前述の任意の構文を使用して外れ値が検出された場合に、エントリを削除する A の次元を指定します。たとえば、rmoutliers(A,2) は行列 A の行の代わりに列を削除します。

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

[B,TFrm] = rmoutliers(___) は、A から削除された行または列を示す logical ベクトル TFrm も返します。

[B,TFrm,TFoutlier] = rmoutliers(___) は、A から削除された外れ値の位置を示す logical 配列 TFoutlier も返します。

[B,TFrm,TFoutlier,L,U,C] = rmoutliers(___) は、外れ値検出メソッドで使用された下限しきい値 L、上限しきい値 U、および中心値 C も返します。

すべて折りたたむ

2 つの外れ値を含むベクトルを作成し、外れ値を削除します。

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

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

平均検出メソッドを使用してデータの timetable にある潜在的な外れ値を特定し、外れ値をすべて削除してからクリーニング済みのデータを可視化します。

データの timetable を作成し、データを可視化して潜在的な外れ値を特定します。

T = hours(1:15);
V = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
A = timetable(T',V');
plot(A.Time,A.Var1)

Figure contains an axes object. The axes object contains an object of type line.

データの外れ値を削除します。ここで、外れ値は平均値から標準偏差の 3 倍を超えた位置にある点として定義されています。

B = rmoutliers(A,"mean")
B=14×1 timetable
    Time     Var1
    _____    ____

    1 hr      57 
    2 hr      59 
    3 hr      60 
    4 hr     100 
    5 hr      59 
    6 hr      58 
    7 hr      57 
    8 hr      58 
    10 hr     61 
    11 hr     62 
    12 hr     60 
    13 hr     62 
    14 hr     58 
    15 hr     57 

同じグラフに、元のデータと、外れ値が削除されたデータをプロットします。

hold on
plot(B.Time,B.Var1,"o-")
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Cleaned Data.

移動中央値を使用して、時間ベクトルに対応する正弦波内の局所外れ値を検出し、削除します。

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

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,TFrm] = rmoutliers(A,"movmedian",hours(5),"SamplePoints",t);

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

plot(t,A)
hold on
plot(t(~TFrm),B,"o-")
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Cleaned Data.

データの行列から外れ値を削除し、削除された列と外れ値を調べます。

2 つの外れ値を含む行列を作成します。

A = magic(5);
A(4,4) = 200;
A(5,5) = 300;
A
A = 5×5

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

削除する次元を 2 と指定して、外れ値を含む列を削除します。削除された A の列を示す logical の出力ベクトル TFrm が返され、また A の外れ値の位置を示す logical の出力配列 TFoutlier が返されます。

[B,TFrm,TFoutlier] = rmoutliers(A,2)
B = 5×3

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

TFrm = 1x5 logical array

   0   0   0   1   1

TFoutlier = 5x5 logical array

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

A の削除された列の値を調べます。

rmCol = A(:,TFrm)
rmCol = 5×2

     8    15
    14    16
    20    22
   200     3
     2   300

A の外れ値の値を調べます。

rmVal = A(TFoutlier)
rmVal = 2×1

   200
   300

2 つの外れ値を含むベクトルを作成し、外れ値の位置を検出します。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
detect = isoutlier(A)
detect = 1x15 logical array

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

外れ値を削除します。検出メソッドを使用する代わりに、isoutlier によって検出された外れ値の位置を指定します。

B = rmoutliers(A,"OutlierLocations",detect)
B = 1×13

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

データのベクトルから外れ値を削除して、クリーニング済みのデータを可視化します。

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

A = [60 59 49 49 58 100 61 57 48 58];

既定の検出メソッド "median" を使用して、外れ値を削除します。

[B,TFrm,TFoutlier,L,U,C] = rmoutliers(A);

元のデータ、外れ値を削除した後のデータ、および検出メソッドで決定されたしきい値と中心値をプロットします。中心値はデータの中央値で、上限および下限しきい値は中央値から上下に MAD の 3 倍離れた値です。

plot(A)
hold on
plot(find(~TFrm),B,"o-")
yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"])
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 5 objects of type line, constantline. These objects represent Original Data, Cleaned Data.

入力引数

すべて折りたたむ

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

  • A が table の場合、その変数の型は double または single でなければなりません。または、DataVariables 引数を使用して double または single の変数を明示的にリストすることもできます。doublesingle 以外のデータ型の変数を含む table を操作する場合、変数を指定すると便利です。

  • A が timetable の場合、rmoutliers は table 要素のみを処理します。行時間がサンプル点として使用されている場合、行時間は一意で、かつ昇順にリストされていなければなりません。

データ型: double | single | table | timetable

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

メソッド説明
"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" に似ていますが、複数の外れ値が相互にマスキングしている場合により効果的に機能します。

百分位数のしきい値。区間 [0, 100] 内の要素をもつ 2 要素の行ベクトルとして指定します。最初の要素は百分位数の下限しきい値を示し、2 番目の要素は百分位数の上限しきい値を示します。threshold の最初の要素は、2 番目の要素より小さくなければなりません。

たとえば、しきい値が [10 90] の場合、外れ値は 10 番目の百分位数を下回る点、および 90 番目の百分位数を超える点として定義されます。

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

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

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

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

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

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

削除対象の次元。1 または 2 を指定します。rmoutliers は既定で、外れ値の検出された各行を削除します。外れ値の検出された各行列の列、または table 変数を削除するには、次元 2 を指定します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

例: rmoutliers(A,ThresholdFactor=4)

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

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

データ オプション

すべて折りたたむ

サンプル点。サンプル点の値のベクトルとして、また入力データが table の場合は、次の表のいずれかのオプションとして指定します。サンプル点はデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔でサンプリングされている必要はありません。既定の設定はベクトル [1 2 3 ...] です。

入力データが table の場合は、次のいずれかのオプションを使用して、サンプル点を table 変数として指定できます。

table 入力のオプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたはスカラー string

'Var1'

"Var1"

変数インデックスのスカラー

table 変数のインデックスのスカラー

3

logical ベクトル

各要素が table 変数に対応する logical ベクトル (対応する変数をサンプル点として指定する場合は true、その他の要素はすべて false)

[true false false]

関数ハンドル

入力として table 変数をとり、1 つの table 変数のみを true とする logical スカラーを返す関数ハンドル

@isnumeric

vartype 添字

1 つの変数のみに対して添字を返す関数 vartype によって生成される table の添字

vartype('numeric')

メモ

入力データが timetable の場合、この名前と値の引数はサポートされません。timetable では、行時間のベクトルをサンプル点として使用します。別のサンプル点を使用するには、目的のサンプル点が行時間に含まれるように timetable を編集しなければなりません。

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

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

例: rmoutliers(A,"SamplePoints",0:0.1:10)

例: rmoutliers(T,"SamplePoints","Var1")

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

演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables の値は、入力 table 内の外れ値を調べる変数を示します。指摘された変数に関連付けられるデータ型は double または single でなければなりません。

DataVariables で指定されていない table 内の他の変数は、外れ値を調べずに出力に渡されます。

A の行に対して動作する場合、rmoutliers は指定された変数に対応する列内で外れ値を含むすべての行を削除します。A の列に対して動作する場合、rmoutliers は指定された変数を table から削除します。

オプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたは string スカラー

'Var1'

"Var1"

変数名のベクトル

各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

{'Var1' 'Var2'}

["Var1" "Var2"]

変数インデックスのスカラーまたはベクトル

table 変数インデックスのスカラーまたはベクトル

1

[1 3 5]

logical ベクトル

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

[true false true]

関数ハンドル

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

@isnumeric

vartype 添字

関数 vartype によって生成される table の添字

vartype("numeric")

例: rmoutliers(T,"DataVariables",["Var1" "Var2" "Var4"])

外れ値検出オプション

すべて折りたたむ

検出しきい値の係数。非負のスカラーとして指定します。

"median" メソッドおよび "movmedian" メソッドでは、検出しきい値の係数で、スケーリングされた MAD の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。

"mean" メソッドおよび "movmean" メソッドでは、検出しきい値の係数で平均値からの標準偏差の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。

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

"quartiles" メソッドでは、検出しきい値の係数により四分位数間範囲の係数が置き換えられます。検出しきい値の係数の既定値は 1.5 です。

"percentiles" メソッドが指定されている場合、この名前と値のペアはサポートされません。

既知の外れ値インジケーター。A と同じサイズの logical ベクトル、または logical 行列として指定します。既知の外れ値インジケーターの要素には、A の対応する位置に外れ値があることを示す数値または logical 1 (true)、または外れ値がないことを示す logical 0 (false) を指定できます。OutlierLocations を指定した場合、rmoutliers は外れ値検出メソッドを使用しません。代わりに、既知の外れ値インジケーターの要素を使用して、外れ値を定義します。出力 TFoutlier は同じ logical ベクトルまたは logical 行列を含みます。

method を指定した場合、名前と値の引数 OutlierLocations を指定することはできません。

データ型: logical

GESD により検出される外れ値の最大数。正の整数スカラーとして指定します。MaxNumOutliers 値は、"gesd" メソッドにより検出される外れ値の最大数を指定します。たとえば、rmoutliers(A,"gesd","MaxNumOutliers",5) は最大 5 つの外れ値を検出します。

MaxNumOutliers の既定値は、A の要素数の 10% に最も近い整数です。外れ値の最大数に大きい値を設定すると、すべての外れ値を検出する可能性が高くなりますが、それと引き換えに計算効率が低下します。

"gesd" メソッドは、非外れ値の入力データがほぼ正規分布からサンプリングされていると仮定します。データがこのようにサンプリングされていない場合、検出された外れ値の数が MaxNumOutliers 値を上回ることがあります。

削除に必要な外れ値の最小数。正の整数スカラーとして指定します。MinNumOutliers 値は、行または列を削除するために必要な外れ値の最小数を指定します。たとえば rmoutliers(A,"MinNumOutliers",3) は、行列 A のある行で 3 つ以上の外れ値が検出されると、その行を削除します。

出力引数

すべて折りたたむ

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

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

データ型: logical

外れ値インジケーター。logical ベクトルまたは logical 行列として返されます。値が 1 (true) の要素は、A の外れ値の位置に対応します。値が 0 (false) の要素は、非外れ値に対応します。

TFoutlier は、A と同じサイズになります。

データ型: logical

外れ値検出メソッドで使用された下限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの下限しきい値は、入力データの中央値より MAD の 3 倍分小さい値です。

外れ値検出に method を使用する場合、L のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、L のサイズは A と同じになります。

外れ値検出メソッドで使用された上限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの上限しきい値は、入力データの中央値より MAD の 3 倍分大きい値です。

外れ値検出に method を使用する場合、U のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、U のサイズは A と同じになります。

外れ値検出メソッドで使用された中心値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの中心値は、入力データの中央値です。

外れ値検出に method を使用する場合、C のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、C のサイズは A と同じになります。

拡張機能

バージョン履歴

R2018b で導入

すべて展開する