Hello, currently I'm working on outlier detection techniques. Can I detect outliers in multivariate datasets with three-sigma rule? If yes, then how?
5 次查看(过去 30 天)
显示 更早的评论
m=mean(meas)
m =
5.8433 3.0573 3.7580 1.1993
>> d=std(m)
d =
1.9185
>> d=3*std(m)
d =
5.7555
0 个评论
回答(1 个)
Adam Danz
2018-6-24
Are you asking how to do this programmatically or conceptually? You want to detect all values that are greater than three standard deviations from the mean.
Here's a demo with fake data to work through conceptually. In the plot, data outside of 3sd along the y axis are circled.
%fake data
rng(180)
d = normrnd(166,42,1,5000);
m = mean(d);
sd = std(d);
outliers = false(size(d));
outliers(d < m-sd*3) = true;
outliers(d > m+sd*3) = true;
figure
t = 1:length(d);
plot(t, d, 'b.')
hold on
plot(t(outliers), d(outliers), 'ro')
rh = refline(0,m);
set(rh, 'color', 'm')
rh2 = refline(0,m+sd*3);
rh3 = refline(0,m-sd*3);
set([rh2,rh3], 'color', 'm', 'linestyle', '--')
legend('data', 'outliers', 'mean', '3rd sd')
1 个评论
Image Analyst
2018-6-24
This:
outliers = false(size(d));
outliers(d < m-sd*3) = true;
outliers(d > m+sd*3) = true;
could be simplified to this:
outliers = abs(d - m) > sd * 3;
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!