時系列データの外れ値を置換する方法
Show older comments
取得されたある規則性を持った連続したデータに外れ値(今回は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 Comments
Kenta
on 4 Aug 2020
ここでの「外れ値」とは、どのような状況を想定されていますか?それをべつの言葉で表現していただけると問題解決につながりそうです。例えば、0 または、 最頻値 以外の数値を外れ値とするなら、最頻値を計算し、それに該当しないものはfind関数などを使って、falseとできそうですし、そのようにコーディングできたら理由の説明も簡単でよさそうです。
KH
on 4 Aug 2020
takemoto
on 4 Aug 2020
Edited: Rena Berman
on 16 Jul 2024
Signal Processing Toolboxをお持ちであれば、こういう関数↓が提供されています。
KH
on 4 Aug 2020
takemoto
on 4 Aug 2020
失礼しました。こちら↓はいかがでしょうか?
コマンドウィンドウ上で、
>>ver
と入力した際に表示されるのが、使用可能なオプションです。
KH
on 4 Aug 2020
Kenta
on 4 Aug 2020
KHさん、教えていただきありがとうございます。
>>値50未満が0になるよう閾値設定を行います。閾値設定された連続した0の値の中で出てくる50以上の値を「外れ値」としています。
このようなシンプルな方法でルール決めができるのであれば、ご自身でコーディングするのもよいかもしれません。
例えば、
a=[1 2 3 4 5];
a(a<3)=0
とすれば3より小さいものは0になります。
KH
on 4 Aug 2020
Kenta
on 4 Aug 2020
その場合は < だけでなく > も使って、対象外の値を取り除いたりすればいかがでしょう?
KH
on 4 Aug 2020
Answers (1)
Categories
Find more on table in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!