時系列データの外れ値を置換する方法

取得されたある規則性を持った連続したデータに外れ値(今回は99とする)があった場合の置換方法を教えてください。
例えば、下のようなデータが取得され、
連続した50の並びの中に一つだけ0が混同したり、逆に0の並びに50が混同する場合にはその値を正しい並びに置換することは可能でしょうか?
x = [0,0,0,0,0,0,0,0,0,0,50,50,99,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,99,0]
出力したい結果としては、下記のような外れ値がない
または、 True or Falseの形で出力したいと考えています。
x = [0,0,0,0,0,0,0,0,0,0,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0]
or
x = [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
何か良い方法がありましたらご教授お願いします。

10 commentaires

Kenta
Kenta le 4 Août 2020
ここでの「外れ値」とは、どのような状況を想定されていますか?それをべつの言葉で表現していただけると問題解決につながりそうです。例えば、0 または、 最頻値 以外の数値を外れ値とするなら、最頻値を計算し、それに該当しないものはfind関数などを使って、falseとできそうですし、そのようにコーディングできたら理由の説明も簡単でよさそうです。
KH
KH le 4 Août 2020
ありがとうございます。
実際のデータでは、値50未満が0になるよう閾値設定を行います。閾値設定された連続した0の値の中で出てくる50以上の値を「外れ値」としています。 連続する50以上の値の時には「外れ値」はほとんどなく、想定されるのは0に近い値(50未満の値)となります(上の変数例は妥当ではないですね。すみません。)
find関数で試行錯誤してみたいと思います!
takemoto
takemoto le 4 Août 2020
Modifié(e) : Rena Berman le 16 Juil 2024
Signal Processing Toolboxをお持ちであれば、こういう関数↓が提供されています。
KH
KH le 4 Août 2020
takemotoさん、ありがとうございます。
リンクに飛べないので持っていないということですかね。Studentライセンスです。
takemoto
takemoto le 4 Août 2020
失礼しました。こちら↓はいかがでしょうか?
コマンドウィンドウ上で、
>>ver
と入力した際に表示されるのが、使用可能なオプションです。
KH
KH le 4 Août 2020
ご丁寧にありがとうございます。入っていました。
こちらも試してみたいと思います。
Kenta
Kenta le 4 Août 2020
KHさん、教えていただきありがとうございます。
>>値50未満が0になるよう閾値設定を行います。閾値設定された連続した0の値の中で出てくる50以上の値を「外れ値」としています。
このようなシンプルな方法でルール決めができるのであれば、ご自身でコーディングするのもよいかもしれません。
例えば、
a=[1 2 3 4 5];
a(a<3)=0
とすれば3より小さいものは0になります。
KH
KH le 4 Août 2020
この方法ですと、
>>値50未満が0になるよう閾値設定を行います。 の部分は解決できるのですが、
>>閾値設定された連続した0の値の中で出てくる50以上の値(外れ値) をクリアできませんでした。
例えば、
a = [1,2,3,4,5,60,70,8,9,1,2,3,4,50,51,52,53,54,55,56];
a(a<50) = 0
>> [0,0,0,0,0,60,70,0,0,0,0,0,0,50,51,52,53,54,55,56]
という具合にシステム的なエラーとして60や70といった指定した値よりも大きい値が出力されてしまい、それを排除することができませんでした。
Kenta
Kenta le 4 Août 2020
その場合は < だけでなく > も使って、対象外の値を取り除いたりすればいかがでしょう?
KH
KH le 4 Août 2020
不等式だけだと必要なデータも失われてしますので工夫する必要がありそうです。
アドバイスありがとうございます!

Connectez-vous pour commenter.

Réponses (1)

Shunichi Kusano
Shunichi Kusano le 3 Août 2020

0 votes

専用の関数がありますので、まずこちらを試すのがいいと思います。

1 commentaire

KH
KH le 4 Août 2020
ありがとうございます。
試みてみましたが上手く処理できませんでした。他の方法を試してみます!

Connectez-vous pour commenter.

Catégories

Tags

Question posée :

KH
le 3 Août 2020

Modifié(e) :

le 16 Juil 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!