首页 > 编程语言 >*Python*滞后回归模型——自回归模型 (AR)

*Python*滞后回归模型——自回归模型 (AR)

时间:2024-11-05 13:44:46浏览次数:4  
标签:plt Python 模型 lag lags 滞后 data 回归

目录

⭐️引言

⭐️理论

1、基本概念:

2、自回归模型的数学表达式:

3、模型的构建

4、平稳性检验

5、模型选择

6、模型拟合

7、模型诊断

8、模型应用

9、结语



⭐️引言

        什么是自回归模型 (AR):简要介绍自回归模型的概念及其在时间序列分析中的重要性。

⭐️理论

        自回归模型 (AR) 是一种统计方法,通过利用因变量的过去值来预测其当前值,广泛应用于时间序列分析;在Python中,常用的包为 statsmodels 包,它们提供了强大的数据处理和模型拟合功能。

1、基本概念:

        时间序列数据:定义时间序列数据及其特点。

        滞后:解释什么是滞后以及如何表示滞后值。

        适用案例:如股票价格、气温数据等。

2、自回归模型的数学表达式:

         Y_t = \alpha + \beta_1 Y_{t-1} + \beta_2 Y_{t-2} + \ldots + \beta_p Y_{t-p} + \epsilon_t

        ( Y_t )表示因变量在时间( t )的值。

         ( Y_{t-1}, Y_{t-2}, \ldots, Y_{t-p} )分别表示因变量的 ( p )个滞后值。

        ( \alpha ) 是模型的截距项。

         ( \beta_1, \beta_2, \ldots, \beta_p )是对应的滞后系数。

        ( \epsilon_t )是在时间 ( t )的误差项,通常假定为白噪声,即均值为0,方差为常数的随机变量。

3、模型的构建

        (1)生成数据

import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(42)
dates = pd.date_range('2020-01-01', periods=100, freq='D')
Y = np.random.randn(100).cumsum()
data = pd.DataFrame({'Date': dates, 'Y': Y})
data.set_index('Date', inplace=True)

# 查看数据
print(data.head())

        (2)滞后规则生成

def generate_lags(df, column, max_lag):
    """
    生成指定列的滞后值
    :param df: DataFrame
    :param column: 需要生成滞后值的列名
    :param max_lag: 最大滞后阶数
    :return: 包含滞后值的DataFrame
    """
    for i in range(1, max_lag + 1):
        df[f'{column}_lag{i}'] = df[column].shift(i)
    return df

# 生成滞后值
max_lag = 2
data_with_lags = generate_lags(data, 'Y', max_lag)

# 删除含有NA值的行
data_with_lags.dropna(inplace=True)

# 查看生成滞后值后的数据
print(data_with_lags.head())

4、平稳性检验

        平稳性检验在时间序列分析中至关重要,它确保模型的有效性和可靠性,避免伪回归现象,提高模型的预测能力和解释能力。通过检验时间序列的统计特性是否在时间上保持不变,平稳性检验帮助选择合适的模型,诊断和改进模型,确保数据在建模前符合模型假设。常见的平稳性检验方法包括Augmented Dickey-Fuller (ADF) 检验和Kwiatkowski-Phillips-Schmidt-Shin (KPSS) 检验。

def check_stationarity(series):
    result = adfuller(series)
    print(f'ADF Statistic: {result[0]}')
    print(f'p-value: {result[1]}')
    for key, value in result[4].items():
        print(f'Critical Value ({key}): {value}')

check_stationarity(data_with_lags['Y'])

5、模型选择

        模型选择在时间序列分析中起着至关重要的作用,它通过确定最佳的模型结构和参数,确保模型能够准确地捕捉数据的动态特性,提高预测精度,避免过拟合和欠拟合,优化模型参数,从而提升模型的整体性能和可靠性。

# 使用AIC准则选择最优滞后阶数
best_aic = float("inf")
best_order = 0

for p in range(1, 11):  # 尝试1到10阶滞后
    model = sm.tsa.ARIMA(data['Y'], order=(p, 0, 0))
    results = model.fit()
    if results.aic < best_aic:
        best_aic = results.aic
        best_order = p

print(f'Best lag order: {best_order}')

6、模型拟合

        根据之前确定的最优滞后阶数 `best_order` 构建自回归模型,并使用普通最小二乘法(OLS)拟合模型。具体步骤包括:选择最优滞后阶数 `p`,生成包含滞后值的自变量矩阵 `X`,添加常数项,提取因变量 `y`,构建并拟合 OLS 模型,最后输出模型的汇总信息。

# 选择最优滞后阶数
p = best_order

# 构建并拟合自回归模型
X = data_with_lags[[f'Y_lag{i}' for i in range(1, p + 1)]]
X = sm.add_constant(X)
y = data_with_lags['Y']

model = sm.OLS(y, X)
results = model.fit()
print(results.summary())

7、模型诊断

        下列代码的作用是检查和诊断自回归模型的残差,确保模型的假设条件得到满足。具体步骤包括:提取模型残差,绘制残差的自相关图和偏自相关图以检查残差的自相关性,绘制残差的Q-Q图以检查残差的正态性。这些诊断步骤有助于验证模型的拟合效果和可靠性。

# 检查残差
residuals = results.resid

# 绘制残差的自相关图和偏自相关图
fig, ax = plt.subplots(1, 2, figsize=(12, 5))
sm.graphics.tsa.plot_acf(residuals, lags=20, ax=ax[0])
sm.graphics.tsa.plot_pacf(residuals, lags=20, ax=ax[1])
plt.show()

