Python中使用AR模型输出对象而非去趋势数组的问题求助
解决AR模型输出对象而非去趋势数组的问题
嘿,我来帮你理清这个问题~
你现在遇到的情况是因为对statsmodels中AR模型的返回值理解有点偏差,我来一步步给你解释:
为什么你看到的是对象输出?
- 当你执行
print AR(signal)时,你打印的是AR模型的实例对象,而不是拟合后的结果,所以输出会显示对象的内存地址(比如<statsmodels.tsa.ar_model.AR object at ...>),这很正常。 ar_mod.fit(4)返回的是ARResultsWrapper对象,这个对象是用来封装所有拟合结果的容器(包含模型系数、拟合值、残差等),直接打印它自然也只会显示对象的基本信息,而不是你想要的去趋势数组。
如何得到去趋势后的序列?
你想要的去趋势数组,其实可以通过原始序列减去模型的拟合值来得到,或者直接使用模型的残差(残差的定义就是原始值减去拟合值,两者是等价的)。
这里给你修正后的代码:
from statsmodels.tsa.ar_model import AR import numpy as np # 加载数据 signal = np.loadtxt("secular.txt") # 创建AR模型并拟合(指定滞后阶数为4) ar_mod = AR(signal) ar_res = ar_mod.fit(4) # 如果你想查看模型的系数,可以这样打印 print("AR模型的系数:", ar_res.params) # 获取模型的拟合值 fitted_values = ar_res.fittedvalues # 计算去趋势后的序列:原始信号 - 拟合值 detrended_signal = signal - fitted_values # 或者直接用模型的残差(和上面的detrended_signal是一样的) # detrended_signal = ar_res.resid # 打印去趋势后的序列 print("去趋势后的序列:", detrended_signal)
额外提醒:API更新
另外要注意,statsmodels的新版本中,AR类已经被标记为过时(deprecated),推荐使用AutoReg来替代,用法更清晰:
from statsmodels.tsa.ar_model import AutoReg # 直接在创建模型时指定滞后阶数 ar_mod = AutoReg(signal, lags=4) ar_res = ar_mod.fit() # 后续获取拟合值、残差的方式和之前一致 detrended_signal = signal - ar_res.fittedvalues
总结
你的核心问题是把模型对象/结果对象和实际需要的数值数组搞混了——这些对象本身不是结果数组,而是存储结果的容器,你需要通过它们的属性(比如fittedvalues、resid、params)来提取具体的数值。
内容的提问来源于stack exchange,提问作者Reihaneh Kouhi
相关产品推荐
相关产品推荐

