从0开始学习R语言--Day10--时间序列分析数据

在数据分析中,我们经常会看到带有时间属性的数据,比如股价波动,各种商品销售数据,网站的网络用户活跃度等。一般来说,根据需求我们会分为两种,分析历史数据的特点和预测未来时间段的数据。

移动平均

移动平均的原理是用几天的数据作为一个窗口,根据权重乘以值得出预测该天的数据。我们以分析销售数据作为例子:

R 复制代码
set.seed(123)
weeks <- 1:15
sales <- round(5000 + cumsum(rnorm(15, sd=300)))  # 随机波动
ma3_forecast <- stats::filter(sales, rep(1/3,3), sides=1)
# 预测第16周
next_week <- tail(ma3_forecast,1)
plot(weeks, sales, type="o", ylim=c(4000,6000),
     main="便利店周销售额预测", ylab="销售额", xlab="周数")
lines(weeks, ma3_forecast, col="red", type="o")
points(16, next_week, col="red", pch=19)
abline(v=15.5, lty=2)
text(16, next_week, labels=paste("预测:",round(next_week)), pos=4)

这里由于是要进行预测数据,代码里的语法选择了sides=1,意思是用历史数据来预测,图中的红点是基于历史数据生成的对于预测点,从这里我们可以观察到红色曲线像是往右偏移了的灰色曲线,这表明了如果简单的用历史数据去预测,那么预测得到的数据的特点会具有滞后性。

接下来我们来看看研究过去的体温数据的例子:

R 复制代码
set.seed(123)
days <- 1:14
true_temp <- 36.5 + 0.1 * sin(2 * pi * days/7)  # 真实体温有轻微周波动
measured_temp <- true_temp + rnorm(14, sd=0.3)  # 测量误差
ma3 <- stats::filter(measured_temp, rep(1/3, 3), sides=2) 
plot(days, measured_temp, type="o", col="gray", 
     main="每日体温监测", ylab="体温(℃)", xlab="天数") # 原始数据
lines(days, true_temp, col="green", lwd=2) # 平滑后的趋势
lines(days, ma3, col="red", lwd=2, type="o")
legend("topright", 
       legend=c("测量值", "真实值", "3天移动平均"),
       col=c("gray", "green", "red"), lty=1, pch=c(1,NA,1))

在这里我们用的是sides=2,表示中心平均,也就是三个数据的权重相同,当然了,如果数据本身特殊,也可以用不等量权重weight <- c(0.2,0.5,0.3),注意最左边的是最靠近预测天数的那一个数据点。之所以分析历史数据时我们用中心平均,是因为这样利用了前后信息,可以从数据点的下一个数据得出反馈。此外,通过比较原始数据与平滑数据的偏差,如果某点的偏差远大于其他点(如超出2倍标准差),我们也可以借机对其进行异常标记。像股价分析问题中,用中心化平滑股价波动,如果某天价格大幅度偏离平滑线,那就有可能是市场异常事件导致的。

相关推荐
2501_94186496几秒前
科学方法论破解学习时间堆砌误区
学习
1024小神1 小时前
SVG标签中path路径参数学习
学习
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
简佐义的博客2 小时前
生信入门进阶指南:学习顶级实验室多组学整合方案,构建肾脏细胞空间分子图谱
人工智能·学习
近津薪荼2 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
rannn_1112 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
张人玉2 小时前
VisionPro 定位与卡尺测量学习笔记
笔记·学习·计算机视觉·vsionprp
觉醒大王3 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
YCY^v^3 小时前
JeecgBoot 项目运行指南
java·学习