2014-02-12 6 views
0

매트릭스 B (126 x 7)에서 중간 절대 편차 이상 분석을 실행 중입니다. 아래 코드가 작동한다고 생각했지만 크기가 일치하지 않는 오류가 발생했습니다. 누구든지 나를 도울 수 있습니까? 저는 아직 MATLAB 초보자입니다.for 루프의 MAD 이상치 분석

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

x 경우 (즉 아웃 라이어가 발견 된) 일부 0을 포함, a(x)의 출력이 a 원래보다 작 :

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

그냥 의견. 'k = size (B, 2);'행은 아무 것도 미리 할당하지 않고 실제로 변수에 값을 저장하고 있습니다. 변수'a'를'a = zeros (size (b)) '라는 표현식으로 미리 할당 할 수 있습니다. – tashuhka

답변

0

이 줄은 문제입니다. 따라서 b(:,j) - 126 값을 a(x) - 126 값 미만으로 바꾸려고하므로 치수가 일치하지 않습니다.

b(dec_mad,j)=NaN;

또는 개별 출력 열 크기가 다른이 될 수 있도록 해주는 셀 어레이를 사용

당신은 NaN 어떤 이상 값을 대체 할 수있다.

out{j} = a(x);

덧붙여, 그것은 루프에 대한 j 사용하지 않는 것이 좋습니다, 그것은 내장 복소수에 대한 MATLAB입니다.

+0

그게 완벽 해요, 정말 고마워요! 그리고 힌트를 주셔서 고마워요, 나는 그 반대 생각 - 나는 당신이 그것을 루프에서 사용하기위한 것이라고 생각. –