Python统计实战:时间序列分析之二阶曲线预测和三阶曲线预测

news2025/4/7 18:25:01

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

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


练习题

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

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

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

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


图形绘制与分析

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

(2c)收盘价的二阶和三阶曲线预测

有些现象的变化形态比较复杂,它们不是按照某种固定的形态变化,而是有升有降,在变化过程中可能有几个拐点,这时就需要拟合多项式函数。当只有一个拐点时,可以拟合二阶曲线,即抛物线;当有两个拐点时,需要拟合三阶曲线;当有k一1个拐点时,需要拟合k阶曲线。

建立二阶曲线模型和三阶曲线模型

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

# 拟合二阶曲线模型(model2)和三阶曲线模型(model3)
df['t'] = df['时间']-1
model2 = ols('收盘价 ~ t + pow(t, 2)', data = df).fit()  # 拟合二阶曲线
model3 = ols('收盘价 ~ t + pow(t, 2) + pow(t, 3)', data = df).fit() # 拟合三阶曲线

# 计算二阶曲线和三阶曲线的预测值和残差
df_pre = pd.DataFrame({'时间':df['时间'], '收盘价':df['收盘价'], 
                      '二阶曲线预测值':model2.fittedvalues, '二阶曲线残差':model2.resid,
                      '三阶曲线预测值':model3.fittedvalues, '三阶曲线残差':model3.resid})
df_pre.loc[35, '时间'] = 36
df_pre = df_pre.astype({'时间':int})
df_pre.loc[35, '二阶曲线预测值'] = model2.predict(exog = dict(t = 36)).values
df_pre.loc[35, '三阶曲线预测值'] = model3.predict(exog = dict(t = 36)).values
round(df_pre,2)

显示前16行结果

绘制实际值和预测值曲线

