найти корреляцию для временного ряда часовых измерений

У меня есть следующий пример:

DateTime=datestr(datenum('2011-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
    datenum('2011-12-31 23:00','yyyy-mm-dd HH:MM'),...
    'yyyy-mm-dd HH:MM');
Data = [datenum(DateTime) - datenum(2011,0,0),rand(13,length(DateTime(:,1)))'];

Эти данные содержат день года в первом столбце, температуру воды в столбце (2:конец-1) и температуру воздуха в последнем столбце. Я хотел бы рассчитать корреляцию между температурой воздуха (последний столбец) и каждым столбцом температуры. Я могу сделать это следующим образом:

R = arrayfun(@(i)nonzeros(tril(corrcoef(Data(:,i),Data(:,end)),-1)),2:size(Data,2)-1,'un',0);

Затем я пытаюсь создать матрицу значений корреляции для каждого отдельного дня (т.е. каждые 24 строки). Итак, мой вопрос заключается в том, как я могу рассчитать корреляцию между каждым столбцом температуры и температурой воздуха, как указано выше, но для каждого отдельного дня, обозначенного «Данные (:, i)». Результат должен включать 365 строк (дни) и 12 столбцов (температуры).

Кроме того, я могу найти номер строки для каждого дня:

[a,b,b] = unique(floor(Data(:,1)));

person KatyB    schedule 11.07.2012    source источник


Ответы (1)


Попробуйте следующее:

dayIdx = floor(Data(:,1));
R = zeros(365,12);
for i=1:365
    c = corrcoef( Data(dayIdx==i,:) ); %# corr between all variables for one day
    R(i,:) = c(end,2:end-1);    %# extract those between water temps and air temp
end
person Amro    schedule 11.07.2012