Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

rmoutliers

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

説明

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

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

  • A が多次元配列の場合、rmoutliers は、サイズが 1 に等しくない 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,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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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' に似ていますが、複数の外れ値が相互にマスキングしている場合により効果的に機能します。

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

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

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

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

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

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

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

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

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

名前と値の引数

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

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 内の外れ値を調べる変数を示します。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 です。

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

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

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

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

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

出力引数

すべて折りたたむ

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

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

拡張機能

バージョン履歴

R2018b で導入