我在矩阵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
答案 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。