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

ARIMA模型计算RSS时触发ValueError报错求助

解决ARIMA模型计算RSS时的ValueError问题

我来帮你搞定这个报错!你遇到的ValueError: Cannot add integral value to Timestamp without freq.主要是因为维度不匹配和索引对齐的问题,咱们一步步拆解解决:

问题回顾

你基于自相关函数(ACF)和偏自相关函数(PACF)构建了AR(6,0,0)模型,拟合和绘图功能都正常,但计算RSS(残差平方和)时触发了时间戳相关的错误,代码和报错信息如下:

你的代码:

import matplotlib.pylab as plt 
from matplotlib.pylab import rcParams 
rcParams['figure.figsize'] = 15, 6 
import pandas as pd 
from statsmodels.tsa.arima_model import ARIMA 

df = pd.read_csv('data.csv', header=0, index_col=0, parse_dates=True, sep=';') 
model = ARIMA(df, order=(6, 0, 0)) 
results_ARIMA = model.fit(disp=-1) 

plt.plot(df, color='blue', label='Original') 
plt.plot(results_ARIMA.fittedvalues, color='red', label='Predicted') 
plt.plot(results_ARIMA.predict(start = 23, end = 34, dynamic=True), color='red') 
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-df)**2)) 

报错信息:

File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile execfile(filename, namespace)
File "C:\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Patrick Ulanday/Desktop/Thesis/ARIMA/CRWFR_boundary_ARIMA/ARIMA.py", line 64, in print ('RSS: %.4f'% sum((results_ARIMA.fittedvalues-df)**2))
File "pandas/_libs/tslib.pyx", line 787, in pandas._libs.tslib.Timestamp.__radd__
File "pandas/_libs/tslib.pyx", line 1275, in pandas._libs.tslib._Timestamp.__add__
ValueError: Cannot add integral value to Timestamp without freq.

报错原因

  1. 维度不匹配:你传给ARIMA模型的是整个DataFrame df,但模型输出的fittedvalues是单维Series。当你执行fittedvalues - df时,pandas会广播生成DataFrame,后续求和操作会错误地把时间戳索引当成数值参与计算,触发报错。
  2. 索引对齐问题:AR(6)模型需要前6个观测值作为滞后项,所以fittedvalues是从第7个观测开始生成的,直接和整个df做减法会产生大量NaN,进一步引发计算异常。

解决方案

最省心的方法是直接用模型结果的resid属性(残差序列)来计算RSS——resid已经自动对齐了原始值和拟合值,并且只保留有效的残差数据:

修改后的代码:

import matplotlib.pylab as plt 
from matplotlib.pylab import rcParams 
rcParams['figure.figsize'] = 15, 6 
import pandas as pd 
from statsmodels.tsa.arima_model import ARIMA 

# 读取数据,建议明确提取目标时间序列列(替换成你实际的列名)
df = pd.read_csv('data.csv', header=0, index_col=0, parse_dates=True, sep=';')
ts = df['your_target_column']  # 比如你数据里的列叫'value'就改成df['value']

# 用单变量Series构建模型,避免维度问题
model = ARIMA(ts, order=(6, 0, 0)) 
results_ARIMA = model.fit(disp=-1) 

plt.plot(ts, color='blue', label='Original') 
plt.plot(results_ARIMA.fittedvalues, color='red', label='Predicted') 
plt.plot(results_ARIMA.predict(start=23, end=34, dynamic=True), color='red') 

# 用resid计算RSS,自动忽略前6个无效的NaN残差
rss = sum(results_ARIMA.resid.dropna() ** 2)
plt.title(f'RSS: {rss:.4f}') 
plt.legend()
plt.show()

备选方案(如果坚持用fittedvalues计算)

如果你想手动用拟合值计算,需要确保两者都是Series且索引对齐:

# 提取原始序列中对应拟合值的部分(从第7个观测开始)
original_subset = ts[6:]
rss = sum((results_ARIMA.fittedvalues - original_subset) ** 2)

小提示

以后构建单变量时间序列模型时,尽量传入Series而不是DataFrame,这样能避免很多不必要的维度和索引问题~

内容的提问来源于stack exchange,提问作者Patrick Jackson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:08