R语言实现金融数据的时间序列分析及建模
一 移动平均
移动平均能消除数据中的季节变动和不规则变动。若序列中存在周期变动,则通常以周期为移动平均项数。移动平均法可以通过数据显示出数据长期趋势的变动规律。
R可用filter()函数做移动平均。用法:filter(data,filter,sides)

1、简单移动平均
简单移动平均就是将n个观测值的平均数作为第(n
1)/2个的拟合值。当n为偶数时,需进行二次移动平均。简单移动平均假设序列长期趋势的斜率不变。
以我国1992到2014年的季度GDP数据为例。
data<-read.csv("gdpq.csv")
tdata<-ts(data,start=1992,freq=4)
m1<-filter(tdata,filter=c(rep(1/4,4)))
plot(tdata,xlab="时间",ylab="gdp")
lines(m1,col="red",cex=1.5)

代码运行结果如上图,红色表示拟合值,黑色表示真实值。
2、二次移动平均
二次移动平均即在一次移动平均的基础上再进行一次移动平均。一般两次移动平均的项数是一致的。二次移动平均假设序列长期趋势的斜率是随时间的变化而变化的。
二次移动平均长期趋势的拟合公式为:at=2M1t−M2t,其中M1t
表示第一次移动平均的拟合值,M2t表示二次移动平均的拟合值。
同样以上述数据为例,进行二次移动平均。代码如下:
plot(tdata,type="l",xlab="时间",ylab="季度GDP")
m2<-filter(m1,filter=c(rep(1/4,4)),sides=1)
lines(2*m1-m2,col="red",cex=2)

代码运行结果如上图所示,红色为二次移动的拟合值。
二 指数平滑
指数平滑的思想与移动平均是一样的,只是随着时间间隔的增加,加权的权重会呈指数衰减。它认为时间间隔越远的数据对当期数据的影响越小。R调用的函数为
HoltWinters(data, alpha=, beta=,
gamma=,seasonal=c(“additive”,”multiple”)…)

1、简单指数平滑
简单指数平滑假设序列中不存在季节变动和系统的趋势变化。模型公式为:
Xt=axt (1−a)Xt−1,0a为平滑系数,Xt 为拟合值,xt 为真实值。一般指定X0=x1
,并且a越大,平滑程度越弱。R语言中有函数可以通过最小化一步预测误差平方和的方法估计出a。以2010年到2014年消费者新心指数为例,并预测2015年前6个月的值。代码如下:
>
data<-read.csv("consumer_cf.csv")
>
newdata<-ts(data[,2],start=c(2010,1),freq=12)
>
plot(newdata,type="o",cex.axis=1.5,cex.lab=1.5,
xlab="时间",ylab="消费者信心指数")
>
a<-HoltWinters(newdata,beta=F,gamma=F)
>
b<-HoltWinters(newdata,alpha=0.5,beta=F,gamma=F)
#估计参数a
> b
Holt-Winters exponential smoothing without trend and without
seasonal component.
Call:
HoltWinters(x = newdata, alpha = 0.5, beta = F, gamma = F)
Smoothing parameters:
alpha: 0.5
beta : FALSE
gamma: FALSE
Coefficients:
[,1]
a 105.2898
>
pdata<-predict(a,6,prediction.interval = T)
>
plot(a,pdata,type="o",xlab="时间",ylab="消费者信心指数")

