коэффициент корреляции между клетками - PullRequest
1 голос
/ 03 апреля 2012

У меня есть набор данных, сохраненный аналогично следующему примеру:

clear all
Year = cell(1,4);
Year{1} = {'Y2007','Y2008','Y2009','Y2010','Y2011'};
Year{2} = {'Y2005','Y2006','Y2007','Y2008','Y2009'};
Year{3} = {'Y2009','Y2010','Y2011'};
Year{4} = {'Y2007','Y2008','Y2009','Y2010','Y2011'};

data = cell(1,4);
data{1} = {rand(26,1),rand(26,1),rand(26,1),rand(26,1),rand(26,1)};
data{2} = {rand(26,1),rand(26,1),rand(26,1),rand(26,1),rand(26,1)};
data{3} = {rand(26,1),rand(26,1),rand(26,1)};
data{4} = {rand(26,1),rand(26,1),rand(26,1),rand(26,1),rand(26,1)};

Где каждая ячейка в «Годе» представляет время, когда было собрано каждое измерение в «данных».Например, первая ячейка в году («год {1}») содержит год, в котором были собраны все измерения в «данных {1}», поэтому данные {1} {1} были собраны в «Y2007», данные {1} {2} в 'Y2008' ... и т. Д.

Я сейчас пытаюсь найти корреляцию между каждым измерением с соответствующим (в том же году) измерением из других мест.Например, для года «Y2007» я хотел бы найти корреляцию между данными {1} {1} и данными {2} {3}, затем данными {1} {1} и данными {4} {1}, изатем данные {2} {3} и данные {4} {1} и т. д. за оставшиеся годы.

Я знаю, что для вычисления корреляции должна использоваться команда corrcoef, но я не могу достичь стадии, когда это возможно.Любые советы будут высоко ценится.

1 Ответ

0 голосов
/ 03 апреля 2012

Я предполагаю, что один год появляется только один раз на ячейку.Вот код, которым я заканчиваю (см. Комментарии для объяснений):

yu = unique([Year{:}]); %# cell array of unique year across all cells
cc = cell(size(yu)); %# cell array for each year
for y = 1:numel(yu)
    %# which cells have y-th year
    yuidx = cellfun(@(x) find(ismember(x,yu{y})), Year, 'UniformOutput',0);
    yidx = find(cellfun(@(x) ~isempty(x), yuidx, 'UniformOutput',1));
    if numel(yidx) <= 1
        continue
    end
    %# find indices for y-th year in each cell
    yidx2 = cell2mat(yuidx(yidx));
    %# fill matrix to calculate correlation
    ydata = zeros(26,numel(yidx)); 
    for k = 1:numel(yidx)
        ydata(:,k) = data{yidx(k)}{yidx2(k)};
    end
    %# calculate correlation coefficients
    cc{y} = corr(ydata);
end

yu будет иметь список всех лет.cc будет содержать корреляционные матрицы для каждого года.Если вы хотите, вы также можете оставить yidx (если вы сделаете это массивом ячеек, соответствующим образом изменив код).

...