0

我正在对矩阵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
4

1 回答 1

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);

顺便说一句,最好不要使用jfor 循环,它是 MATLAB 内置的复数。

于 2014-02-12T11:32:01.010 回答