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

运行Vector Autoregression代码遇正定数组错误,如何解决?

解决VAR模型中数组非正定的错误问题

问题重现

运行以下代码时,在var_model.select_order(max_lag)行抛出5-th leading minor of the array is not positive definite错误:

from statsmodels.tsa.vector_ar.var_model import VAR
max_lag = 20
# occ_data是一个52584行×5列的dataframe
var_model = VAR(occ_data)
# 选择最优滞后阶数
lag_results = var_model.select_order(max_lag)
selected_lag = lag_results.aic
print(selected_lag) 

数据样例(occ_data):

BGT North of NE 70th Total  Ped South   Ped North   Bike North  Bike South
Date                    
2014-01-01 00:00:00 0.002665    0.000243    0.000186    -1.901329e-05   0.002255
2014-01-01 01:00:00 -5.997088   1.000224    -1.999776   -1.000000e+00   -3.997536
2014-01-01 02:00:00 0.002912    -0.999776   0.000224    -1.000000e+00   2.002464
2014-01-01 03:00:00 10.002912   0.000224    0.000224    4.260205e-09    10.002464
2014-01-01 04:00:00 0.002912    0.000224    0.000224    4.260205e-09    0.002464
... ... ... ... ... ...
2019-12-31 19:00:00 -7.997536   -2.000000   -4.999104   1.000896e+00    -1.999328
2019-12-31 20:00:00 -3.997536   -2.000000   -0.999104   -9.991039e-01   0.000672
2019-12-31 21:00:00 1.002464    1.000000    2.000896    8.960573e-04    -1.999328
2019-12-31 22:00:00 -1.997536   -1.000000   -1.999104   8.960573e-04    1.000672
2019-12-31 23:00:00 1.002464    1.000000    0.000896    1.000896e+00    -0.999328

错误原因

该错误说明VAR模型计算时依赖的协方差矩阵不是正定矩阵,通常由以下情况导致:

  • 变量间存在严重多重共线性(高度相关特征)
  • 数据存在奇异值或数值精度问题
  • 样本信息不足以支撑5维变量的VAR模型估计

解决方法

1. 处理多重共线性

计算变量相关系数矩阵,删除高度相关的变量:

# 计算相关系数矩阵
corr_matrix = occ_data.corr()
# 打印矩阵,找出相关系数绝对值大于0.9的变量对
print(corr_matrix)
# 示例:删除高度相关的Bike North列
occ_data = occ_data.drop(columns=['Bike North'])

2. 给数据添加小扰动

通过给数据添加极小噪声,强制协方差矩阵变为正定:

import numpy as np
from statsmodels.tsa.vector_ar.var_model import VAR

# 给数据添加极小高斯噪声
epsilon = 1e-6
occ_data_noisy = occ_data + np.random.normal(0, epsilon, occ_data.shape)
# 用加噪后的数据重新构建模型
var_model_noisy = VAR(occ_data_noisy)
lag_results = var_model_noisy.select_order(max_lag)
selected_lag = lag_results.aic
print(selected_lag)

3. 数据标准化处理

对数据进行标准化,减少数值尺度差异带来的稳定性问题:

from sklearn.preprocessing import StandardScaler
import pandas as pd

scaler = StandardScaler()
occ_data_scaled = scaler.fit_transform(occ_data)
# 转换回DataFrame并保留原索引
occ_data_scaled = pd.DataFrame(occ_data_scaled, index=occ_data.index, columns=occ_data.columns)
# 重新构建模型
var_model_scaled = VAR(occ_data_scaled)
lag_results = var_model_scaled.select_order(max_lag)
selected_lag = lag_results.aic
print(selected_lag)

4. 降低模型维度

使用PCA将5维变量压缩到更低维度,再构建VAR模型:

from sklearn.decomposition import PCA
import pandas as pd

pca = PCA(n_components=4)  # 压缩到4维
occ_data_pca = pca.fit_transform(occ_data)
occ_data_pca = pd.DataFrame(occ_data_pca, index=occ_data.index)
# 重新构建模型
var_model_pca = VAR(occ_data_pca)
lag_results = var_model_pca.select_order(max_lag)
selected_lag = lag_results.aic
print(selected_lag)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:55:16