时序分析中的去趋势化方法

news2025/1/17 1:38:04

时序分析中的去趋势化方法

时序分析是研究随时间变化的数据模式的一门学科。在时序数据中,趋势是一种随着时间推移而呈现的长期变化趋势,去趋势化是为了消除或减弱这种趋势,使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法,并通过代码演示每种方法的应用。

1. 引言

时序分析在金融、经济学、气象学等领域中广泛应用,而去趋势化是时序分析的一个重要步骤。通过去趋势化,我们可以更好地理解和分析时间序列中的周期性、季节性和随机波动。以下是一些常见的去趋势化方法。

2. 去趋势化方法

创建示例时间序列数据

#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from statsmodels.tsa.seasonal import STL

# 创建示例时间序列数据
np.random.seed(42)

# 生成日期范围
date_rng = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')

# 生成随机的趋势成分
trend_component = 0.1 * np.arange(len(date_rng))

# 生成季节性成分
seasonal_component = 5 * np.sin(2 * np.pi * np.arange(len(date_rng)) / 365 * 7)

# 生成随机噪声
noise = np.random.normal(0, 1, len(date_rng))

# 创建原始时间序列数据
original_series = trend_component + seasonal_component + noise

# 绘制原始时间序列图
plt.figure(figsize=(12, 6))
plt.plot(date_rng, original_series, label='Original Series')
plt.title('Original Time Series Data')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.show()

在这里插入图片描述

2.1 最优拟合线

最优拟合线是通过线性回归模型拟合得到的最能代表时间序列趋势的直线。对于简单的趋势,我们可以使用线性回归模型,对于更复杂的趋势,甚至可以使用多项式回归模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 创建示例时间序列数据
# ...

# 方法1:减去最优拟合线
X = np.arange(len(original_series)).reshape(-1, 1)
model = LinearRegression().fit(X, original_series)
trend_component = model.predict(X)
detrended_series_1 = original_series - trend_component

2.2 时间序列分解

时间序列分解是将时间序列分解为趋势、季节和残差三个部分的过程。这可以通过STL(Seasonal and Trend decomposition using Loess)等方法实现。

from statsmodels.tsa.seasonal import STL

# 创建示例时间序列数据
# ...

# 方法2:从时间序列分解中减去趋势成分
stl_result = STL(original_series, seasonal=13).fit()
detrended_series_2 = stl_result.resid

2.3 减去均值

一种简单而直观的方法是减去时间序列的均值,使得数据更平稳。

# 方法3:减去均值
detrended_series_3 = original_series - original_series.mean()

2.4 Baxter-King和Hodrick-Prescott过滤器

这两种过滤器可以用于去除时间序列中的移动平均趋势线或循环成分。

from statsmodels.tsa.filters import bkfilter, hpfilter

# 创建示例时间序列数据
# ...

# 方法4:Baxter-King过滤器
detrended_series_4 = bkfilter.bkfilter(original_series, low=6, high=32, K=12)

3. 示例和比较

接下来,将展示每种方法的应用,并比较它们在去趋势化方面的效果。

# 可视化去趋势化结果
plt.figure(figsize=(12, 8))

plt.subplot(2, 3, 1)
plt.plot(original_series, label='Original Series')
plt.title('Original Time Series')

plt.subplot(2, 3, 2)
plt.plot(detrended_series_1, label='Detrended Series (Method 1)')
plt.title('Detrended Series - Method 1')

plt.subplot(2, 3, 3)
plt.plot(detrended_series_2, label='Detrended Series (Method 2)')
plt.title('Detrended Series - Method 2')

plt.subplot(2, 3, 4)
plt.plot(detrended_series_3, label='Detrended Series (Method 3)')
plt.title('Detrended Series - Method 3')

plt.subplot(2, 3, 5)
plt.plot(detrended_series_4, label='Detrended Series (Method 4)')
plt.title('Detrended Series - Method 4')

plt.tight_layout()
plt.show()

通过上述可视化,我们可以比较不同去趋势化方法的效果。每个子图展示了原始时间序列和经过不同方法去趋势化后的结果。

4. 总结

本文介绍了时序分析中常用的四种去趋势化方法,包括减去最优拟合线、时间序列分解、减去均值以及Baxter-King和Hodrick-Prescott过滤器。
减去最优拟合线: 这种方法通过线性回归或多项式回归模型找到数据的最佳拟合线,并从原始时间序列中减去该线。优点是简单易用,适用于线性趋势。缺点是对于非线性趋势的拟合效果较差。
时间序列分解: 使用STL等方法将时间序列分解为趋势、季节和残差三个部分。这样可以更灵活地处理不同类型的趋势和季节性。然而,分解过程可能对噪声敏感。
减去均值: 简单地减去时间序列的均值,使得数据更平稳。这是一种简单直观的方法,适用于一些简单的场景,但无法处理复杂的趋势。
Baxter-King和Hodrick-Prescott过滤器: 这两种过滤器可用于去除时间序列中的移动平均趋势线或循环成分。它们在一定程度上平滑数据,但需要调整参数以适应不同的数据特性。
在选择去趋势化方法时,需要根据数据的实际情况和趋势类型进行选择。对于线性趋势,减去最优拟合线可能是一个不错的选择;对于复杂趋势和季节性,时间序列分解方法更具优势;而简单的场景下,减去均值可能足够。最终的选择取决于数据的特点和分析的目的。

