Main Content

isoutlier

データの外れ値を検出

説明

TF = isoutlier(A) は logical 配列を返します。この logical 配列の要素は、A の対応する要素に外れ値が検出された場合 true となります。

  • A が行列の場合、isoutlierA の各列を個別に処理します。

  • A が多次元配列の場合、isoutlier は、サイズが 1 に等しくない A の最初の次元に沿って演算します。

  • A が table または timetable の場合、isoutlierA の各変数で別々に動作します。

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

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

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

TF = isoutlier(A,movmethod,window) は、ウィンドウの長さが window である移動ウィンドウ法を使用して、局所外れ値を検出します。たとえば、isoutlier(A,"movmedian",5) は、5 要素のウィンドウ内で、局所中央値から、スケーリングされた局所 MAD の 3 倍を超えて離れているすべての要素に対して true を返します。

TF = isoutlier(___,dim) は、前述の任意の構文について、演算の対象とする A の次元を指定します。たとえば、isoutlier(A,2) は行列 A の各行を処理します。

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

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

すべて折りたたむ

データのベクトルの外れ値を検出します。出力の logical 1 は外れ値の位置を表します。

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

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

平均値から標準偏差の 3 倍を超えて離れている点を外れ値として定義し、ベクトルの外れ値の位置を検出します。

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

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

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

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

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 の外れ値の位置を検出します。データと検出した外れ値をプロットします。

TF = isoutlier(A,"movmedian",hours(5),"SamplePoints",t);
plot(t,A)
hold on
plot(t(TF),A(TF),"x")
legend("Original Data","Outlier Data")

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

行列の各行の外れ値を検出します。

対角上に外れ値を含むデータの行列を作成します。

A = magic(5) + diag(200*ones(1,5))
A = 5×5

   217    24     1     8    15
    23   205     7    14    16
     4     6   213    20    22
    10    12    19   221     3
    11    18    25     2   209

各行のデータに基づいて外れ値の位置を検出します。

TF = isoutlier(A,2)
TF = 5x5 logical array

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

データのベクトルの外れ値を特定し、外れ値を可視化します。

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

x = 1:10;
A = [60 59 49 49 58 100 61 57 48 58];

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

[TF,L,U,C] = isoutlier(A);

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

plot(x,A)
hold on
plot(x(TF),A(TF),"x")
yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"])
legend("Original Data","Outlier Data")

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

入力引数

すべて折りたたむ

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

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

  • A が timetable の場合、isoutlier は 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 ではない最初の配列の次元です。

mn 列の入力行列 A を考えます。

  • isoutlier(A,1) は、A の各列のデータに基づいて外れ値を検出し、mn 列の行列を返します。

    isoutlier(A,1) column-wise operation

  • isoutlier(A,2) は、A の各行のデータに基づいて外れ値を検出し、mn 列の行列を返します。

    isoutlier(A,2) row-wise operation

入力データが table または timetable の場合、dim はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。

名前と値の引数

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

例: isoutlier(A,"mean",ThresholdFactor=4)

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

例: isoutlier(A,"mean","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 が入力データに対応する時間のベクトルである場合、isoutlier(rand(1,10),"movmean",3,"SamplePoints",t) には t(i)-1.5 から t(i)+1.5 までの時間間隔を表すウィンドウがあります。

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

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

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

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

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

最初の出力 TF には、DataVariables で指定されていない変数については false が格納されます。ただし、OutputFormat の値が "tabular" の場合を除きます。

オプション説明
変数名

単一の 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")

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

出力データ型。次の値のいずれかとして指定します。

  • "logical" — 入力データが table または timetable の場合、出力 TF を logical 配列として返します。

  • "tabular" — 入力データが table の場合、出力 TF を table として返します。入力データが timetable の場合、出力 TF を timetable として返します。

入力データがベクトル、行列、または多次元配列の場合、OutputFormat はサポートされません。

例: isoutlier(T,"OutputFormat","tabular")

外れ値検出オプション

すべて折りたたむ

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

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

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

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

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

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

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

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

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

出力引数

すべて折りたたむ

外れ値インジケーター。ベクトル、行列、多次元配列、table または timetable として返されます。

TF は、OutputFormat の値が "tabular" の場合を除き、A と同じサイズになります。OutputFormat の値が "tabular" の場合、TF は、指定された DataVariables に対応する変数のみをもちます。

データ型: logical

外れ値検出メソッドで使用された下限しきい値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの下限しきい値は、入力データの中央値よりスケーリングされた MAD の 3 倍分小さい値です。L のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じです。

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

外れ値検出メソッドで使用された上限しきい値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの上限しきい値は、入力データの中央値よりスケーリングされた MAD の 3 倍分大きい値です。U のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じです。

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

外れ値検出メソッドで使用された中心値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの中心値は、入力データの中央値です。C のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じです。

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

詳細

すべて折りたたむ

中央絶対偏差

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)) です。

参照

[1] NIST/SEMATECH e-Handbook of Statistical Methods, https://www.itl.nist.gov/div898/handbook/, 2013.

拡張機能

バージョン履歴

R2017a で導入

すべて展開する