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

绘制中间与最优ARIMA(p,d,q)模型的AIC值:技术求助

绘制ARIMA(p,q)模型AIC值的可视化方案(d=0)

你已经通过AIC最小化筛选了ARIMA模型,而且所有结果里d固定为0,变量只有p(0-5)和q(0-5),对应的AIC值也都有了,下面我给你详细讲两种可视化的实现方法,用Python的常用库就能搞定:

一、2D可视化方案(推荐先做这个,更直观)

1. 热力图(最适合离散的p、q组合)

热力图能直接把p、q的组合和对应的AIC值用颜色深浅展示出来,一眼就能看到哪个(p,q)组合的AIC最小(也就是模型最优)。这里用seaborn和pandas来实现:

首先先整理数据,把p作为行、q作为列,AIC作为值:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 假设你已经有完整的36条数据,这里根据你给的head和tail示例构造(实际替换成你的全量数据)
data = [
    (0,0,-2671.744), (0,1,-2686.691), (0,2,-2685.053), (0,3,-2683.094), (0,4,-2688.464), (0,5,-2686.973),
    # 补充中间p=1到4的q=0-5的AIC值,这里用占位符,你替换成实际数据
    (1,0,0), (1,1,0), (1,2,0), (1,3,0), (1,4,0), (1,5,0),
    (2,0,0), (2,1,0), (2,2,0), (2,3,0), (2,4,0), (2,5,0),
    (3,0,0), (3,1,0), (3,2,0), (3,3,0), (3,4,0), (3,5,0),
    (4,0,0), (4,1,0), (4,2,0), (4,3,0), (4,4,0), (4,5,0),
    (5,0,-2685.982), (5,1,-2684.926), (5,2,-2683.003), (5,3,-2683.654), (5,4,-2686.069), (5,5,-2698.871)
]

# 转换成DataFrame并重塑成矩阵形式
df = pd.DataFrame(data, columns=['p', 'q', 'AIC'])
aic_matrix = df.pivot(index='p', columns='q', values='AIC')

# 绘制热力图
plt.figure(figsize=(8,6))
sns.heatmap(aic_matrix, annot=True, fmt='.3f', cmap='viridis', cbar=True)
plt.title('ARIMA(p,q)模型AIC值热力图(d=0)')
plt.xlabel('q值')
plt.ylabel('p值')
plt.show()

注:因为AIC越小模型越好,所以热力图里颜色越暗(取决于你选的colormap)的位置,就是更优的模型组合,比如你给的结果里(p=5,q=5)的AIC最小,会显示最明显的颜色。

2. 分组折线图

如果想观察每个p值下,q变化对AIC的影响,可以做分组折线图:

plt.figure(figsize=(10,6))
# 按p分组,遍历每个p对应的q和AIC
for p_val in df['p'].unique():
    subset = df[df['p'] == p_val]
    plt.plot(subset['q'], subset['AIC'], marker='o', label=f'p={p_val}')

plt.title('不同p值下q对AIC的影响(d=0)')
plt.xlabel('q值')
plt.ylabel('AIC值')
plt.legend(title='p值')
plt.grid(True, alpha=0.3)
plt.show()

这个图能帮你看到每个p对应的q变化趋势,比如是不是q越大AIC越小,或者有没有拐点。

二、3D曲面图可视化

如果想更立体地展示p、q和AIC的关系,可以做3D曲面图,用matplotlib的3D模块:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D

# 生成p和q的网格
p = np.arange(0,6)
q = np.arange(0,6)
P, Q = np.meshgrid(p, q)

# 把AIC矩阵转换成numpy数组
AIC = aic_matrix.values

# 绘制3D曲面图
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(P, Q, AIC, cmap='viridis', edgecolor='none')

# 设置标签和标题
ax.set_title('ARIMA(p,q)模型AIC值3D曲面图(d=0)')
ax.set_xlabel('p值')
ax.set_ylabel('q值')
ax.set_zlabel('AIC值')
# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

你可以拖拽旋转这个3D图,从不同角度观察AIC随p、q变化的趋势,找到全局最小值的位置。

小提示

  • 如果你用的是R语言,思路类似:热力图可以用ggplot2的geom_tile,3D图用plot3D包。
  • 一定要确保你的数据是完整的6x6矩阵(p和q都从0到5),不然绘图会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:45:01