综上所述,不同的去趋势化方法各有优劣,理解这些方法的特点,根据实际情况选择合适的方法,将有助于更好地进行时序数据分析。

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

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

相关文章

java自定义异常处理操作

目录 引入 介绍 一、为我们的方法创建异常类 二、使用我们定义的异常类 引入 我们在编写java代码的时候,想要在我们自己写的方法中加入我们的异常处理 介绍 一、为我们的方法创建异常类 我们先单独创建一个类,来当作我们抛出异常的类 public class AgeIllegalException ex…

JavaScript DOM属性和方法之element元素对象

在HTML DOM中,elment对象表示HTML与纳素,可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法,有很多都是我们之前用过的。 一、element对象属性 1、attributes 2、childNodes 3、className 4、clientWidth、of…

计算机中丢失mfc100u.dll怎么解决,详细解析mfc100u.dll丢失的解决方法

遭遇“无法找到mfc100u.dll”的错误不必过分担忧,这是一个普遍现象。许多用户在启动某些软件或游戏的时候可能会碰到这样的情况。通常,这个错误信息表明你的计算机系统中缺失了一个关键的动态链接库(DLL)文件,它可能会妨碍应用程序的顺利启动…

Centos7 升级Docker 至最新版本

卸载旧版本的Docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker的yum源 #yu…

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果: 这个是当点着按钮的时候没有松开按钮的效果(没有阴影) 这个是当松开按钮的效果(有阴影) 原理讲解: 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说,它通…

Qt WebEngine模块使用(开发环境安装和程序开发)

一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎,可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML,XHTML和SVG文档的C 类和QML类型&#xff…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目,是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目,基于archetype可以创建多种类型的java项目;Maven仓库…

带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)

文章目录 查看源码是否编译时有-g调试信息和符号表在 gdb 中加载 debug 文件/符号表将 debug 文件放入 ".debug" 文件夹通过 gdb 命令 set debug-file-directory directories GCC的gcc和g区别指定gcc/g,glibc的版本进行编译指定gcc/g的版本指定glibc的和l…

最新计算机软件毕业设计选题大全

最新计算机软件毕业设计选题大全 1、毕业设计选题 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小…

ppt背景图片怎么设置?让你的演示更加出彩!

PowerPoint是一款广泛应用于演示文稿制作的软件,而背景图片是演示文稿中不可或缺的一部分。一个好的背景图片能够提升演示文稿的整体效果,使观众更加关注你的演示内容。可是ppt背景图片怎么设置呢?本文将介绍ppt背景图片设置的三个方法&#…

JavaScript DOM属性和方法之event事件对象

event对象代表事件的状态,比如事件在其中发生的元素,键盘按键的状态、鼠标的位置、鼠标按钮的状态,事件通常与函数结合使用,函数不会在事件发生前被执行,只有当事件被触发的时候才会执行函数。 一、句柄事件 1、oncl…

免费且安全的SSL证书:JoySSL为您的网站安全保驾护航

在当今这个数字化飞速发展的时代,网络安全问题日益凸显,特别是对于网站所有者而言,如何保障用户数据的安全传输显得尤为重要。SSL(安全套接层)证书作为一种有效的加密工具,被广泛应用于各类网站中。那么&am…

【计算机网络】深入掌握计算机网络的核心要点

写在前面 前言四层模型网络地址管理Linux下设置ipARP请求包总结 前言 计算机网络是指将分散的计算机设备通过通信线路连接起来,形成一个统一的网络。为了使得各个计算机之间能够相互通信,需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133,总分400,如愿考上梦中上海交通大学,通过自己将近一年的复习,实现了人生中目前为止最大的逆袭(自己本科学校很普通),总结自己的复习经历,希望可以给…

解决 Git:ssh: connect to host github.com port 22: Connection timed out 问题的三种方案

1、问题描述: 其一、整体提示为: ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 中文为: ssh:连接到主机 github.com 端口 22:连接超时 fatal&a…

【C++】对外接口封装以及导出动态链接库DLL

VS 使用C编写对外接口并封装成DLL 一、接口的封装二、VS设置三、查看生成的DLL接口 一、接口的封装 首先创建头文件,包含我们所依赖的库的头文件名称,并且申明我们要对外封装的接口名称,示例: 头文件: #pragma once …

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求:为了实现在linux上模拟服务器跑代码,并存储在mysql上,通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

常量和C预处理器

本文参考C Primer Plus第四章 文章目录 符号常量printf()函数和scanf()函数 printf()函数使用printf()printf()的转换说明修饰符 1.符号常量 C头文件limits.h和float.h分别提供了与整数类型和浮点类型大小限制相关的详细信息。头文件都定义了一系列供实现使用的符号常量。例如&…

可解释性人工智能(XAI)概述

文章目录 每日一句正能量前言可解释性人工智能(XAI)定义研究的作用应用领域XAI的目标后记 每日一句正能量 一个人若想拥有聪明才智,便需要不断地学习积累。 前言 人工智能(AI)的发展速度迅猛,并在许多领域…

C++:类 的简单介绍(一)

目录 类的引用: 类的定义: 类的两种定义方式: 成员变量命名规则的建议: 类的访问限定符及封装: 访问限定符 【访问限定符说明】 封装 class与struct的区别: 类的作用域: 类的实例化…