rmoutliers
データ内の外れ値の検出と削除
構文
説明
は、B
= rmoutliers(A
)A
内のデータの外れ値を検出し、削除します。
A
が行列の場合、rmoutliers
はA
の各列の外れ値を個別に検出し、その行全体を削除します。A
が table または timetable の場合、rmoutliers
はA
の各変数の外れ値を個別に検出し、その行全体を削除します。
既定での外れ値とは、中央値からの距離が中央絶対偏差 (MAD) の 3 倍を超えている値です。
rmoutliers
の機能を対話的に使用するには、ライブ スクリプトに [外れ値データの削除] タスクを追加します。
は、1 つ以上の名前と値の引数を使用して、外れ値の検出と削除を行うための追加のパラメーターを指定します。たとえば、B
= rmoutliers(___,Name,Value
)rmoutliers(A,"SamplePoints",t)
は時間ベクトル t
の対応する要素を基準として A
の外れ値を検出します。
例
ベクトルからの外れ値の削除
2 つの外れ値を含むベクトルを作成し、外れ値を削除します。
A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57]; B = rmoutliers(A)
B = 1×13
57 59 60 59 58 57 58 61 62 60 62 58 57
平均検出メソッドの使用
平均検出メソッドを使用してデータの timetable にある潜在的な外れ値を特定し、外れ値をすべて削除してからクリーニング済みのデータを可視化します。
データの 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 = rmoutliers(A,"mean")
B=14×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
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","Cleaned 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
の外れ値の位置を検出し、外れ値を削除します。
[B,TFrm] = rmoutliers(A,"movmedian",hours(5),"SamplePoints",t);
元のデータと、外れ値が削除されたデータをプロットします。
plot(t,A) hold on plot(t(~TFrm),B,"o-") legend("Original Data","Cleaned Data")
外れ値を含む列の削除
データの行列から外れ値を削除し、削除された列と外れ値を調べます。
2 つの外れ値を含む行列を作成します。
A = magic(5); A(4,4) = 200; A(5,5) = 300; A
A = 5×5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 200 3
11 18 25 2 300
削除する次元を 2 と指定して、外れ値を含む列を削除します。削除された A
の列を示す logical の出力ベクトル TFrm
が返され、また A
の外れ値の位置を示す logical の出力配列 TFoutlier
が返されます。
[B,TFrm,TFoutlier] = rmoutliers(A,2)
B = 5×3
17 24 1
23 5 7
4 6 13
10 12 19
11 18 25
TFrm = 1x5 logical array
0 0 0 1 1
TFoutlier = 5x5 logical array
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 1 0
0 0 0 0 1
A
の削除された列の値を調べます。
rmCol = A(:,TFrm)
rmCol = 5×2
8 15
14 16
20 22
200 3
2 300
A
の外れ値の値を調べます。
rmVal = A(TFoutlier)
rmVal = 2×1
200
300
外れ値の位置の指定
2 つの外れ値を含むベクトルを作成し、外れ値の位置を検出します。
A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57]; detect = isoutlier(A)
detect = 1x15 logical array
0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
外れ値を削除します。検出メソッドを使用する代わりに、isoutlier
によって検出された外れ値の位置を指定します。
B = rmoutliers(A,"OutlierLocations",detect)
B = 1×13
57 59 60 59 58 57 58 61 62 60 62 58 57
外れ値のしきい値の可視化
データのベクトルから外れ値を削除して、クリーニング済みのデータを可視化します。
外れ値を含むデータのベクトルを作成します。
A = [60 59 49 49 58 100 61 57 48 58];
既定の検出メソッド "median"
を使用して、外れ値を削除します。
[B,TFrm,TFoutlier,L,U,C] = rmoutliers(A);
元のデータ、外れ値を削除した後のデータ、および検出メソッドで決定されたしきい値と中心値をプロットします。中心値はデータの中央値で、上限および下限しきい値は中央値から上下に MAD の 3 倍離れた値です。
plot(A) hold on plot(find(~TFrm),B,"o-") yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"]) legend("Original Data","Cleaned Data")
入力引数
A
— 入力データ
ベクトル | 行列 | table | timetable
入力データ。ベクトル、行列、table または timetable として指定します。
A
が table の場合、その変数の型はdouble
またはsingle
でなければなりません。または、DataVariables
引数を使用してdouble
またはsingle
の変数を明示的にリストすることもできます。double
とsingle
以外のデータ型の変数を含む table を操作する場合、変数を指定すると便利です。A
が timetable の場合、rmoutliers
は table 要素のみを処理します。行時間がサンプル点として使用されている場合、行時間は一意で、かつ昇順にリストされていなければなりません。
データ型: double
| single
| table
| timetable
method
— 外れ値を検出するメソッド
"median"
(既定値) | "mean"
| "quartiles"
| "grubbs"
| "gesd"
外れ値を検出するメソッド。次の値のいずれかとして指定します。
メソッド | 説明 |
---|---|
"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" に似ていますが、複数の外れ値が相互にマスキングしている場合により効果的に機能します。 |
threshold
— 百分位数のしきい値
2 要素の行ベクトル
百分位数のしきい値。区間 [0, 100] 内の要素をもつ 2 要素の行ベクトルとして指定します。最初の要素は百分位数の下限しきい値を示し、2 番目の要素は百分位数の上限しきい値を示します。threshold
の最初の要素は、2 番目の要素より小さくなければなりません。
たとえば、しきい値が [10 90]
の場合、外れ値は 10 番目の百分位数を下回る点、および 90 番目の百分位数を超える点として定義されます。
movmethod
— 移動メソッド
"movmedian"
| "movmean"
外れ値を検出する移動メソッド。次の値のいずれかとして指定します。
メソッド | 説明 |
---|---|
"movmedian" | 外れ値は、window で指定されたウィンドウの長さでの局所中央値から、スケーリングされた局所 MAD の 3 倍を超えて離れている要素と定義されます。このメソッドは "Hampel フィルター" とも呼ばれます。 |
"movmean" | 外れ値は、window で指定されたウィンドウの長さでの局所平均値から、局所標準偏差の 3 倍を超えて離れている要素と定義されます。 |
window
— ウィンドウの長さ
正の整数スカラー | 正の整数の 2 要素ベクトル | 正の duration スカラー | 正の duration の 2 要素ベクトル
ウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして指定します。
window
が正の整数スカラーである場合、ウィンドウは現在の要素を中心にして配置され、window-1
個の隣接する要素を含みます。window
が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。
window
が正の整数の 2 要素ベクトル [b f]
である場合、ウィンドウには現在の要素、b
個前までの要素、f
個後までの要素が含まれます。
A
が timetable であるか、SamplePoints
が datetime
ベクトルまたは duration
ベクトルとして指定されている場合、window
は duration
型でなければならず、ウィンドウはサンプル点を基準に計算されます。
dim
— 削除対象の次元
1 (既定値) | 2
削除対象の次元。1 または 2 を指定します。rmoutliers
は既定で、外れ値の検出された各行を削除します。外れ値の検出された各行列の列、または table 変数を削除するには、次元 2 を指定します。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
例: rmoutliers(A,ThresholdFactor=4)
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: rmoutliers(A,"ThresholdFactor",4)
SamplePoints
— サンプル点
ベクトル | table 変数名 | スカラー | 関数ハンドル | table vartype
添字
サンプル点。サンプル点の値のベクトルとして、また入力データが table の場合は、次の表のいずれかのオプションとして指定します。サンプル点はデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔でサンプリングされている必要はありません。既定の設定はベクトル [1 2 3 ...]
です。
入力データが table の場合は、次のいずれかのオプションを使用して、サンプル点を table 変数として指定できます。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
メモ
入力データが 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
DataVariables
— 演算の対象とする table 変数
table 変数名 | スカラー | ベクトル | cell 配列 | パターン | 関数ハンドル | table vartype
添字
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables
の値は、入力 table 内の外れ値を調べる変数を示します。指摘された変数に関連付けられるデータ型は double
または single
でなければなりません。
DataVariables
で指定されていない table 内の他の変数は、外れ値を調べずに出力に渡されます。
A
の行に対して動作する場合、rmoutliers
は指定された変数に対応する列内で外れ値を含むすべての行を削除します。A
の列に対して動作する場合、rmoutliers
は指定された変数を table から削除します。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
例: rmoutliers(T,"DataVariables",["Var1" "Var2" "Var4"])
ThresholdFactor
— 検出しきい値の係数
非負のスカラー
検出しきい値の係数。非負のスカラーとして指定します。
"median"
メソッドおよび "movmedian"
メソッドでは、検出しきい値の係数で、スケーリングされた MAD の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。
"mean"
メソッドおよび "movmean"
メソッドでは、検出しきい値の係数で平均値からの標準偏差の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。
"grubbs"
メソッドおよび "gesd"
メソッドでの検出しきい値の係数は、0 ~ 1 の範囲のスカラーです。値が 0 に近くなると外れ値の数が少なくなり、値が 1 に近くなると外れ値の数が多くなります。既定の検出しきい値の係数は 0.05 です。
"quartiles"
メソッドでは、検出しきい値の係数により四分位数間範囲の係数が置き換えられます。検出しきい値の係数の既定値は 1.5 です。
"percentiles"
メソッドが指定されている場合、この名前と値のペアはサポートされません。
OutlierLocations
— 既知の外れ値インジケーター
ベクトル | 行列
既知の外れ値インジケーター。A
と同じサイズの logical ベクトル、または logical 行列として指定します。既知の外れ値インジケーターの要素には、A
の対応する位置に外れ値があることを示す数値または logical 1 (true
)、または外れ値がないことを示す logical 0 (false
) を指定できます。OutlierLocations
を指定した場合、rmoutliers
は外れ値検出メソッドを使用しません。代わりに、既知の外れ値インジケーターの要素を使用して、外れ値を定義します。出力 TFoutlier
は同じ logical ベクトルまたは logical 行列を含みます。
method
を指定した場合、名前と値の引数 OutlierLocations
を指定することはできません。
データ型: logical
MaxNumOutliers
— GESD により検出される外れ値の最大数
正の整数スカラー
GESD により検出される外れ値の最大数。正の整数スカラーとして指定します。MaxNumOutliers
値は、"gesd"
メソッドにより検出される外れ値の最大数を指定します。たとえば、rmoutliers(A,"gesd","MaxNumOutliers",5)
は最大 5 つの外れ値を検出します。
MaxNumOutliers
の既定値は、A
の要素数の 10% に最も近い整数です。外れ値の最大数に大きい値を設定すると、すべての外れ値を検出する可能性が高くなりますが、それと引き換えに計算効率が低下します。
"gesd"
メソッドは、非外れ値の入力データがほぼ正規分布からサンプリングされていると仮定します。データがこのようにサンプリングされていない場合、検出された外れ値の数が MaxNumOutliers
値を上回ることがあります。
MinNumOutliers
— 削除に必要な外れ値の最小数
1 (既定値) | 正の整数スカラー
削除に必要な外れ値の最小数。正の整数スカラーとして指定します。MinNumOutliers
値は、行または列を削除するために必要な外れ値の最小数を指定します。たとえば rmoutliers(A,"MinNumOutliers",3)
は、行列 A
のある行で 3 つ以上の外れ値が検出されると、その行を削除します。
出力引数
B
— 外れ値が削除されたデータ
ベクトル | 行列 | table | timetable
外れ値が削除されたデータ。ベクトル、行列、table または timetable として返されます。B
のサイズは削除された行または列の数に依存します。
TFrm
— 削除されたデータ インジケーター
ベクトル
削除されたデータ インジケーター。logical ベクトルとして返されます。値が 1 (true
) の要素は、A
の削除された行または列に対応します。値が 0 (false
) の要素は、変更されていない行または列に対応します。TFrm
の向きとサイズは、A
および操作対象の次元に依存します。
データ型: logical
TFoutlier
— 外れ値インジケーター
ベクトル | 行列
外れ値インジケーター。logical ベクトルまたは logical 行列として返されます。値が 1 (true
) の要素は、A
の外れ値の位置に対応します。値が 0 (false
) の要素は、非外れ値に対応します。
TFoutlier
は、A
と同じサイズになります。
データ型: logical
L
— 下限しきい値
スカラー | ベクトル | 行列 | table | timetable
R2022b 以降
外れ値検出メソッドで使用された下限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの下限しきい値は、入力データの中央値より MAD の 3 倍分小さい値です。
外れ値検出に method
を使用する場合、L
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、L
のサイズは A
と同じになります。
U
— 上限しきい値
スカラー | ベクトル | 行列 | table | timetable
R2022b 以降
外れ値検出メソッドで使用された上限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの上限しきい値は、入力データの中央値より MAD の 3 倍分大きい値です。
外れ値検出に method
を使用する場合、U
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、U
のサイズは A
と同じになります。
C
— 中心値
スカラー | ベクトル | 行列 | table | timetable
R2022b 以降
外れ値検出メソッドで使用された中心値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの中心値は、入力データの中央値です。
外れ値検出に method
を使用する場合、C
のサイズは、操作次元 (長さ 1) 以外のすべての次元で A
と同じになります。movmethod
を使用する場合、C
のサイズは A
と同じになります。
代替機能
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
"percentiles"
メソッド、"grubbs"
メソッド、および"gesd"
メソッドはサポートされていません。"movmedian"
メソッドと"movmean"
メソッドで、tall timetable はサポートされていません。名前と値の引数
SamplePoints
およびMaxNumOutliers
はサポートされません。DataVariables
の値を関数ハンドルにすることはできません。最初の次元に沿った
rmoutliers(A)
、rmoutliers(A,"median",...)
、またはrmoutliers(A,"quartiles",...)
の計算は、A
が tall 列ベクトルである場合にのみサポートされています。rmoutliers(A,2)
は tall table ではサポートされません。
詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
外れ値を検出するための
"movmean"
メソッドと"movmedian"
メソッドは、timetable の入力データ、datetime のSamplePoints
値、または duration のSamplePoints
値をサポートしません。入力データが table の場合、
dim
は1
と等しくなければなりません。名前と値の引数
OutlierLocation
はサポートされていません。オプションの出力引数
TFoutlier
、L
、U
、およびC
はサポートされていません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
移動メソッド
"movmean"
または"movmedian"
を使用して外れ値を検出する場合、名前と値の引数SamplePoints
はサポートされていません。名前と値の引数
DataVariables
はサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018b で導入R2022b: 外れ値インジケーター、下限しきい値、上限しきい値、および中心値を返す
オプションで、入力データの外れ値の位置に対応する logical の外れ値インジケーターを返すことができます。また、外れ値検出メソッドで使用された下限しきい値、上限しきい値、および中心値も返すことができます。
R2022b: 外れ値の位置の定義
既知の外れ値インジケーターを使用して、入力データの外れ値の位置を定義します。外れ値検出メソッドを使用するのではなく、名前と値の引数 OutlierLocations
を入力データと同じサイズの logical 配列に設定することで、外れ値の位置を定義できます。
method
を指定した場合、名前と値の引数 OutlierLocations
を指定することはできません。
R2021b: table 変数としてのサンプル点の指定
入力データが table の場合は、名前と値の引数 SamplePoints
を使用して、サンプル点を table 変数として指定します。
参考
関数
ライブ エディター タスク
アプリ
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)