このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
filloutliers
データの外れ値の検出と置き換え
構文
説明
は、B
= filloutliers(A
,fillmethod
)A
内の外れ値を検出し、fillmethod
に従って外れ値を置き換えます。たとえば、filloutliers(A,"previous")
は、外れ値を前の非外れ値の要素に置き換えます。
A
が行列の場合、filloutliers
はA
の各列を個別に処理します。A
が多次元配列の場合、filloutliers
は、サイズが 1 に等しくないA
の最初の次元に沿って演算します。A
が table または timetable の場合、filloutliers
はA
の各変数で別々に動作します。
既定での外れ値とは、中央値からの距離が中央絶対偏差 (MAD) の 3 倍を超えている値です。
filloutliers
の機能を対話的に使用するには、ライブ スクリプトに [外れ値データの削除] タスクを追加します。
は外れ値を検出するメソッドを指定します。たとえば、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 倍を超えて離れている要素を外れ値として識別します。
は、名前と値の引数を 1 つ以上使用して、外れ値の検出および置き換えを行うための追加のパラメーターを指定します。たとえば、B
= filloutliers(___,Name,Value
)filloutliers(A,"previous","SamplePoints",t)
は時間ベクトル t
の対応する要素を基準として A
の外れ値を検出します。
例
"linear"
メソッドを使用してデータのベクトルの外れ値を埋め、埋められたデータを可視化します。
2 つの外れ値を含むデータのベクトルを作成します。
A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
線形内挿を使用して外れ値を置き換えます。
B = filloutliers(A,"linear");
元のデータと、外れ値が埋められたデータをプロットします。
plot(A) hold on plot(B,"o-") legend("Original Data","Filled Data")
データの table にある外れ値を特定し、"nearest"
埋め込みメソッドを使用して外れ値を埋め、クリーニング済みのデータを可視化します。
データの 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)
データの外れ値を埋めます。ここで、外れ値は平均値から標準偏差の 3 倍を超えた位置にある点として定義されています。外れ値を最も近い非外れ値の要素に置き換えます。
B = filloutliers(A,"nearest","mean")
B=15×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
9 hr 61
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","Filled 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) hold on plot(t,B,"o-") legend("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] = 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
2 つの外れ値を含むベクトルを作成し、外れ値の位置を検出します。
A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57]; detect = isoutlier(A)
detect = 1×15 logical array
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
"nearest"
メソッドを使用して外れ値を埋めます。検出メソッドを使用する代わりに、isoutlier
によって検出された外れ値の位置を指定します。
B = filloutliers(A,"nearest","OutlierLocations",detect)
B = 1×15
57 59 60 59 59 58 57 58 61 61 62 60 62 58 57
"clip"
埋め込みメソッドを使用して、データのベクトルの外れ値を置き換えます。
外れ値があるデータのベクトルを作成します。
A = [60 59 49 49 58 100 61 57 48 58];
既定の "median"
メソッドで外れ値を検出し、"clip"
埋め込みメソッドを使用して外れ値を上限しきい値に置き換えます。
[B,TF,L,U,C] = filloutliers(A,"clip");
元のデータ、埋められた外れ値があるデータ、および外れ値検出メソッドで決定されたしきい値と中心値をプロットします。中心値はデータの中央値で、上限および下限しきい値は中央値から上下に MAD の 3 倍離れた値です。
plot(A) hold on plot(B,"o-") yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"]) legend("Original Data","Filled Data")
R2024a 以降
table を作成し、10 より大きい値として定義されている外れ値を埋めます。埋める外れ値の位置を示す logical 変数 loc
の table を作成します。次に、filloutliers
で名前と値の引数 OutlierLocations
を使用して、既知の外れ値の位置を指定します。
A = [1; 4; 9; 12; 3]; B = [9; 0; 6; 2; 1]; C = [14; 4; 2; 3; 8]; T = table(A,B,C)
T=5×3 table
A B C
__ _ __
1 9 14
4 0 4
9 6 2
12 2 3
3 1 8
loc = T>10
loc=5×3 table
A B C
_____ _____ _____
false false true
false false false
false false false
true false false
false false false
T = filloutliers(T,10,OutlierLocations=loc)
T=5×3 table
A B C
__ _ __
1 9 10
4 0 4
9 6 2
10 2 3
3 1 8
入力引数
入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。
A
が table の場合、その変数の型はdouble
またはsingle
でなければなりません。または、DataVariables
引数を使用してdouble
またはsingle
の変数を明示的にリストすることもできます。double
とsingle
以外のデータ型の変数を含む 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 次エルミート内挿 (数値、duration 、datetime のデータ型のみ) |
データ型: double
| single
| char
| string
外れ値を検出するメソッド。次の値のいずれかとして指定します。
メソッド | 説明 |
---|---|
"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 であるか、SamplePoints
が datetime
ベクトルまたは duration
ベクトルとして指定されている場合、window
は duration
型でなければならず、ウィンドウはサンプル点を基準に計算されます。
操作次元。正の整数スカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。
m
行 n
列の入力行列 A
を考えます。
filloutliers(A,fillmethod,1)
は、A
の各列のデータに従って外れ値を埋め、m
行n
列の行列を返します。filloutliers(A,fillmethod,2)
は、A
の各行のデータに従って外れ値を埋め、m
行n
列の行列を返します。
入力データが table または timetable の場合、dim
はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: filloutliers(A,"center","mean",ThresholdFactor=4)
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: filloutliers(A,"center","mean","ThresholdFactor",4)
データ オプション
サンプル点。サンプル点のベクトル、または次の表のいずれかのオプション (入力データが table の場合) として指定します。サンプル点はデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔でサンプリングされている必要はありません。既定の設定はベクトル [1 2 3 ...]
です。
入力データが table の場合は、次のいずれかのオプションを使用して、サンプル点を table 変数として指定できます。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
メモ
入力データが 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 内のどの変数を埋めるかを示します。指摘された変数に関連付けられるデータ型は double
または single
でなければなりません。
DataVariables
で指定されていない table 内のその他の変数は、埋められずに出力に渡されます。
インデックス方式 | 指定する値 | 例 |
---|---|---|
変数名 |
|
|
変数インデックス |
|
|
関数ハンドル |
|
|
変数の型 |
|
|
例: filloutliers(A,"previous","DataVariables",["Var1" "Var2" "Var4"])
値置換インジケーター。A
が table または timetable の場合に、次の logical 値または数値のいずれかとして指定します。
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
値を上回ることがあります。
既知の外れ値インジケーター。logical ベクトル、行列、多次元配列、または logical 変数を含む table または timetable (R2024a 以降) として指定します。
OutlierLocations
が配列の場合は、A
と同じサイズでなければなりません。OutlierLocations
が table または timetable の場合は、演算対象の入力 table 変数と同じサイズと名前をもつ logical 変数を含めなければなりません。
値が 1
(true
) の要素は、A
の外れ値の位置を示します。値が 0
(false
) の要素は、非外れ値を示します。OutlierLocations
を指定した場合、filloutliers
は外れ値検出メソッドを使用しません。代わりに、既知の外れ値インジケーターの要素を使用して、外れ値を定義します。
findmethod
を指定した場合、OutlierLocations
を指定することはできません。
データ型: logical
| table
| timetable
出力引数
埋め込まれたデータ。ベクトル、行列、多次元配列、table または timetable として返されます。
B
は、ReplaceValues
の値が false
の場合を除き、A
と同じサイズになります。ReplaceValues
の値が false
の場合、B
の幅は入力データの幅と指定したデータ変数の数の合計となります。
埋め込まれたデータのインジケーター。logical ベクトル、行列または多次元配列として返されます。値が 1 (true
) の要素は、元は外れ値だった B
の埋め込まれた要素に対応します。値が 0 (false
) の要素は、変更されていない要素に対応します。
TF
は、B
と同じサイズになります。
データ型: logical
外れ値検出メソッドで使用された下限しきい値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの下限しきい値は、入力データの中央値より MAD の 3 倍分小さい値です。
外れ値検出に findmethod
を使用する場合、L
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、L
のサイズは A
と同じになります。
外れ値検出メソッドで使用された上限しきい値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの上限しきい値は、入力データの中央値より MAD の 3 倍分大きい値です。
外れ値検出に findmethod
を使用する場合、U
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、U
のサイズは A
と同じになります。
外れ値検出メソッドで使用された中心値。スカラー、ベクトル、行列、多次元配列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの中心値は、入力データの中央値です。
外れ値検出に findmethod
を使用する場合、C
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、C
のサイズは A
と同じになります。
詳細
N 個のスカラー観測値からなる有限長ベクトル A の中央絶対偏差 (MAD) は、i = 1,2,...,N について、次のように定義されます。
スケーリングされた 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.
拡張機能
filloutliers
関数は tall 配列をサポートしていますが、以下の使用上の注意および制限があります。
"percentiles"
メソッド、"grubbs"
メソッド、および"gesd"
メソッドはサポートされていません。"movmedian"
メソッドと"movmean"
メソッドで、tall timetable はサポートされていません。名前と値の引数
SamplePoints
およびMaxNumOutliers
はサポートされません。DataVariables
の値を関数ハンドルにすることはできません。名前と値の引数
OutlierLocations
では table または timetable を指定できません。最初の次元に沿った
filloutliers(A,fillmethod)
、filloutliers(A,fillmethod,"median",…)
、またはfilloutliers(A,fillmethod,"quartiles",…)
の計算は、A
が tall 列ベクトルである場合にのみサポートされています。構文
filloutliers(A,"spline",…)
および構文filloutliers(A,"makima",…)
はサポートされていません。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
外れ値を検出するための
"movmean"
メソッドと"movmedian"
メソッドは、timetable の入力データ、datetime のSamplePoints
値、または duration のSamplePoints
値をサポートしません。入力データが timetable であるか、
SamplePoints
値の型がdatetime
またはduration
である場合、外れ値の埋め込みには"center"
、"clip"
および数値スカラーのメソッドのみサポートされます。"spline"
と"pchip"
の埋め込みメソッドを使用するには、可変サイズの配列のサポートを有効にしなければなりません。string 配列と文字配列の入力は定数でなければなりません。
名前と値の引数
OutlierLocations
では table または timetable を指定できません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2017a で導入埋め込みメソッドでは、C/C++ コード生成の入力値として "makima"
がサポートされるようになりました。
名前と値の引数 OutlierLocations
を、名前が入力 table に存在する logical 変数を含む table として指定して、外れ値の位置を定義します。以前は、OutlierLocations
はベクトル、行列または多次元配列としてしか指定できませんでした。
table または timetable 入力データの場合、外れ値をチェック済みのすべての table 変数を含む入力 table を追加します。追加される変数の外れ値は埋められます。名前と値の引数 ReplaceValues
を false
に設定することにより、table 変数を置き換えるのではなく追加します。
入力データが table の場合は、名前と値の引数 SamplePoints
を使用して、サンプル点を table 変数として指定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)