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