2012-01-11 4 views
1

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

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

Однако, я хотел бы сделать это в цикле, я начал, но потерпели неудачу на первое препятствие. Моя попытка цикла, который не работает как показано ниже:

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

Я изо всех сил на зная, как сказать MATLAB, чтобы перебрать другой комбинации значений с каждой итерации.

Любая предоставленная помощь была бы высоко оценена.

ответ

2

попробовать что-то вроде этого:

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 
+0

работает отлично. Однако для ссылки в будущем можно использовать разные пары: combnk (1: 3,2), то есть если вы хотите найти корреляцию между тремя элементами, вы должны изменить эту строку на пары = combnk (1: 3,3)? Спасибо за помощь. – user1053544

+0

Это будет работать, только если у вас есть панель инструментов статистики –

+0

да, но выбор 3 элементов из 3 возможных индексов имеет только одну возможность (1,2,3). И что такое корреляция между тремя элементами ...? –

1

@ItamarKatz ответ хороший. Однако, если у вас нет панели инструментов статистики, вы не можете использовать команду combnk.
В этом случае вы можете скачать combinations generator отсюда.

+0

Спасибо за исправление, я не знал об этом в панели инструментов статистики. –

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

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