2012-04-03 17 views
1

Ich habe eine Datenmenge in ähnlicher Weise wie in dem Beispiel follwing gespeichert:Korrelationskoeffizient zwischen den Zellen

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)}; 

wobei jede Zelle in ‚Jahr‘ die Zeit darstellt, in dem jede Messung in ‚Daten‘ gesammelt wurde. Zum Beispiel enthält die erste Zelle in Year ('Year {1}') das Jahr, in dem jede Messung in 'data {1}' erfasst wurde, so dass die Daten {1} {1} in 'Y2007', Daten {1 } {2} in 'Y2008' ... und so weiter

Ich versuche jetzt, die Korrelation zwischen jeder Messung mit der entsprechenden (gleichen Jahr) Messung von den anderen Standorten zu finden. Zum Beispiel für das Jahr '2007 'möchte ich die Korrelation zwischen Daten {1} {1} und Daten {2} {3}, dann Daten {1} {1} und Daten {4} {1}, und dann Daten {2} {3} und Daten {4} {1} und so weiter für die verbleibenden Jahre.

Ich weiß, dass der Corrcoef-Befehl verwendet werden sollte, um die Korrelation zu berechnen, aber ich kann nicht zu dem Stadium kommen, wo dies möglich ist. Jeder Rat würde sehr geschätzt werden.

Antwort

0

Ich nehme an, ein Jahr erscheint nur einmal pro Zelle. Hier ist ein Code, den ich am Ende mit (siehe Kommentare zu Erklärungen):

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 Liste aller Jahren haben wird. cc enthält Korrelationsmatrizen für jedes Jahr. Wenn Sie möchten, können Sie auch yidx behalten (wenn Sie es zu einem Zellenfeld machen, das den Code entsprechend ändert).

Verwandte Themen