Removing outliers using standard deviation

Hello everyone,
I have a timetable of 8764*3. The first column corresponds to the date, the second to the hour (which goes from 1 to 24 in double format) and the third is a price. My objective is that, for each hour, I remove the prices that are above (Mean of that hour + 3*SD of the prices of that hour) and any price below (Mean of that hour - 3*SD of the prices of that hour). I know I could use the code:
rmoutliers(A,'mean');
However, this filter would take into account all the hours of the sample. Could someone kindly help me to apply it for each hour?
I attach here the data so you can have a clear view of what I have.
Thank you!

 採用された回答

Ive J
Ive J 2021 年 2 月 18 日

0 投票

groupfilter does the trick
cleanTable = groupfilter(yourTable, 'Hour', @(x)~isoutlier(x, 'mean'), 'Price');

3 件のコメント

Angelavtc
Angelavtc 2021 年 2 月 19 日
Thank you @Ive J! And is it possible to identify which date observations for each hour were removed?
Ive J
Ive J 2021 年 2 月 19 日
Yes, outTab (complement of cleanTable) would contain outliers per each hour:
outTab = groupfilter(yourTable, 'Hour', @(x)isoutlier(x, 'mean'), 'Price');
Angelavtc
Angelavtc 2021 年 2 月 19 日
Wonderful, thank you @Ive J!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeFinancial Toolbox についてさらに検索

質問済み:

2021 年 2 月 17 日

コメント済み:

2021 年 2 月 19 日

Community Treasure Hunt

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

Start Hunting!

Translated by