首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中用NaN代替离群值

在MATLAB中用NaN代替离群值
EN

Stack Overflow用户
提问于 2016-03-10 12:25:47
回答 1查看 1.5K关注 0票数 0

我有一个n×m数据矩阵,每个样本有n个样本和m个测量值。我在处理质谱的数据,测量不同代谢物的浓度。每一栏都是单一代谢物的浓度。行是样品。有些样品的代谢物测量值远高于其他样品。

我希望找到这些异常值,并用NaN替换它们。是否有一种方法可以自动完成这一任务,也许可以通过查找高于X列SDs的值并使其为NaN?我为R和Python找到了相关的问题,但没有找到MATLAB的相关问题。

增编:dfri的解决方案对我来说非常有效。但是,我不能使用列SD作为截止度量,因为异常值使得SD非常大,以至于异常值仍然在阈值之内(它们比其他值大10 000倍)。最后,我使用了100倍的列中值作为删除的阈值。

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 12:29:37

您可以对数据中的元素进行某些阈值的比较,以确定异常值,并使用结果索引来用NaN替换异常值。例如。

代码语言:javascript
复制
data = randi(4,5); %// values in {1, 2, 3, 4}
threshold = 3;     %// decide upon your threshold
data(data > threshold) = NaN

data =

   NaN     3   NaN     2     2
     3     1     3     2     2
     2     2     2   NaN     3
     3     1   NaN   NaN     3
     1     1     1     1   NaN

如果您想替换异常值,w.r.t。每个列都有一些阈值列,您可以使用例如bsxfun (感谢@Dan):

代码语言:javascript
复制
data = randi(4,5) %// values in {1, 2, 3, 4}
threshold = mean(data)+1*std(data) %// per column
data(bsxfun(@(x, y) x > y, data, threshold)) = NaN

%// example:

threshold =

    4.7416    3.7416    4.0000    2.8954    1.9477

data =

     4     3     2   NaN   NaN
     4   NaN     3     1     1
     1     3     4     1   NaN
     4     1     4     1     1
     4     1     2   NaN     1

请注意,正如@Dan在上面的评论中所提到的,在您的案例中,最重要的(非matlab-技术)部分是决定如何为每个列创建阈值。上面示例中的简单阈值仅用于显示如何“删除”异常值(设置为NaN)的技术方面,为列设置了一系列阈值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35916464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档