假设我们有这个矩阵:
main = [10000 5 3 1;
5 5677 0 134;
1 1 456 3];
这种方法是计量经济学和统计问题中使用最广泛的方法。X
是我们要在其中搜索异常值的数据。
X-mean(X)>= n*std(X)
因此,如果此不等式为真,则该样本为异常值,否则我们将保留该样本。
现在我的问题。我想用这些代码找到异常值:
meann = mean(main);
stdd = std(main);
out = find(main-repmat(meann,size(main,1),1)>=repmat(2*stdd,size(main,1),1));
我们正在搜索每一列中的异常值。 Out
应指示离群值的索引。在最后一步中,我们应该删除每一列中的异常值。在 MAtLAB 中是否有更简单的函数或方法来执行此操作?
谢谢。
最佳答案
2*sigma 标准当然很简单,但均值和标准差对异常值非常敏感。因此 out
变量将因此受到影响,实际上您的代码在给定矩阵中没有发现任何异常值。
要检测异常值,您只需将矩阵中出现的值与中值进行比较,或采用更精确的标准。在 https://www.mne.psu.edu/me345/Lectures/outliers.pdf 有一个精彩的讲座对此进行了解释
关于matlab - MATLAB 中的统计异常值检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281160/