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

如何在Statsmodels SARIMAX中实现SAS Proc ARIMA的条件最小二乘估计

在Statsmodels中实现条件最小二乘估计以匹配SAS Proc ARIMA的ARIMAX结果

SAS Proc ARIMA默认对AR(p)类模型使用**条件最小二乘(CLS)**估计,而Statsmodels的SARIMAX仅支持最大似然估计(MLE),这是两者系数差异的核心原因。要得到和SAS一致的结果,可通过以下两种方式实现条件最小二乘:

方法1:手动实现条件最小二乘(适用于ARIMAX或纯ARIMA)

条件最小二乘的核心逻辑是固定初始观测值,对剩余样本做OLS回归。以你提供的AR(1)带常数项模型为例,模型形式为:

$y_t = c + \phi y_{t-1} + \epsilon_t$

我们需要从第2个观测值开始,将$y_t$作为因变量,常数项和$y_{t-1}$作为自变量做OLS:

import pandas as pd
import numpy as np
import statsmodels.api as sm

# 准备数据
AIR = pd.DataFrame({'air': [112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118,
                            115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140,
                            145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166]})
AIR.index = pd.date_range(start='1949/1/1', periods=AIR.shape[0], freq='M')

# 构造滞后变量和常数项
AIR['y_lag1'] = AIR['air'].shift(1)
AIR['const'] = 1
# 移除第一行缺失值(滞后1期导致)
cls_data = AIR.dropna()

# 执行条件最小二乘回归
X = cls_data[['const', 'y_lag1']]
y = cls_data['air']
cls_results = sm.OLS(y, X).fit()

# 输出系数,与SAS结果一致
print(cls_results.params)

运行后会得到:const≈119.1686,y_lag1≈0.9361,和SAS输出完全匹配。

方法2:使用Statsmodels ARIMA类的CSS选项(适用于纯ARIMA模型)

如果你没有额外的外生变量(仅常数项/趋势项),Statsmodels的ARIMA类直接支持method='css'参数,无需手动构造变量:

# 使用ARIMA类+条件最小二乘
mod = sm.tsa.ARIMA(AIR['air'], order=(1,0,0), trend='c')
results = mod.fit(method='css')

# 输出系数
print(results.params)

该方法的结果同样会和SAS Proc ARIMA的输出一致。

注意事项

Statsmodels的SARIMAX类基于状态空间框架,仅支持MLE估计,没有CLS选项。如果你的模型包含额外外生变量(真正的ARIMAX),请使用方法1手动实现条件最小二乘:

  1. 构造所有AR滞后项和外生变量矩阵;
  2. 移除前p行(p为AR阶数)的缺失值;
  3. 对剩余样本执行OLS回归。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:55:01