2012-01-13 24 views
-1

次のスクリプトは、各データペア間の相関関係を見つけます。matlabの相関

clear all 
LName={'Name1','Name2','Name3','Name4','Name5'}; 
Data={rand(12,1),rand(12,1),rand(12,1),rand(12,1),rand(12,1)}; 
%place in a structure 
d = [LName;Data]; 
Data = struct(d{:}); 

d1 = cell2mat(struct2cell(Data)'); 
[R,P] = corrcoef(d1); 
Correlation = [LName(nchoosek(1:length(R),2)) num2cell(nonzeros(tril(R,-1)))] 

さらに、このスクリプトは、相関値の生成にどのデータの組み合わせが使用されたかを「相関」にも記載しています。これから私は一対のデータ間の相関関係を見つけ出すだけでなく、n個のデータ間の相関関係を見つけようとしているので、上のスクリプトに加えて、3組のデータの間の相関関係を見つけようとしています。 4つ...というように、相関関係にこれを格納します。どのように私はこれを達成するだろうか?

+0

複数のオフセットで相関が必要な場合、またはゼロオフセット(オフセットなし)の相関が必要な場合のみですか? –

+0

人々があなたに手伝ってもらいたい場合は、「受け入れ」率を向上させることもできます。 –

+0

上記のコードは、Name1、Name2の間の相関関係を計算します。 Name1、Name3; Name1、Name4; Name1、Name5など、私がやろうとしているのは、Name1、Name2、Name3間の相関関係を計算したいのと同様です。次に、すべての値と見出しを「相関」に格納します。 – user1053544

答えて

-1

あなたの数字はすべて負ではないので、単に関連する配列を掛け合わせるだけで、合計と正規化で十分です。これは基本的にcorrcoefが行うのと同じことですが、一度に2つの配列を掛け合わせるだけです。

ただし、これは負の数値では機能しません。たとえば、3つの配列すべてがある時点で負の値を持つとします。これは良い相関があるという意味で良いでしょう。しかし、それらを乗算するだけで、負の相関が得られます。これは、その時点で反対の相関があることを示します。

+0

どのような相関があり、どのように機能するかについてのあなたの説明は、誤解を招くものです。負の相関が悪い相関を意味するわけではありません。実際、-1は完璧な相関関係を意味しますが、y = -xの関係に関連する2つのデータセットx、yから得られるような反対方向です。 – Kavka

+0

@Kavka良い点。投稿は修正されました。 –