for循环中的MAD异常值分析

时间:2014-02-12 10:58:57

标签: matlab median outliers

我在矩阵B(126 x 7)上运行中值绝对偏差离群值分析。我以为我的代码在下面工作但是我得到一个关于尺寸不匹配的错误。谁能帮我?我还是MATLAB的初学者。

b = B; %identifying raw data for outlier analysis
k=size(B,2); %preallocating size of loop to run to be equivalent to number columns in B


for j= 1:k
    a=b(:,j); %identify data used
    fa = abs(a-median(a))./(mad(a,1)./.6745); %if x>3.5 then outlier
    dec_mad=fa>2.24; %logical operator identifying outlier
    nout(j)=sum(dec_mad); %sum of outliers
    x = dec_mad ==0; % logical of data with outliers removed
    b(:,j) = a(x); %data without outliers
end

1 个答案:

答案 0 :(得分:0)

这一行是问题所在:

b(:,j) = a(x);

如果x包含一些零(即找到异常值),则a(x)的输出小于原始a。因此,您尝试将b(:,j) - 126值替换为a(x) - 少于126个值,因此尺寸不匹配。

您可以使用NaN替换任何异常值:

b(dec_mad,j)=NaN;

或者使用一个单元格数组,它允许您的各个输出列的大小不同。

out{j} = a(x);

顺便说一下,最好不要使用j for循环,它是内置的复数数字的MATLAB。