>相関係数って2つの2列の配列データ間では見ることができるのでしょうか?
→NOです。恐らく時間軸が合致しないデータの相関係数を得ようとしているのだと思いますが、1列のデータ同士の相関係数は、数列の長さが同じであれば数値が何であっても相関係数が計算されます。基準値のズレなどとは無関係にです。
恐らくデータAとデータBの列の長さは同じでも内容は別物で、特に「ピークが検出された時間」がずれていたりするのでしょう。データの長さは同じでも基準時間がズレているデータ同士の相関係数を取る事が何を意味するのか(そこに意味はあるのか)を検討されては如何でしょうか?
>この場合corrcoef(A,B)という計算で出てくる相関係数で大丈夫でしょうか?
→NOです。大丈夫じゃないです。エラーも出ないので出てきた相関係数の意味に注意が必要です。
相関係数 - MATLAB corrcoef - MathWorks 日本:幾つかの書き方がありますが、注目すべきは下記2パターン(特に後者)です
R = corrcoef(A):Aに2次元配列を入力すると、各列の相関係数がリーグ戦の対戦表の様な形(Aの列数*Aの列数)で出力されます
R = corrcoef(A,B):AとBにベクトル(1列)を入力すると、AとBの相関係数がやはり対戦表の様な形(2*2)で出力されます
後者については下記の注意点があります。つまり単純にそれぞれ2列あるAとBをcorrcoefに入力すると、1列に「ピークが検出された時間」や「次のピークまでの間隔」が混ざった数列同士の相関係数が計算されてしまいます。
- A と B が行列または多次元配列である場合、corrcoef(A,B) は各入力をベクトル表現に変換し、corrcoef(A(:),B(:)) または corrcoef([A(:) B(:)]) と等価になります。
ではどうすれば良いかというと、「次のピークまでの間隔」は「次のピークまでの間隔」同士で相関係数を取れば良いのです。相関係数を得るのに「ピークが検出された時間」との関連性は必要無い(というか関連付ける事が出来ない)のです。
ピーク解析 - MATLAB & Simulink Example - MathWorks 日本:ピーク解析の事例として用いられている太陽黒点数のデータを例として使います。ピーク値自体は使わず、ピークが検出された時間と次のピークまでの間隔を用います。
load sunspot.dat
year = sunspot(:,1);
avSpots = sunspot(:,2);
[~,locs] = findpeaks(avSpots,year,'MinPeakDistance',6);
A = [locs [diff(locs);0]]; % A:1列目にピークが検出された時間, 2列目に次のピークまでの間隔
B = A; % ちょっと横着で申し訳ないですが、今は仮にAと同じにします
plot(A(:,1), A(:,2), B(:,1), B(:,2));% plot(AorBの1列目,2列目) A=Bなのでグラフは1本に重なる
corrcoef(A(:,1),B(:,1)) % 「ピークが検出された時間」同士の相関係数(ここではA=Bなので1)
corrcoef(A(:,2),B(:,2)) % 「ピークが検出された時間」同士の相関係数(ここではA=Bなので1)
% corrcoef(A,B) としてしまうと、「ピークが検出された時間」と「次のピークまでの間隔」を1列に混ぜて相関係数を取ってしまうので無意味になる