# 实际值和预测值曲线
# 图(a)预测图
plt.subplots(1, 2, figsize = (11, 4))
plt.subplot(121)
l1 = plt.plot(df_pre['收盘价'], marker = 'o', linewidth = 1)
l2 = plt.plot(df_pre['二阶曲线预测值'], marker = '+', ls = '-', linewidth = 1)
l3 = plt.plot(df_pre['三阶曲线预测值'], marker = '*', ls = '-.', linewidth = 1)

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)
plt.scatter(range(len(df_pre['二阶曲线预测值'])), df_pre['二阶曲线残差'], marker = '+')
plt.scatter(range(len(df_pre['二阶曲线预测值'])), df_pre['三阶曲线残差'], marker = '*', linewidth = 1)
plt.hlines(0, 0, 35, linestyle = '--', color = 'red', 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('(b)二阶曲线和三阶曲线预测残差', size = 13)
plt.tight_layout()

左图展示了收盘价的实际值和二阶和三阶曲线的拟合值。从图形上看,三阶曲线拟合效果较少。右图显示,二阶曲线的预测残差和三阶曲线的预测残差总体上看没有明显的固定模式。同时,三阶曲线的预测残差较二阶曲线残差小一些,说明三阶曲线预测更加合理。


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

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

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

相关文章

Leetcode - 周赛404

目录 一,3200. 三角形的最大高度 二,3201. 找出有效子序列的最大长度 I 三,3202. 找出有效子序列的最大长度 II 四,3203. 合并两棵树后的最小直径 一,3200. 三角形的最大高度 本题直接模拟,分别计算一下…

KVM使用命令行添加新磁盘(注:支持热插拔)

1、使用qemu-img创建格式为qcow2的磁盘 [rootkvm ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/test-disk.qcow2 15G 2、显示虚拟机硬盘列表,查看未使用的target [rootkvm ~]# virsh domblklist kvm-client 3、添加硬盘到kvm-client虚拟机中 [rootkvm…

Matlab2023a保姆级安装教程,附下载安装包资料

安装包放在前面! 「MATLAB安装包 获取链接:https://pan.quark.cn/s/d8abf7394b3e 温馨提示:路径中不要有中文!! 1、下载全部的安装包,然后解压得到安装文件 2、解压之后可以看到包含Matlab R2023a安装光驱文件及Cr…

【Linux进阶】文件系统5——ext2文件系统(inode)

1.再谈inode (1) 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个…

低负载高效率(轻载高效)的BUCK是如何实现的?

-----本文简介----- 主要内容包括: 轻载高效BUCK是何原理? ----- 正文 ----- 先赞↓后看,养成习惯! 一、 DC-DC的控制模式与效率 1. PWM模式 如下图是PWM控制模式的DC-DC,PWM(Pulse Width Modulation)&#x…

昇思25天学习打卡营第11天|MindSpore 助力下的 GPT2:数据集加载处理及模型全攻略

目录 环境配置 数据集下载和获取 数据集拆分 处理数据集 模型构建 ​​​​​​​模型训练 ​​​​​​​模型推理 环境配置 “%%capture captured_output”这一行指令通常旨在捕获后续整个代码块所产生的输出结果。首先,将已预装的 mindspore 库予以卸载。随后&a…

奇迹MU 骷髅战士在哪

BOSS分布图介绍 我为大家带来各地区怪物分布图。在游戏前期,很多玩家可能会不知道该去哪里寻找怪物,也不知道哪些怪物值得打。如果选择了太强的怪物,弱小的玩家可能会无法抵御攻击。如果选择了低等级的boss,收益可能并不理想。所…

创建一个不带框架的javaweb工程

点击新建 选择Maven,然后在Archetype里面选择 webapp选项(注意这里需要配置好Maven的环境 如果没配好Maven引入依赖的时候会引不进来) 如果Maven配置之后就会显示配置成功 然后我们要配置tomacat的依赖 jde选择默认 然后点击部署 选择工件&a…

Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友......

Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的 方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2周少了2个朋友,剩下的朋友数量 翻倍。一般而言,第N周少了N个朋友,剩下的朋友数量翻倍…

适合宠物饮水机的光电传感器有哪些

如今,随着越来越多的人选择养宠物,宠物饮水机作为一种便捷的饮水解决方案日益受到欢迎。为了确保宠物随时能够获得足够的水源,宠物饮水机通常配备了先进的光电液位传感器技术。 光电液位传感器在宠物饮水机中起着关键作用,主要用…

Flutter-实现双向PK进度条

如何实现一个双向PK进度条 在Flutter应用中,进度条是一个非常常见的组件。而双向PK进度条则能够展示两个对立的数值,如对战中的双方得分对比等。本文将介绍如何实现一个具有双向PK效果的进度条,并支持竖直和斜角两种过渡效果。 1. 需求 我…

UDP协议:独特之处及其在网络通信中的应用

在网络通信领域,UDP(用户数据报协议,User Datagram Protocol)是一种广泛使用的传输层协议。与TCP(传输控制协议,Transmission Control Protocol)相比,UDP具有其独特的特点和适用场景…

ESP32——物联网小项目汇总

商品级ESP32智能手表 [文章链接] 用ESP32,做了个siri?!开源了! [文章链接]

2024年6月后2周重要的大语言模型论文总结:LLM进展、微调、推理和对齐

本文总结了2024年6月后两周发表的一些最重要的大语言模型论文。这些论文涵盖了塑造下一代语言模型的各种主题,从模型优化和缩放到推理、基准测试和增强性能。 LLM进展与基准 1、 BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Com…

数字化精益生产系统--APS 排程管理系统

APS(Advanced Planning and Scheduling)排程管理系统,即高级生产计划与排程系统,是一种高度智能化的计划和排程系统。它通过整合各种生产和供应链数据,运用先进的算法和数据模型,根据各种约束条件&#xff…

Vue-Router4.0 报“Cannot read property ‘forEach‘ of undefined”

Vue-Router4.0在创建路由时 报“Cannot read property ‘forEach‘ of undefined” 解决办法 将路由规则名称更改为routes,否则报错 import { createWebHashHistory, createRouter } from vue-router; // 创建路由规定 const routes [{path: /login,name: login,co…

部署LVS+keepalived做网站的高可用,高负载。

LVSkeepalived keepalived背景 针对LVS的辅助工具,主要提供故障切换与健康检查。 工作场景:作为调度器的双机热备,以及节点服务器的健康检查以及故障切换(删除条目)。 借鉴了VRRP协议来实现高可用。 keepalived部署…

商贸物流大脑:大模型+数据要素赋能智慧物流数据平台

项目背景与意义 物流行业快速发展,数据量急剧增加,随着电子商务、智能制造等领域的快速发展,物流行业面领着前所未有的挑战和机遇,如效率低下、资源配置不均、信息不透明等问题。随着全球化和电子商务的快速发展,数据…

MAX98357、MAX98357A、MAX98357B小巧、低成本、PCM D类IIS放大器,具有AB类性能中文说明规格书

前言: MAX98357A支持标准I2S数据,MAX98357B支持左对齐数字音频数据。两个版本均支持8通道TDM音频数据。 IIS数字功放MAX98357开发板/评估系统 MAX98357 WLP-9(1.347x1.437mm)封装的外观和丝印AKM MAX98357 TQFN-16-EP(3x3mm)封装的外观和丝印AKK 引脚说…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(7)

Hi~ (o^^o)♪, 各位深海王国的同志们,早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块,帮你一周内快速学会语音模块的使用方式,打造一个可用于智能家居、物联网领域的语音助…