0

我正在尝试对两个货币对进行格兰杰因果关系测试,但每当我尝试测试它时,我似乎都会在 Shell 中收到此错误消息。有人可以请教吗?

我对编程非常陌生,需要它来为我的项目运行分析。在外壳中,我将 -

导入 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)

所以你给了grangertest两个字符串和一个整数。但似乎grangertest期待

def grangertest(Y,X,maxlag):

两个数字序列(列表、数组等)用作 Y 和 X,而不是字符串。如果EURUSDEURGBP是您事先为列表指定的名称,则不需要引号:

ats15.grangertest(EURUSD, EURGBP, 8)

但如果不是,那么您应该grangertest以您所称的任何名称传递列表。

于 2012-08-26T18:46:14.303 回答
0

函数的输入grangertest必须是两个数字列表。grangertest对货币一无所知,因此将货币字符串传递给它是行不通的。

您必须以某种方式获取汇率数据,以便将其传递给grangertest. 如果EURUSD和是变量,那么当您将它们传递给函数(例如)EURGBP时,不要在它们周围加上引号。ats15.grangertest(EURUSD, EURGBP, 8)

于 2012-08-26T18:46:25.030 回答