Frage

Ich möchte eine Schleife in mein Skript aufnehmen, die die Korrelation jeder möglichen Kombination der Daten findet. Dies kann manuell durch den folgenden Code erfolgen:

clear all
%generate fake data
LName={'Name1','Name2','Name3'};
Data={rand(12,1),rand(12,1),rand(12,1)};
%place in a structure
d = [LName;Data];
Data = struct(d{:});
%find the correlation
[R,P] = corrcoef(Data.Name1,Data.Name2);
[R2,P2] = corrcoef(Data.Name1,Data.Name3);
[R3,P3] = corrcoef(Data.Name2,Data.Name3);

Ich möchte dies jedoch in einer Schleife tun, ich habe angefangen, aber bei der ersten Hürde gescheitert. Meine versuchte Schleife, die nicht funktioniert, wird unten gezeigt:

SNames=fieldnames(Data);
for i=1:numel(SNames);
    [R{i},P{i}] = corrcoef(Data.(SNames{i}),Data.(SNames{i+1}));
end

Ich kämpfe darum, zu wissen, wie ich Matlab mit jeder Iteration eine andere Kombination von Werten aufsuchen soll.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Probieren Sie so etwas aus:

pairs = combnk (1:3,2) % all combinations of 2 elements taken out of the vector [1,2,3]
for i = 1 : size (pairs,1)
   [R{i},P{i}] = corrcoef(Data.(SNames{pairs(i,1)}),Data.(SNames{pairs(i,2)}));  
end

Andere Tipps

@Itamarkatz Antwort ist gut. Wenn Sie jedoch nicht über die Statistik -Toolbox verfügen, können Sie die nicht verwenden Combnk Befehl.
In diesem Fall können Sie herunterladen Kombinationsgenerator von hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top