matlab - MATLAB 中的统计异常值检测

标签 matlab std mean outliers

假设我们有这个矩阵:

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/

相关文章:

c++ - 试图更好地理解 std::forward、std::move

c++ - 使用 Boost 从 C++ 中的样本 vector 计算平均值和标准差

express - 使用 Node 和 Express 向请求添加属性

plot - 使用 -nodisplay -nodesktop -nosplash 打印 Matlab 图

user-interface - 为什么我不能从可编辑的文本框中复制值?

c++ - 这个 boost::tuple 代码可以转换为纯 std::standard 库代码吗?

c++ - std::map 初始化(仅一次)

algorithm - 用于计算数据子集的平均值和方差的在线算法

matlab - 如何找到从暗线到灰色涂抹区域的边缘

matlab - 使用plotmatrix函数MATLAB为x和y添加标签