# 检查残差的正态性
import scipy.stats as stats

# 绘制残差的QQ图
stats.probplot(residuals, dist="norm", plot=plt)
plt.title("Q-Q Plot of Residuals")
plt.show()

8、模型应用

        下列代码用于预测时间序列未来的值。首先,它生成了从数据集最后一个时间点开始的未来10个时间点的日期范围,并创建了一个用于存放未来数据的DataFrame。接着,基于已有的滞后值,计算了未来数据的相应滞后值。然后,向未来数据的特征集中添加了常数项。最后,使用训练好的模型对未来的10个时间点进行了预测,并将预测结果与原始观测数据一起绘制成图,以便直观地比较和展示预测趋势。

# 预测未来10个时间点
future_dates = pd.date_range(start=data.index[-1], periods=11, closed='right', freq='D')
future_data = pd.DataFrame(index=future_dates, columns=data.columns)

# 生成未来数据的滞后值
for i in range(1, p + 1):
    future_data[f'Y_lag{i}'] = data_with_lags[f'Y_lag{i}'].iloc[-i:].append(pd.Series([np.nan] * (10 - i)))

future_data.dropna(inplace=True)

# 添加常数项
future_X = sm.add_constant(future_data[[f'Y_lag{i}' for i in range(1, p + 1)]])

# 进行预测
predictions = results.predict(future_X)

# 绘制预测结果
plt.figure(figsize=(12, 6))
plt.plot(data.index, data['Y'], label='Observed')
plt.plot(future_data.index, predictions, color='r', label='Forecast')
plt.legend()
plt.show()

9、结语

        本文通过构建和应用自回归模型(AR),能够有效地利用时间序列数据的过去值来预测其未来值。本文详细介绍了从生成滞后值、确保数据平稳性、选择最优滞后阶数,到模型拟合、诊断和预测的完整流程。通过这些步骤,我们不仅确保了模型的有效性和可靠性,还提高了预测的准确性和解释能力。希望本文的内容能为读者在时间序列分析和预测方面提供有价值的参考和实践指导。

标签:plt,Python,模型,lag,lags,滞后,data,回归
From: https://blog.csdn.net/m0_57916248/article/details/143503342

相关文章

  • Leetcode刷题Python之3222.求出硬币游戏的赢家
    提示:本题难度很低,可以一行代码解决。文章目录一、题目描述二、解题思路二、代码实现代码解释总结一、题目描述给你两个正整数x和y,分别表示价值为75和10的硬币的数目。Alice和Bob正在玩一个游戏。每一轮中,Alice先进行操作,Bob后操作。每次操作中,玩......
  • Python学习18天
    打印金字塔'''1*1层14个总层数-当前层数***2层33个*****3层52个*******4层71个*********......
  • Python学习的自我理解和想法(27)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第27天,学的内容是python操作pptx和pdf,但是这节博客只会介绍如何新建pptx和加密pdf。开学了,时间不多,写得不多,见谅。目录1.安装必要的库2.创建PPTX(1).创建幻灯片对象(2).选择母版添加一页(3).获取标题......
  • w~大模型~合集20
    我自己的原文哦~ https://blog.51cto.com/whaosoft/12456838#谷歌公布AI布局布线PCB和芯片Layout工程师要失业了?虽然近年来各大EDA公司都在积极的将AI引入到自己的芯片设计工具当中。但是早在2020年,谷歌就发布了题为《ChipPlacementwithDeepReinforcementLearning》预......
  • Python小游戏19——滑雪小游戏
    运行效果 python代码importpygameimportrandom #初始化Pygamepygame.init() #设置屏幕尺寸screen_width=800screen_height=600screen=pygame.display.set_mode((screen_width,screen_height))pygame.display.set_caption("滑雪小游戏") #定义......
  • Python小游戏20——超级玛丽
    首先,你需要确保你的Python环境中安装了pygame库。如果还没有安装,可以使用以下命令进行安装:bashpipinstallpygame运行效果展示  代码展示pythonimportpygameimportsys #初始化pygamepygame.init() #设置屏幕尺寸screen_width=800screen_height=......
  • Python小游戏21——拼图小游戏
     使用了Pygame库来创建图形界面。请确保你已经安装了Pygame库(可以使用pipinstallpygame来安装)。运行结果展示 代码展示pythonimportpygameimportsysimportrandom #初始化Pygamepygame.init() #设置屏幕尺寸screen_width,screen_height=600,600......
  • 基于大数据 Python短视频推荐系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 【征程 6 工具链性能分析与优化-2】模型性能优化建议
    01引言为了应对低、中、高阶智驾场景,以及当前AI模型在工业界的应用趋势,地平线推出了征程6系列芯片。在软硬件架构方面,征程6不仅保持了对传统CNN网络的高效支持能力,还强化了对Transformer类型网络的支持,主要表现为大幅强化了对逐点计算、数据搬运的能力。基于征程6......
  • 毕业设计:python高校舆情分析系统+可视化+情感分析 舆情分析+Flask框架(源码)✅
    毕业设计:python高校舆情分析系统+可视化+情感分析舆情分析+Flask框架(源码)✅1、项目介绍技术栈:Python语言、Flask框架、requests爬虫、snownlp情感分析、Echarts可视化、HTML2、项目界面(1)系统首页数据概况(2)敏感词统计分析(3)词云图分析(4)话题趋势分析(5)新闻词云图......