2017-04-10 11 views
4

私は時系列(浮動小数点数のリストの1つ)がと相関しているかどうかを調べるために実験しています。私はすでに統計モデル(http://statsmodels.sourceforge.net/devel/generated/statsmodels.tsa.stattools.acf.html)にacf関数を使って遊んでいましたが、今はDurbin-Watson統計に価値があるかどうかを見ています。1次元時系列データのDurbin-Watson統計

動作するはずこの種のもののように思える:

from statsmodels.regression.linear_model import OLS 
import numpy as np 

data = np.arange(100) # this should be highly correlated 
ols_res = OLS(data) 
dw_res = np.sum(np.diff(ols_res.resid.values)) 

あなたがこれを実行した場合、あなたが得るでしょう:

Traceback (most recent call last): 
... 
    File "/usr/lib/pymodules/python2.7/statsmodels/regression/linear_model.py", line 165, in initialize 
    self.nobs = float(self.wexog.shape[0]) 
AttributeError: 'NoneType' object has no attribute 'shape' 

D/Wは、通常、比較するために使用されているようです相関のための2つの時系列(例えばhttp://connor-johnson.com/2014/02/18/linear-regression-with-python/)ですので、私は問題が私が比較する別の時系列を渡さなかったと思います。おそらく、これはexogパラメータでOLSに渡されるはずですか?

exog : array-like 

A nobs x k array where nobs is the number of observations and k is 
the number of regressors. 

http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLS.htmlから)サイドノート:私は "NOBS X K" の配列が何を意味するのかわかりません。おそらくxkの配列ですか?

ここで何をすべきですか?私はdataを2回、 に渡すことを期待していますか、手動でそれを自分で遅らせるか、それとも?

ありがとうございます!

答えて

2

OLSは、yとx(またはendogとexog)を必要とする回帰です。 xはあなたのケースで少なくとも定数である必要があります。 np.ones(len(endog)、1)。

また、モデルを適合させる必要があります。つまり、ols_res = OLS(y, x).fit()です。

nobs x k

、すなわちexog.shape、列内の行とk個の変数でNOBS観察と2次元を意味(nobs, k)

ダービンワトソンはシリアル相関のための検定統計量です。これは、OLSサマリ出力に含まれています。統計モデルには自己相関がないという他のテストもあります。

(私はいくつかの例やチュートリアルのノートブックを通じて作業をお勧めします。)

+0

感謝に見えると思います。自分自身とデータを関連付けるために、データを自分で遅らせる必要はないことを確認できますか?データを独立変数として渡し、定数のベクトルを従属変数として渡します。右? –

+0

この場合、OLSはデータをデメンします。次いで、DW等の残留物に関する診断試験を使用することができる。 http://www.statsmodels.org/stable/stats.html#module-statsmodels.stats.stattools http://www.statsmodels.org/stable/diagnostic.html#autocorrelation-tests – user333700

+0

ありがとう!私はコードサンプルも投稿しました。 –

0

私はuser333700の答えを受け入れてきましたが、私は、コードスニペットは、フォローアップ投稿したかったです。

この小さなプログラムは、線形範囲(高い相関があり、0に近い値を与える)とランダムな値(相関してはならない値)を求めてdurbin-watson相関を計算します。実行すると

from statsmodels.regression.linear_model import OLS 
import numpy as np 
from statsmodels.stats.stattools import durbin_watson 



def dw(data): 
    ols_res = OLS(data, np.ones(len(data))).fit() 
    return durbin_watson(ols_res.resid) 


print("dw of range=%f" % dw(np.arange(2000))) 
print("dw of rand=%f" % dw(np.random.randn(2000))) 

:2)

dw of range=0.000003 
dw of rand=2.036162 

だから私はそれが良い:)

関連する問題