Main Content

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

filloutliers

データの外れ値の検出と置き換え

説明

B = filloutliers(A,fillmethod) は、A 内の外れ値を検出し、fillmethod に従って外れ値を置き換えます。たとえば、filloutliers(A,'previous') は、外れ値を前の非外れ値の要素に置き換えます。

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

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

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

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

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

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

B = filloutliers(A,fillmethod,movmethod,window) は、ウィンドウの長さ window をもつ移動ウィンドウの平均値または中央値を使用して、局所外れ値を検出します。たとえば、filloutliers(A,'previous','movmean',5) は、5 要素のウィンドウの局所平均値から、局所標準偏差の 3 倍を超えて離れている要素を外れ値として識別します。

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

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

[B,TF,L,U,C] = filloutliers(___) は、その検出メソッドで計算された外れ値の位置としきい値の情報も返します。TF は、A 内の外れ値の位置を示す logical 配列です。引数 LU および C は、外れ値検出メソッドで使用される下限しきい値、上限しきい値および中心値を表します。

すべて折りたたむ

外れ値を含むデータのベクトルを作成し、線形内挿を使用して外れ値を置き換えます。元のデータと内挿後のデータをプロットします。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'linear');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

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

外れ値を含むベクトルを作成し、外れ値を平均値から標準偏差の 3 倍を超えて離れている点として定義します。外れ値を最も近い非外れ値の要素に置き換え、元のデータと内挿データをプロットします。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'nearest','mean');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Interpolated 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 の外れ値の位置を検出します。'clip' メソッドを使用して計算したしきい値で外れ値を埋めて、元のデータと埋め込まれたデータをプロットします。

[B,TF,L,U,C] = filloutliers(A,'clip','movmedian',hours(5),'SamplePoints',t);
plot(t,A,t,B,'o')
legend('Original Data','Filled Data')

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

行列の各行の外れ値を埋めます。

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

A = randn(5,5) + diag(1000*ones(1,5))
A = 5×5
103 ×

    1.0005   -0.0013   -0.0013   -0.0002    0.0007
    0.0018    0.9996    0.0030   -0.0001   -0.0012
   -0.0023    0.0003    1.0007    0.0015    0.0007
    0.0009    0.0036   -0.0001    1.0014    0.0016
    0.0003    0.0028    0.0007    0.0014    1.0005

各行のデータに基づいて外れ値をゼロで埋めて、その新しい値を表示します。

[B,TF,lower,upper,center] = filloutliers(A,0,2);
B
B = 5×5

         0   -1.3077   -1.3499   -0.2050    0.6715
    1.8339         0    3.0349   -0.1241   -1.2075
   -2.2588    0.3426         0    1.4897    0.7172
    0.8622    3.5784   -0.0631         0    1.6302
    0.3188    2.7694    0.7147    1.4172         0

インデックス ベクトルとして TF を使用して、検出された外れ値とその埋め込まれた値に直接アクセスできます。

[A(TF) B(TF)]
ans = 5×2
103 ×

    1.0005         0
    0.9996         0
    1.0007         0
    1.0014         0
    1.0005         0

データのベクトル内で外れ値を検出し、'clip' メソッドを使用して外れ値を置き換えます。元のデータ、埋め込まれたデータ、および検出メソッドで判定されたしきい値と中心値をプロットします。'clip' は外れ値を上限しきい値に置き換えます。

x = 1:10;
A = [60 59 49 49 58 100 61 57 48 58];
[B,TF,lower,upper,center] = filloutliers(A,'clip');
plot(x,A,x,B,'o',x,lower*ones(1,10),x,upper*ones(1,10),x,center*ones(1,10))
legend('Original Data','Filled Data','Lower Threshold','Upper Threshold','Center Value')

Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent Original Data, Filled Data, Lower Threshold, Upper Threshold, Center Value.

入力引数

すべて折りたたむ

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

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

  • A が timetable の場合、filloutliers は table 要素のみを処理します。行時間は一意で、昇順にリストされていなければなりません。

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

外れ値を置き換えるための埋め込みメソッド。次の値のいずれかとして指定します。

埋め込みメソッド説明
数値スカラー指定したスカラー値で埋める
'center'findmethod で求めた中心値で埋める
'clip'findmethod で求めた下限しきい値よりも小さい要素を下限しきい値で埋めるfindmethod で求めた上限しきい値よりも大きい要素を上限しきい値で埋める
'previous'前の非外れ値で埋める
'next'次の非外れ値で埋める
'nearest'最も近い非外れ値で埋める
'linear'隣接する非外れ値の線形内挿を使用して埋める
'spline'区分的 3 次スプライン内挿を使用して埋める
'pchip'形状維持区分的 3 次スプライン内挿を使用して埋める
'makima'修正 Akima 3 次エルミート内挿を使用して埋める (数値、durationdatetime のデータ型のみ)

データ型: double | single | char

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

メソッド説明
'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 を考えます。

  • filloutliers(A,fillmethod,1) は、A の各列のデータに従って外れ値を埋め、mn 列の行列を返します。

    filloutliers(A,fillmethod,1) column-wise operation

  • filloutliers(A,fillmethod,2) は、A の各行のデータに従って外れ値を埋め、mn 列の行列を返します。

    filloutliers(A,fillmethod,2) row-wise operation

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

名前と値の引数

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

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

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

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

例: filloutliers([1 100 3 4],'nearest','SamplePoints',[1 2.5 3 4])

例: filloutliers(T,'nearest','SamplePoints',"Var1")

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

演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables の値は、入力 table 内のどの変数を埋めるかを示します。

DataVariables で指定されていない 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')

例: filloutliers(A,'previous','DataVariables',["Var1" "Var2" "Var4"])

値置換インジケーター。A が table または timetable の場合に、次の値のいずれかとして指定します。

  • true または 1 — 入力 table 変数を、外れ値が埋められた table 変数に置き換えます。

  • false または 0 — 入力 table 変数に、外れ値が埋められた table 変数を追加します。

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

例: filloutliers(T,'previous','ReplaceValues',false)

外れ値検出オプション

すべて折りたたむ

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

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

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

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

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

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

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

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

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

既知の外れ値インジケーター。A と同じサイズの logical ベクトル、行列、または多次元配列として指定します。既知の外れ値インジケーターの要素には、A の対応する位置に外れ値があることを示す true、または外れ値がないことを示す false を指定できます。OutlierLocations を指定すると、既定の外れ値検出メソッドがオフになり、既知の外れ値インジケーターの要素のみを使用して外れ値を定義します。

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

出力 TFOutlierLocations の値と同じです。

データ型: logical

出力引数

すべて折りたたむ

埋められた外れ値配列。ベクトル、行列、多次元配列、table または timetable として指定します。

B は、ReplaceValues の値が false の場合を除き、A と同じサイズになります。ReplaceValues の値が false の場合、B の幅は入力データの幅と指定したデータ変数の数の合計となります。

埋め込まれたデータのインジケーター。ベクトル、行列または多次元配列として返されます。TF は logical 配列であり、1 (true) は埋め込まれた F の要素に対応し、0 (false) は未変更の要素に対応します。

TF は、B と同じサイズになります。

データ型: 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)) です。

拡張機能

バージョン履歴

R2017a で導入

すべて展開する