代码运行结果如上所示。用HoltWinters()函数估计出来的a=0.78,且向后预测值为图中红色部分,黑色为真实值。这种预测方法预测出的值往往不够精确,因为它没有考虑序列中存在的其他变动。
2、Holt_Winters指数平滑
Holt_Winters指数平滑考虑了序列中存在的季节变动,这种方法对存在季节变动的经济数据有较好的拟合效果,可以用来进行向后预测。
加法季节模型:
Xt=a∗(xt−st)
(1−a)(at−1
bt−1
bt=β∗(Xt−Xt−1)
(1−β)bt−1
st=γ∗(xt−Xt)
(1−γ)st−p
其中p为季节变动的周期长度。其他含义同上。以上述的GDP数据为例,用HoltWinters指数平滑法分解GDP的水平,斜率及季节变动水平,并预测未来5年的值。代码如下:
> data<-read.csv("gdpq.csv")
>
tdata<-ts(data,start=1992,freq=4)
>
gdp.hw<-HoltWinters(tdata,seasonal="multi")
> plot(gdp.hw$fitted,type="o",main="分解图")
> plot(gdp.hw,type="o")
>
pdata<-predict(gdp.hw,n.ahead=4*5)
> pdata
Qtr1
Qtr2
Qtr3
Qtr4
2015 149826.6 168126.7 176640.3 192627.9
2016 161252.4 180708.2 189616.2 206523.1
2017 172678.2 193289.7 202592.1 220418.2
2018 184104.1 205871.2 215568.0 234313.4
2019 195529.9 218452.8 228543.8 248208.5
>
ts.plot(tdata,pdata,type="o",lty=1:2,col=c("red","black"))



代码中采用了加法模型。序列的分解图如上图所示。第二个图为模型对数据的拟合图,第三个图的虚线部分为后5年的预测。
R语言实现金融数据的时间序列分析及建模的更多相关文章
- [译]用R语言做挖掘数据《二》
数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...
- R语言分析朝阳医院数据
R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...
- R语言处理Web数据
R语言处理Web数据 许多网站提供的数据,以供其用户的消费.例如,世界卫生组织(WHO)提供的CSV,TXT和XML文件的形式的健康和医疗信息报告.基于R程序,我们可以通过编程提取这些网站的具体数据. ...
- [译]用R语言做挖掘数据《一》
介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...
- R语言和大数据
#安装R语言R3.3版本会出现各种so不存在的问题,退回去到R3.1版本时候就顺利安装.在安装R环境之前,先安装好中文(如果没有的话图表中显示汉字成框框了)和tcl/tk包(少了这个没法安装sqldf ...
- [译]用R语言做挖掘数据《七》
时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用 ...
- [译]用R语言做挖掘数据《六》
异常值检测 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...
- [译]用R语言做挖掘数据《五》
介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...
- [译]用R语言做挖掘数据《四》
回归 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...
随机推荐
- luogu P5337 [TJOI2019]甲苯先生的字符串
传送门 所以这题和字符串有什么关系 首先可以写出dp,\(f_{i,j}\)表示前\(i\)位,最后一个字符是\(j\)的方案,转移枚举下一位,只要不在大串中前后相邻即可.然后矩乘优化即可 // lu ...
- python 调用dll 动态链接库 结构体参数及回调函数等示例
结构体示例: 这里是 C 代码的部分,主要是结构体的声明和回调函数定义. // 新版本定义 typedef enum { DevCard, DevLocator, DevReader } DevTyp ...
- Django之modles 多对多创建第三张表
一.第一种:纯自动创建第三张表 纯自动 class Book(models.Model): title = models.CharField(max_length=32) price = models ...
- nmap 扫描出某网段内web服务器
今天碰到一个问题,客户要求在他们内网中扫描出所有web服务器,然后再对web进行渗透测试,共两个网段. 以前我记得用nmap时曾得到过某地址的web服务器数据,比如显示是IIS或apach,但忘了具体 ...
- python打包命令
打包成exe方法 (1)切换到该文件夹 (2)pyinstaller -F py文件 (py文件要英文才行) -F 生成单个可执行文件 -w 去掉控制台窗口 -p 自定义需要加载的类路径 -i 可执行 ...
- STM32 常用词汇释义
1.AF——Alternate function 复用功能: 2.NVIC——Nested Vectored Interrupt Controller 内嵌向量中断控制器 3.ISER[8]— ...
- Java并发(基础知识)——显示锁和同步工具类
显示锁 Lock接口是Java ...
- 通过spring工具类获取bean
package xxx; import org.springframework.beans.BeansException; import org.springframework.beans.facto ...
- 题解 P3166 【[CQOI2014]数三角形】
做完之后看了看题解,怎么一篇和我思路一样的也没有...我好慌啊qwq(所以一定是窝太弱了看不懂dalao的思路) 好吧窝的方法确实很奇怪: 核心代码只有3行 输入 循环 输出 一气呵成 是题解中的豪杰 ...
- [每日一讲] Python系列:字符串(上)
字符串作为人类最常处理的内容,在计算中决定了其占有重要的地位.在 Python 中,字符串的操作和处理往往需要根据实际问题,结合其他操作才可以完成目标.在复杂世界仅仅是字符串 API 还无法完成工作. ...