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 = 1×5 logical array
0 0 0 1 1
TFoutlier = 5×5 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 = 1×15 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")

R2024b 以降
table を作成し、10 より大きい値として定義されている外れ値を削除します。削除する外れ値の位置を示す logical 変数 loc の table を作成します。次に、rmoutliers で名前と値の引数 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 = rmoutliers(T,OutlierLocations=loc)
T=3×3 table
A B C
_ _ _
4 0 4
9 6 2
3 1 8
入力引数
入力データ。ベクトル、行列、table または timetable として指定します。
Aが table の場合、その変数の型はdoubleまたはsingleでなければなりません。または、DataVariables引数を使用してdoubleまたはsingleの変数を明示的にリストすることもできます。doubleとsingle以外のデータ型の変数を含む table を操作する場合、変数を指定すると便利です。Aが timetable の場合、rmoutliersは table 要素のみを処理します。行時間がサンプル点として使用されている場合、行時間は一意で、かつ昇順にリストされていなければなりません。
データ型: double | single | table | timetable
外れ値を検出するメソッド。次の値のいずれかとして指定します。
| メソッド | 説明 |
|---|---|
"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 または 2 を指定します。rmoutliers は既定で、外れ値の検出された各行を削除します。外れ値の検出された各行列の列、または table 変数を削除するには、次元 2 を指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: rmoutliers(A,ThresholdFactor=4)
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: rmoutliers(A,"ThresholdFactor",4)
データ オプション
サンプル点。サンプル点の値のベクトルとして、また入力データが 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
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables の値は、入力 table 内の外れ値を調べる変数を示します。指摘された変数に関連付けられるデータ型は double または single でなければなりません。
DataVariables で指定されていない table 内の他の変数は、外れ値を調べずに出力に渡されます。
A の行に対して動作する場合、rmoutliers は指定された変数に対応する列内で外れ値を含むすべての行を削除します。A の列に対して動作する場合、rmoutliers は指定された変数を table から削除します。
| インデックス方式 | 指定する値 | 例 |
|---|---|---|
変数名 |
|
|
変数インデックス |
|
|
関数ハンドル |
|
|
変数の型 |
|
|
例: rmoutliers(T,"DataVariables",["Var1" "Var2" "Var4"])
外れ値検出オプション
検出しきい値の係数。非負のスカラーとして指定します。
"median" メソッドおよび "movmedian" メソッドでは、検出しきい値の係数で、スケーリングされた MAD の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。
"mean" メソッドおよび "movmean" メソッドでは、検出しきい値の係数で平均値からの標準偏差の係数が置き換えられます。検出しきい値の係数の既定値は 3 です。
"grubbs" メソッドおよび "gesd" メソッドでの検出しきい値の係数は、0 ~ 1 の範囲のスカラーです。値が 0 に近くなると外れ値の数が少なくなり、値が 1 に近くなると外れ値の数が多くなります。既定の検出しきい値の係数は 0.05 です。
"quartiles" メソッドでは、検出しきい値の係数により四分位数間範囲の係数が置き換えられます。検出しきい値の係数の既定値は 1.5 です。
"percentiles" メソッドが指定されている場合、この名前と値のペアはサポートされません。
既知の外れ値インジケーター。logical ベクトル、行列、あるいは logical 変数を含む table または timetable (R2024b 以降) として指定します。値が 1 (true) の要素は、A の外れ値の位置を示します。値が 0 (false) の要素は、非外れ値を示します。
OutlierLocations を指定した場合、rmoutliers は外れ値検出メソッドを使用しません。代わりに、既知の外れ値インジケーターの要素を使用して、外れ値を定義します。findmethod を指定した場合、OutlierLocations を指定することはできません。
OutlierLocations がベクトルまたは行列の場合、A と同じサイズでなければなりません。OutlierLocations が table または timetable の場合は、演算対象の入力 table 変数と同じサイズと名前をもつ logical 変数を含めなければなりません。
データ型: logical | table | timetable
GESD により検出される外れ値の最大数。正の整数スカラーとして指定します。MaxNumOutliers 値は、"gesd" メソッドにより検出される外れ値の最大数を指定します。たとえば、rmoutliers(A,"gesd","MaxNumOutliers",5) は最大 5 つの外れ値を検出します。
MaxNumOutliers の既定値は、A の要素数の 10% に最も近い整数です。外れ値の最大数に大きい値を設定すると、すべての外れ値を検出する可能性が高くなりますが、それと引き換えに計算効率が低下します。
"gesd" メソッドは、非外れ値の入力データがほぼ正規分布からサンプリングされていると仮定します。データがこのようにサンプリングされていない場合、検出された外れ値の数が MaxNumOutliers 値を上回ることがあります。
削除に必要な外れ値の最小数。正の整数スカラーとして指定します。MinNumOutliers 値は、行または列を削除するために必要な外れ値の最小数を指定します。たとえば rmoutliers(A,"MinNumOutliers",3) は、行列 A のある行で 3 つ以上の外れ値が検出されると、その行を削除します。
出力引数
外れ値が削除されたデータ。ベクトル、行列、table または timetable として返されます。B のサイズは削除された行または列の数に依存します。
削除されたデータ インジケーター。logical ベクトルとして返されます。値が 1 (true) の要素は、A の削除された行または列に対応します。値が 0 (false) の要素は、変更されていない行または列に対応します。TFrm の向きとサイズは、A および操作対象の次元に依存します。
データ型: logical
外れ値インジケーター。logical ベクトルまたは logical 行列として返されます。値が 1 (true) の要素は、A の外れ値の位置に対応します。値が 0 (false) の要素は、非外れ値に対応します。
TFoutlier は、A と同じサイズになります。
データ型: logical
R2022b 以降
外れ値検出メソッドで使用された下限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの下限しきい値は、入力データの中央値より MAD の 3 倍分小さい値です。
外れ値検出に method を使用する場合、L のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、L のサイズは A と同じになります。
R2022b 以降
外れ値検出メソッドで使用された上限しきい値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの上限しきい値は、入力データの中央値より MAD の 3 倍分大きい値です。
外れ値検出に method を使用する場合、U のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、U のサイズは A と同じになります。
R2022b 以降
外れ値検出メソッドで使用された中心値。スカラー、ベクトル、行列、table または timetable として返されます。たとえば、既定の外れ値検出メソッドの中心値は、入力データの中央値です。
外れ値検出に method を使用する場合、C のサイズは、操作次元 (長さ 1) 以外のすべての次元で A と同じになります。movmethod を使用する場合、C のサイズは A と同じになります。
代替機能
拡張機能
rmoutliers 関数は tall 配列をサポートしていますが、以下の使用上の注意および制限があります。
"percentiles"メソッド、"grubbs"メソッド、および"gesd"メソッドはサポートされていません。"movmedian"メソッドと"movmean"メソッドで、tall timetable はサポートされていません。名前と値の引数
SamplePointsおよびMaxNumOutliersはサポートされません。DataVariablesの値を関数ハンドルにすることはできません。OutlierLocationsの値を table または timetable にすることはできません。最初の次元に沿った
rmoutliers(A)、rmoutliers(A,"median",...)、またはrmoutliers(A,"quartiles",...)の計算は、Aが tall 列ベクトルである場合にのみサポートされています。rmoutliers(A,2)は tall table ではサポートされません。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
外れ値を検出するための
"movmean"メソッドと"movmedian"メソッドは、timetable の入力データ、datetime のSamplePoints値、または duration のSamplePoints値をサポートしません。入力データが table の場合、
dimは1と等しくなければなりません。名前と値の引数
OutlierLocationsはサポートされていません。オプションの出力引数
TFoutlier、L、U、およびCはサポートされていません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
rmoutliers 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
移動メソッド
"movmean"または"movmedian"を使用して外れ値を検出する場合、名前と値の引数SamplePointsはサポートされていません。名前と値の引数
DataVariablesはサポートされていません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018b で導入名前と値の引数 OutlierLocations を、名前が入力 table に存在する logical 変数を含む table として指定して、外れ値の位置を定義します。
オプションで、入力データの外れ値の位置に対応する logical の外れ値インジケーターを返すことができます。また、外れ値検出メソッドで使用された下限しきい値、上限しきい値、および中心値も返すことができます。
既知の外れ値インジケーターを使用して、入力データの外れ値の位置を定義します。外れ値検出メソッドを使用するのではなく、名前と値の引数 OutlierLocations を入力データと同じサイズの logical 配列に設定することで、外れ値の位置を定義できます。
method を指定した場合、名前と値の引数 OutlierLocations を指定することはできません。
入力データが 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)
