You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:03