2014-02-12 1 views
0

Я запускаю средний анализ отклонения абсолютного отклонения на матрице B (126 x 7). Я думал, что мой код ниже работает, но я получаю сообщение о несоответствии размеров. Может кто-нибудь мне помочь? Я все еще новичок в MATLAB.MAD outlier analysis in for loop

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) = a(x);

Если x содержит некоторое количество нулей (т.е. были найдены останцы), выход a(x) меньше, чем оригинал a. Поэтому вы пытаетесь заменить b(:,j) - 126 значений - с a(x) - меньше 126 значений, следовательно, несоответствие размеров.

Вы можете просто заменить любые выбросы с NaN:

b(dec_mad,j)=NaN;

Или использовать массив ячеек, который позволил бы ваши отдельные столбцы вывода быть разных размеров.

out{j} = a(x);

Кстати, лучше не использовать j для петель, это MATLAB встроенный для комплексных чисел.

+0

Это замечательно, большое вам спасибо! И спасибо за подсказку, я подумал об обратном - я думал, что вы должны использовать его в цикле. –

 Смежные вопросы

  • Нет связанных вопросов^_^