0

2 つの通貨ペアでグレンジャー因果関係テストを実行しようとしていますが、テストしようとすると、シェルでこのエラー メッセージが表示されるようです。誰でもアドバイスできますか?

私はプログラミングに非常に慣れていないため、プロジェクトの分析を実行するためにこれが必要です。シェルでは、私は入れています-

import ats15 ats15.grangertest('EURUSD', 'EURGBP', 8)

何がうまくいかないのですか?以下のスクリプトをコピーしました。

前もって感謝します。

見出し ##def grangertest(Y,X,maxlag):

"""
Performs a Granger causality test on variables (vectors) Y and X.
The null hypothese is: Does X cause Y ?
Returned value: pvalue, F, df1, df2
"""
# Create linear model involving Y lags only.
n = len(Y)
if n != len(X):
    raise ValueError, "grangertest: incompatible Y,X vectors"
M = [ [0] * maxlag for i in range(n-maxlag)]
for i in range(maxlag, n):
    for j in range(1, maxlag+1):
        M[i-maxlag][j-1] = Y[i-j]

fit = ols(M, Y[maxlag:])
RSSr = fit.RSS

# Create linear model including X lags.
for i in range(maxlag, n):
    xlagged = [X[i-j] for j in range(1, maxlag+1)]
    M[i-maxlag].extend(xlagged)
fit = ols(M, Y[maxlag:])
RSSu = fit.RSS
df1 = maxlag
df2 = n - 2 * maxlag - 1
F = ((RSSr - RSSu)/df1)/(RSSu/df2)
pvalue = 1.0 - stats.f.cdf(F,df1,df2)
return pvalue, F, df1, df2, RSSr, RSSu
4

2 に答える 2

0

完全なトレースバックを投稿しませんでしたが、次のエラー メッセージが表示されます。

TypeError: unsupported operand type(s) for -: 'str' and 'int'

と言う意味です。オペランド-(減算演算子) がありますが、文字列から整数を減算する方法がわかりません。なぜ文字列が関係するのでしょうか? さて、あなたは次のように関数を呼び出しています:

ats15.grangertest('EURUSD', 'EURGBP', 8)

したがって、grangertest2 つの文字列と整数を指定しています。grangertestしかし、それは期待しているようです

def grangertest(Y,X,maxlag):

文字列ではなく、Y と X として使用する数値の 2 つのシーケンス (リスト、配列など) 。EURUSDとが事前にリストに付けた名前である場合EURGBP、引用符は必要ありません。

ats15.grangertest(EURUSD, EURGBP, 8)

grangertestしかしそうでない場合は、リストをあなたが呼んだ名前で渡す必要があります。

于 2012-08-26T18:46:14.303 に答える
0

関数への入力は、grangertest2 つの数値リストでなければなりません。grangertestは通貨について何も知らないので、通貨文字列を渡しても機能しません。

に渡すことができるように、何らかの方法で為替レート データを取得する必要がありますgrangertestEURUSDとが変数の場合EURGBP、それらを関数に渡すときにそれらを引用符で囲みません (例: ats15.grangertest(EURUSD, EURGBP, 8))。

于 2012-08-26T18:46:25.030 に答える