ドキュメンテーション

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

filloutliers

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

構文

B = filloutliers(A,fillmethod)
B = filloutliers(A,fillmethod,findmethod)
B = filloutliers(A,fillmethod,movmethod,window)
B = filloutliers(___,dim)
B = filloutliers(___,Name,Value)
[B,TF,lower,upper,center] = filloutliers(___)

説明

B = filloutliers(A,fillmethod) は、A 内の外れ値を検出し、fillmethod に従って外れ値を置き換えます。たとえば、filloutliers(A,'previous') は、外れ値を前の非外れ値の要素に置き換えます。既定では、外れ値とはスケーリングされた中央絶対偏差 (MAD) の 3 倍を超えて中央値から離れている値を指します。A が行列または table の場合、filloutliers は各列を個別に処理します。A が多次元配列の場合、filloutliers は、サイズが 1 に等しくない最初の次元に沿って処理します。

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

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

B = filloutliers(___,dim) は、前述のどの構文についても、A の次元 dim に沿って処理します。たとえば、filloutliers(A,'linear',2) は行列 A の各行を処理します。

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

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

すべて折りたたむ

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

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')

外れ値を含むベクトルを作成し、外れ値を平均値から標準偏差の 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')

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

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

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,upper,lower,center] = filloutliers(A,'clip','movmedian',hours(5),'SamplePoints',t);
plot(t,A,t,B,'o')
legend('Original Data','Filled Data')

外れ値を置き換えたしきい値を表示します。

lower(TF)
ans =

   -0.8779

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

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

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

   1.0e+03 *

    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 =

         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 =

   1.0e+03 *

    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')

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、多次元配列、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 次スプライン内挿を使用して埋める

データ型: 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' に似ていますが、複数の外れ値が相互にマスキングしている場合により効果的に機能します。

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

メソッド説明
'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 型でなければならず、ウィンドウはサンプル点を基準に計算されます。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

演算の対象の次元。正の整数のスカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。

行列 A を考えます。

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

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

A が table または timetable の場合、dim はサポートされません。filloutliers は、個々の table または timetable の変数に対して個別に動作します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前/値のペアの引数

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

例: filloutliers(A,'center','mean','ThresholdFactor',4)

すべて折りたたむ

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

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

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

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

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

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

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

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

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

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

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

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

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

例: 'Age'

例: {'Height','Weight'}

例: @isnumeric

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

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

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

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

出力 TF'OutlierLocations' 値と同じです。

データ型: logical

出力引数

すべて折りたたむ

埋められた外れ値配列。ベクトル、行列、多次元配列、table または timetable として指定します。B の要素は A の要素と同じですが、fillmethod に従ってすべての外れ値が置き換えられています。

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

外れ値インジケーター。ベクトル、行列または多次元配列として返されます。TF の要素は、A の対応する要素が外れ値の場合は true で、それ以外の場合は false です。TF のサイズは A と同じです。

データ型: logical

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

データ型: double | single

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

データ型: double | single

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

データ型: double | single

詳細

すべて折りたたむ

中央絶対偏差

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

MAD = median(|Aimedian(A)|)

R2017a で導入

この情報は役に立ちましたか?