0

次の 2 つの時系列があります。

ここに画像の説明を入力

X 軸は 10000 を超える値です。ここで、それらをスライディング ウィンドウに分割すると、個別には相関していないため、相関関係が得られません。ただし、全体像を見ると、それらは相関していることがわかります。この相関関係を示す必要があります。誰でもこれを行う方法についての指針を教えてもらえますか?

私はMatlabとPythonで作業していますが、主に概要が本当に必要です。ありがとう!

4

2 に答える 2

1

Matlabで、全体的な相関関係を示すために 2 つのことを提案します。x1、ベクトルがx2データを表すとします。

  • を計算c = corrcoef(x1,x2)して観察しc(2,1)ます。これは、ベクトル全体の相関係数です。-1 と 1 の間で正規化された相関を測定します。
  • plot(x1,x2,'.','markersize',3). これにより点群が描画され、そこから相関関係を視覚的に評価できます。相関x1x2の場合、点は直線に沿って多かれ少なかれ薄い雲を形成する傾向があります (例の形状とそれに関連する相関係数を参照してください) 。

ベクトルに が含まれている場合NaNは、まずそれらを削除する必要があります。

ind = ~(isnan(x1)|isnan(x2));
x1 = x1(ind);
x2 = x2(ind);

例: 次の 2 つのベクトルの例では が得られc=0.91、雲の形状から、有意な相関関係があることが明らかです。

シグナル

クラウド

于 2013-10-09T15:00:15.520 に答える
0

numpy.corrcoef次の式を使用するPython での相関の例を次に示します。

ここに画像の説明を入力

ここで、Cij は変数 xi と xj (それぞれ確率変数) の共分散です。Pij 変数は、xi と xj がどの程度類似しているかを示します。両方の信号が類似している場合は、1 または -1 に近く、相関がない場合は 0 に近くなります。

>>> import numpy as np
>>> n = 100
>>> x = np.linspace(0, 10, n)
>>> y1 = np.sin(x) + np.random.randn(n) * 0.3 + 2
>>> y2 = np.sin(x) + np.random.randn(n) * 0.5
>>> np.corrcoef(y1,y2)
 [[ 1.          0.79680839]
  [ 0.79680839  1.        ]]

ところで、相関させた 2 つの信号があります。

>>> import matplotlib.pyplot as plt
>>> plt.plot(x,y1, x, y2)
>>> plt.show()

ここに画像の説明を入力

于 2013-10-09T15:35:37.447 に答える