2015-11-18 4 views
1

После построения модели ARMA с использованием statsmodels.tsa.arima_model.ARMA, я хочу измерить ошибку модели, используя метод .resid() класса ARMAResult. Тем не менее, во время выполнения, я получил сообщение об ошибке:statsmodels.tsa.arima_model: TypeError: объект «Series» не может быть вызван

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() 
    # ... 

Может кто-нибудь скажет мне, что мне делать, чтобы решить проблему? Благодарю.

+1

'arma11.resid' Это свойство кэширования, но сфинкс не может отобразить его без'() ' в документации. В общем случае, если сообщение говорит, что оно не вызываемо, попробуйте его без вызова, т. Е. Без '()'. – user333700

+0

Работает без '()'. И теперь я знаю лучше о питоне, спасибо! Не могли бы вы дать ответ ниже, чтобы я мог принять его? –

ответ

2

arma11.resid без круглых скобок ().

Объяснение:

Многие результаты в модели вычисляются лениво, то есть, они рассчитаны только по требованию, но затем сохраняются для дальнейшего использования. Это означает, что эти результаты являются в основном кэшированными свойствами, реализованными через декоратор.

Документация на statsmodels немного запутанна, потому что sphinx отображает эти кешированные свойства как метод и включает круглые скобки, хотя мы используем его без скобок.

Общий совет Python: Если сообщение об ошибке говорит, что объект не может быть вызван, тогда мы можем попробовать, не вызывая его, т. Е. Без (). (Мне также приходит в голову, что я не помню, какой атрибут и который является методом или вызываемым.)

Смежные вопросы