Python统计实战:时间序列分析之一元线性回归预测和指数曲线预测

news2024/11/17 5:41:45

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。

(以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。


练习题

下表是某只股票连续35个交易日的收盘价格(前3行和后3行)。

(1)分别采用m=5和m=10对收盘价格进行平滑,并绘制实际值和平滑值的图形进行比较。

(2)分别采用以下方法进行预测,并绘制预测图和残差图,对结果进行比较。

        (a)简单指数平滑和Holt指数平滑;
        (b)一元线性回归和指数曲线;
        (c)二阶曲线和三阶曲线。


图形绘制与分析

本文就(2b)题展开分析。

(2b)收盘价的一元线性回归预测

线性趋势(linear trend)是时间序列按一个固定的常数(不变的斜率)增长或下降。时间序列为线性趋势时,除了可以用Holt指数平滑模型进行预测外,还可以使用一元线性回归模型进行预测。

建立一元线性回归模型

import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('exercise11_1.csv')

#拟合一元线性回归模型(l_model)
l_model = ols('收盘价 ~ 时间', data = df).fit()
print(l_model.summary()) # 输出模型结果

由以上结果得到一元线性回归方程为:Yt=34.0158+(-0.0559)t。决定系数R2=61.3%,F检验的P=2.77e-08,表示模型显著。b1=-0.0559 ,表示时间每变动一期,收盘价平均变动-0.0559。

绘制预测图和残差图

# 绘制预测图和残差图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('exercise11_1.csv')
#拟合一元线性回归模型(l_model)
l_model = ols('收盘价 ~ 时间', data = df).fit()
df_pre = pd.DataFrame({'时间':df['时间'], '收盘价':df['收盘价'], '预测值':l_model.fittedvalues, '预测残差':l_model.resid})

# 图(a)预测图
plt.subplots(1, 2, figsize = (11, 4))
plt.subplot(121)
l1 = plt.plot(df_pre['收盘价'], marker = 'o')
l2 = plt.plot(df_pre['预测值'], marker = '*', linewidth = 1, markersize = 8, ls = '-.')
plt.axvline(34, ls = '--', c = 'grey', linewidth = 1)
plt.xticks(range(0, 35, 2), df_pre['时间'][::2])
plt.xlabel('时间', size = 12)
plt.ylabel('收盘价', size = 12)
plt.legend(['收盘价', '预测值'], prop = {'size':11})
plt.title('(a)收盘价的一元线性回归预测', size = 13)

# 图(b)残差图
plt.subplot(122)
res = l_model.resid # 计算残差
plt.scatter(range(len(res)), res, marker = 'o', linewidth = 1)
plt.hlines(0, 0, 35, linestyle = '--', color = 'red', linewidth = 1)
plt.xlabel('时间', size = 12)
plt.xticks(range(0, 35, 2), df_pre['时间'][::2])
plt.ylabel('残差', size = 12)
plt.title('(b)一元线性回归预测残差', size = 13)

plt.tight_layout()

左图展示了收盘价的实际值和预测值,拟合结果并不理想。右图显示,残差围绕0轴分布,但呈现出了有规律的分布,表明所选的模型是不合适的。

(2b)收盘价的指数曲线预测

指数曲线(exponential curve)用于描述以几何级数递增或递减的现象,即时间序列的观测值Yt按指数规律变化,或者说逐期观测值按一定的增长率增长或衰减。

建立指数曲线模型

import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('exercise11_1.csv')

# 拟合指数曲线模型(e_model)
e_model = ols('np.log(收盘价) ~ 时间', data = df).fit()
print(e_model.summary()) # 输出模型结果

由以上结果得到指数曲线的方程为:Yt=3.5269exp(-0.0017t)。决定系数R2=60.9%,F检验的P=3.18e-08,表示模型显著。b1=-0.0017 ,表示时间每变动一期,收盘价平均变动-0.0017。

绘制预测图和残差图

# 绘制预测图和残差图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('exercise11_1.csv')
# 拟合指数曲线模型(e_model)
e_model = ols('np.log(收盘价) ~ 时间', data = df).fit()
df_pre = pd.DataFrame({'时间':df['时间'], '收盘价':df['收盘价'], '预测值':np.exp(e_model.fittedvalues)})
# df_pre = df_pre.astype({'时间':int})

# 图(a)预测图
plt.subplots(1, 2, figsize = (11, 4))
plt.subplot(121)
l1 = plt.plot(df_pre['收盘价'], marker = 'o')
l2 = plt.plot(df_pre['预测值'], marker = '*', linewidth = 1, markersize = 8, ls = '-.')
plt.axvline(34, ls = '--', c = 'grey', linewidth = 1)
plt.xticks(range(0, 35, 2), df_pre['时间'][::2])
plt.xlabel('时间', size = 12)
plt.ylabel('收盘价', size = 12)
plt.legend(['收盘价', '预测值'], prop = {'size':11})
plt.title('(a)收盘价的指数曲线预测', size = 13)

# 图(b)残差图
plt.subplot(122)
df_pre['残差'] = df_pre['收盘价'] - df_pre['预测值'] # 计算残差
plt.scatter(range(len(df_pre['残差'])), df_pre['残差'], marker = 'o', linewidth = 1)
plt.hlines(0, 0, 35, linestyle = '--', color = 'red', linewidth = 1)
plt.xlabel('时间', size = 12)
plt.xticks(range(0, 35, 2), df_pre['时间'][::2])
plt.ylabel('残差', size = 12)
plt.title('(b)指数曲线预测残差', size = 13)

plt.tight_layout()

左图展示了收盘价的实际值和预测值,拟合结果不理想。右图显示,残差围绕0轴分布,但呈现出了有规律的分布,表明所选的模型也是不合适的。


都读到这里了,不妨关注、点赞一下吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1900762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity入门之重要组件和API(3) : Transform

前言 Transform类主要处理游戏对象(GameObject)的位移、旋转、缩放、父子关系和坐标转换。 1.位置和位移 1.1必备知识点:Vector3 Vector3 主要用来表示三维坐标系中的一个点或者一个向量。 【声明】 Vector3 v1 new Vector3(); Vector3 v2 new Vector3(10, 10…

Redis---9---集群(cluster)

将新增的6387节点(空槽号)作为master节点加入原集群 Redis—9—集群(cluster) 是什么 定义 ​ 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复…

uniapp 在手机上导出excel

1.创建excelDev.js文件 export default {exportExcel(fileData, documentName excel) {plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {let rootObj fs.rootlet fullPath rootObj.fullPathconsole.log("开始导出数据")// 创建文件夹rootObj…

基于海思Hi3403V100方案开发双目1600万拼接相机测试截图

海思Hi3403V100平台SOC内置四核A55,提供高效且丰富和灵活的CPU资源,以满足客户计算和控制需求,并且集成单核MCU,已满足一些低延时要求较高场景。 多目相机PE108CB板是针对该芯片设计的一款多目凭借相机PCBA,硬件接口支…

微米级触觉感知的紧凑视触觉机器人皮肤

视触觉皮肤(VTS)分为涂层型、标记型和热致变色型。涂层的耐磨性和空间分辨率是涂层型VTS的核心问题。近期,北京邮电大学方斌教授联合中国地质大学(北京)杨义勇教授,在传感器领域Q1期刊IEEE Sensors Journal…

【Java学习笔记】方法的使用

【Java学习笔记】方法的使用 一、一个例子二、方法的概念及使用(一)什么是方法(二)方法的定义(三)方法调用的执行过程(四)实参和形参的关系(重要)&#xff08…

Python排序,你用对了吗?一文教你sorted和sort的正确姿势!

目录 1、sorted基础用法 🍏 1.1 列表排序入门 1.2 自定义排序规则 1.3 排序稳定性和key函数 2、sort内置方法操作 🔍 2.1 直接修改原列表 2.2 sort高级技巧与性能考量 2.3 案例:数据预处理实战 2.4 高级用法:reverse与cmp_to_key 3、应对复杂数据结构 🌐 3.1…

【学习笔记】操作系统--万字长文

计算机操作系统 文章目录 计算机操作系统引言 操作系统基本概念第一章 引论目标和作用操作系统发展历程单道批处理系统多道批处理系统分时系统实时系统 基本特征并发共享虚拟异步性(不确定性) 操作系统主要功能处理机管理内存管理设备管理文件管理 第二章…

平价蓝牙耳机推荐有哪些?四大超值平价蓝牙耳机品牌盘点

市面上的蓝牙耳机品牌繁多,价格差异巨大,对于预算有限但又不想牺牲音质和使用体验的消费者来说,寻找到既平价又性能出色的蓝牙耳机无疑是一项挑战,那么在平价蓝牙耳机推荐有哪些?面对这个疑问,作为真无线蓝…

C # @逐字字符串

逐字字符串 代码 namespace TestAppConsole {class program{static void Main(string[] args){int a 0;int b 9;string c "2ui923i9023";//Console.Write(sizeof(int));string d "\t8282jjksk";string e "\t8282jjksk";Console.WriteLine(…

塔子哥的收藏夹-美团2023笔试(codefun2000)

题目链接 塔子哥的收藏夹-美团2023笔试&#xff08;codefun2000&#xff09; 题目内容 输入描述 输出描述 样例1 输入 4 7 1 0 1 0 1 0 1 1 1 1 3 1 4 1 3 2 3 5 3 100 3 输出 0 2 7 7 提示 操作记录为 0 0 0 0(初始) 询问[1,3]结果为000> 2 0 0 0<1号更改为2> <…

独家揭秘!格行随身WiFi‘骄傲’宣言背后的震撼行业的真相!随身WiFi行业内黑马

近几年以来&#xff0c;随行WiFi产品呈现爆发式增长&#xff0c;随行WiFi的火爆&#xff0c;是技术进步带给消费者的一种“福利”&#xff0c;各大直播间也充斥着品牌各异的随身WiFi。但真正脱颖而出、赢得消费者信赖的优质品牌却凤毛麟角。而其中最受欢迎的格行随身WiFi也因设…

【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’ 一、分析问题背景 在Python编程中&#xff0c;FileNotFoundError是一个常见的异常&…

[CP_AUTOSAR]_分层软件架构_内容详解

目录 1、软件分层内容1.1、Microcontroller Abstraction Layer1.2、ECU Abstraction Layer1.2.1、I/O HW Abstraction1.2.2、Communication Hardware Abstraction1.2.3、Memory Hardware Abstraction1.2.4、Onboard Device Abstraction1.2.5、Crypto Hardware Abstraction 1.3、…

基于机器学习(霍特林统计量,高斯混合模型,支持向量机)的工业数据异常检测(MATLAB R2021B)

近年来&#xff0c;隨着集散控制系统、工业物联网、智能仪表等信息技术在现代工业生产系统中的应用&#xff0c;生产过程的运行状态能够以大量数据的形式被感知和记录。基于数据的故障诊断方法以过程数据为基础&#xff0c;采用统计分析、统计学习、信号处理等方法&#xff0c;…

100+大屏模板,基于Vue 国产开源 IoT 物联网 Web 组态可视化 BI 数据分析工具

项目源码&#xff0c;文末联系小编 01 DataEase 可视化大屏 DataEase 是一个国产开源的数据可视化分析工具(BI工具)&#xff0c;旨在帮助用户快速分析数据并洞察业务趋势&#xff0c;以实现业务的改进与优化。它支持丰富的数据源连接&#xff0c;包括OLTP和OLAP数据库、数据仓库…

【Python文件】操作终极指南:高效管理和处理文件系统的必备技能

目录 ​编辑 1. 文件的基础操作 1.1 打开/关闭文件 ​编辑 示例代码 文件对象 使用with语句打开文件 2. 读文件 2.1 使用read方法读取文件 2.2 使用readline方法读取文件 2.3 使用readlines方法读取文件 2.4 使用for循环读取文件 3. 写文件 3.1 使用write方法写文…

蓝桥杯web组国三选手题纲解析和备赛技巧--经验分享

蓝桥杯web组赛题解析和杯赛技巧 **&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&am…

论文辅导 | 基于多尺度分解的LSTM⁃ARIMA锂电池寿命预测

辅导文章 模型描述 锂电池剩余使用寿命&#xff08;Remaining useful life&#xff0c;RUL&#xff09;预测是锂电池研究的一个重要方向&#xff0c;通过对RUL的准确预测&#xff0c;可以更好地管理和维护电池&#xff0c;延长电池使用寿命。为了能够准确预测锂电池的RUL&…

华为仓颉可以取代 Java 吗?

大家好&#xff0c;我是君哥。 在最近的华为开发者大会上&#xff0c;华为亮相了仓颉编程语言&#xff0c;这是华为历经 5 年&#xff0c;投入大量研发成本沉淀的一门编程语言。 1 仓颉简介 按照官方报告&#xff0c;仓颉编程语言是一款面向全场景智能的新一代编程语言&#…