statsmodels.tsa.arima_model : TypeError: 'Series' object is not callable
statsmodels.tsa.arima_model : TypeError: 'Series' object is not callable
使用 statsmodels.tsa.arima_model.ARMA 构建 ARMA 模型后,我想使用 class ARMAResult
的 .resid()
方法测量模型的误差。然而,在执行过程中,我得到了一个错误:
Traceback (most recent call last):
File "smtest.py", line 161, in <module>
arma(df, 'input')
File "smtest.py", line 81, in arma
print arma11.resid()
TypeError: 'Series' object is not callable
实际上,statsmodels.tsa.arima_model.ARMAResults.resid()的源代码如下:
@cache_readonly
def resid(self):
return self.model.geterrors(self.params)
还有我的部分代码:
def arma(df, colname):
"""
Compute the ARMA result for dataframe provided, than plot
Parameters
----------
df : dataframe
colname : column name in the dataframe df
"""
values_realtime = df[colname]
arma11 = sm.tsa.ARMA(values_realtime, (1, 1)).fit()
arma12 = sm.tsa.ARMA(values_realtime, (1, 2)).fit()
arma13 = sm.tsa.ARMA(values_realtime, (1, 3)).fit()
arma31 = sm.tsa.ARMA(values_realtime, (3, 1)).fit()
arma41 = sm.tsa.ARMA(values_realtime, (4, 1)).fit()
values_predict_arma11 = arma11.predict()
values_predict_arma12 = arma12.predict()
values_predict_arma13 = arma13.predict()
values_predict_arma31 = arma31.predict()
values_predict_arma41 = arma41.predict()
# get errors I
values_error_arma11 = values_predict_arma11 - values_realtime
values_error_arma12 = values_predict_arma12 - values_realtime
values_error_arma13 = values_predict_arma13 - values_realtime
values_error_arma31 = values_predict_arma31 - values_realtime
values_error_arma41 = values_predict_arma41 - values_realtime
# get errors II
print arma11.resid()
# ...
有人能告诉我应该怎么做才能解决这个问题吗?谢谢。
使用 arma11.resid
不带括号 ()
。
解释:
模型中的许多结果都是惰性计算的,也就是说,它们只是按需计算,然后存储以供进一步使用。这意味着这些结果本质上是缓存属性,通过装饰器实现。
statsmodels 的文档对此有点混乱,因为 sphinx
将这些缓存的属性呈现为一种方法并包含括号,即使我们在没有括号的情况下使用它。
一般 Python 提示:如果错误消息说某个对象不可调用,那么我们可以尝试不调用它,即不调用 ()
。
(我也碰巧不记得哪个是属性,哪个是方法或可调用。)
使用 statsmodels.tsa.arima_model.ARMA 构建 ARMA 模型后,我想使用 class ARMAResult
的 .resid()
方法测量模型的误差。然而,在执行过程中,我得到了一个错误:
Traceback (most recent call last):
File "smtest.py", line 161, in <module>
arma(df, 'input')
File "smtest.py", line 81, in arma
print arma11.resid()
TypeError: 'Series' object is not callable
实际上,statsmodels.tsa.arima_model.ARMAResults.resid()的源代码如下:
@cache_readonly
def resid(self):
return self.model.geterrors(self.params)
还有我的部分代码:
def arma(df, colname):
"""
Compute the ARMA result for dataframe provided, than plot
Parameters
----------
df : dataframe
colname : column name in the dataframe df
"""
values_realtime = df[colname]
arma11 = sm.tsa.ARMA(values_realtime, (1, 1)).fit()
arma12 = sm.tsa.ARMA(values_realtime, (1, 2)).fit()
arma13 = sm.tsa.ARMA(values_realtime, (1, 3)).fit()
arma31 = sm.tsa.ARMA(values_realtime, (3, 1)).fit()
arma41 = sm.tsa.ARMA(values_realtime, (4, 1)).fit()
values_predict_arma11 = arma11.predict()
values_predict_arma12 = arma12.predict()
values_predict_arma13 = arma13.predict()
values_predict_arma31 = arma31.predict()
values_predict_arma41 = arma41.predict()
# get errors I
values_error_arma11 = values_predict_arma11 - values_realtime
values_error_arma12 = values_predict_arma12 - values_realtime
values_error_arma13 = values_predict_arma13 - values_realtime
values_error_arma31 = values_predict_arma31 - values_realtime
values_error_arma41 = values_predict_arma41 - values_realtime
# get errors II
print arma11.resid()
# ...
有人能告诉我应该怎么做才能解决这个问题吗?谢谢。
使用 arma11.resid
不带括号 ()
。
解释:
模型中的许多结果都是惰性计算的,也就是说,它们只是按需计算,然后存储以供进一步使用。这意味着这些结果本质上是缓存属性,通过装饰器实现。
statsmodels 的文档对此有点混乱,因为 sphinx
将这些缓存的属性呈现为一种方法并包含括号,即使我们在没有括号的情况下使用它。
一般 Python 提示:如果错误消息说某个对象不可调用,那么我们可以尝试不调用它,即不调用 ()
。
(我也碰巧不记得哪个是属性,哪个是方法或可调用。)