Granger测试(Python)错误消息 - TypeError:不支持的操作数类型 - :' str'和' int'

时间:2012-08-26 18:35:46

标签: python-2.6

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

我是编程新手,需要这个来为我的项目运行分析。在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

2 个答案:

答案 0 :(得分: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列表。

答案 1 :(得分:0)

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

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