利用差分法优化非平稳时间序列
创作时间:
作者:
@小白创作中心
利用差分法优化非平稳时间序列
引用
1
来源
1.
https://www.atyun.com/65569.html
有些时间序列数据遵循明确的趋势或模式,这使得准确建模变得困难。大多数统计方法都假设数据是平稳的,即序列的平均水平和波动性随时间保持不变。但现实世界的数据很少如此配合。温度上升、经济增长、需求周期上下波动。如果不调整这些趋势,模型就会出现偏差。
解决这个问题的最简单方法之一是差分。我们不是使用原始值,而是将每个观测值减去它之前的那个观测值。这样可以消除趋势,使数据更加稳定。
观察差分的效果
为了说明这一点,考虑一个具有明显上升趋势的时间序列。它持续攀升,显然需要进行某种转换。第一步是一阶差分,即将每个值减去它之前的那个值。这将线性趋势拉平,形成一个更稳定的序列。如果趋势更复杂——是弯曲的而不是直线的——那么一次差分就不够了。可能需要对一次差分后的序列再次应用相同的操作,即进行二次差分。
继续这个过程,最终数据将不再呈现趋势,而是在一个恒定水平附近波动。这时你就知道已经达到了平稳序列。
需要多少次差分?
差分的步数取决于原始趋势的形状。
- 稳定的线性趋势需要一次差分。
- 弯曲的二次趋势需要两次差分。
- 更复杂的趋势可能需要三次或更多次差分。
一旦序列变得平稳,你就可以应用诸如ARIMA等统计模型。这些模型在处理趋势数据时效果不佳,但处理平稳序列则完全没问题。
一个现实世界的例子:全球温度异常
让我们将差分应用于一个真实的数据——1880年至2020年的全球地表温度异常。这个数据集由美国宇航局戈达德太空研究所收集,测量的是地球温度偏离历史基线的程度。
步骤:
- 绘制原始数据图——原始时间序列显示出一个明显的变暖趋势。
- 应用一次差分——这可以消除线性趋势,但可能仍保留一些结构。
- 应用二次差分——如果需要,这可以消除任何剩余的模式,留下一个平稳序列。
import pandas as pd
import matplotlib.pyplot as plt
# Load the dataset
url = 'https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv'
# Read the dataset and skip the first row to ensure correct formatting
df = pd.read_csv(url, skiprows=1)
# Rename columns for convenience
df.rename(columns={'Year': 'Year', 'J-D': 'Temperature Anomaly'}, inplace=True)
# Convert temperature anomaly column to numeric, forcing errors to NaN
df['Temperature Anomaly'] = pd.to_numeric(df['Temperature Anomaly'], errors='coerce')
# Drop rows with missing values
df.dropna(inplace=True)
# Ensure the Year column is also numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
# First differencing
df['First Difference'] = df['Temperature Anomaly'].diff()
# Second differencing
df['Second Difference'] = df['First Difference'].diff()
# Create figure and subplots
fig, axes = plt.subplots(3, 1, figsize=(10, 12), sharex=True)
# Original time series
axes[0].plot(df['Year'], df['Temperature Anomaly'], color='black')
axes[0].set_title('Global Surface Temperature Anomalies (1880-2020)', fontsize=12)
axes[0].set_ylabel('Temperature Anomaly (°C)', fontsize=10)
# First differencing plot
axes[1].plot(df['Year'], df['First Difference'], color='black')
axes[1].set_title('First Difference of Global Temperature Anomalies', fontsize=12)
axes[1].set_ylabel('First Difference (°C)', fontsize=10)
# Second differencing plot
axes[2].plot(df['Year'], df['Second Difference'], color='black')
axes[2].set_title('Second Difference of Global Temperature Anomalies', fontsize=12)
axes[2].set_xlabel('Year', fontsize=10)
axes[2].set_ylabel('Second Difference (°C)', fontsize=10)
for ax in axes:
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.grid(False)
plt.tight_layout()
plt.savefig("global_temp_anomalies_analysis.png")
plt.show()
- 原始序列——温度异常显示出明显的趋势。
- 一次差分——上升趋势减弱,但模式仍然存在。
- 二次差分——序列在稳定的均值附近波动,意味着现在已是平稳序列。
总结
差分是使时间序列平稳的最简单方法之一。它能消除趋势,稳定均值,并让统计模型发挥作用。差分后,一定要检查数据,确保没有过度差分——如果序列看起来像随机噪声,那可能就是差分过度了。
热门推荐
三匹空调抽真空多长时间?不同类型空调抽真空时间详解
古代盖房子,用的哪些建筑材料?
专家解读:手机App真的在“偷听”吗?
实验室PH计校准,细节决定精准度
STM32F407单片机编程入门(三)ADC详解及实战含源码
电动自行车“上楼”为何屡禁不止?如何解决?
今日水素:菠菜含铁量是不是最高?
政治学专业就业方向有哪些 未来发展前景如何
PC/PBT合金材料:性能、应用与发展趋势
当一群山区留守儿童,决定办毕业晚会
皮肤上长了一个包是咋回事?
Excel表怎么做价格对比
6档好看的恋爱综艺,《心动的信号》火了7年,还有分手情侣又恋爱
北斗短报文终端在航海上的应用展望
牙周病治疗的四个阶段:基础治疗+手术治疗+修复治疗+维护期
提高项目成功率:如何有效收集初期需求?
深入探讨凯恩斯主义极端的经济影响与理论解析
遗嘱和继承哪个比较便宜?房产遗嘱相关问题详解
三极管的基本原理与应用:电子元件的幕后英雄解析
红鸾星在交友宫代表什么
8种蛋黄酱的配方及加工工艺
覃在什么情况下读tan?‘覃’字的读音与用法
如何看股市的量比?这种量比分析有什么意义?
通便的穴位有哪些?专业医生详解三大穴位功效
2024年房价会继续走低吗?曹德旺的预言与背后的市场现象
“趣海潮玩”,特色游聚起高人气!今年以来曹妃甸区文旅市场持续走热
大货车折旧应如何计算?计算时需考虑哪些因素?
利润与情绪:浅析陕西煤业股价波动的深层因素
锂离子聚合物电池的优缺点:从技术原理到应用前景
《极限国度》游戏全版本区别一览(解析不同版本的《极限国度》游戏)