为什么不用相对有更多教程的RODBC包?
最重要的原因是RODBC包只能在32位系统下运行,而我的是64位系统,无法运行RODBC;其次是xlsx()包允许设置excel单元格的格式,功能还比较强大。
前不久用xlsx()包写了两个操作excel文件的脚本,遇到一些问题,将经验记录如下:
在读取的xlsx文件第一行是合并单元格时报错,无法通过调整startRow参数修改,只能手工删除第一行解决。
出现了很奇怪的问题,在用addDataFrame对工作表写入数据时,不管startRow怎么设置,总要往上抹掉一行,而且在下面一行会写入一行原来最早输入的第一行数据,再往下如果按照startRow是跳过的,也会在下面写入新数据,然后在startRow设定的行数开始写数据。
百思不得其解,删掉数据的行名、列名,不排序,用原来的数据,试了很久都不行。但之前对另一个表使用addDataFrame函数都是正常的,而且参数几乎一致。想到是不是工作表对象没有关闭,导致写入数据错乱?
关掉R环境,重新加载,一次成功。
教训:对同一个对象连续应用addDataFrame函数要特别小心,上一次的运行可能会影响下一次的结果。
这里分享一下R语言实现VAR和SVAR的整个流程。
主要步骤包括:
1.单位根检验
2.确定滞后阶数
3.格兰杰因果检验
4.模型稳定性检验
5.脉冲响应
6.方差分解
(Johansen协整检验,如果需要的话)
整个过程用到的R语言的扩展包有:
library(zoo)
library(vars)
library(tseries)
首先,数据是下面的样子:
ps:数据是时间序列类型,可以通过下面方法将dataframe转成时间序列类型
data = ts(data)
1.单位根检验
#对data的第一列进行单位根检验
adf.test(data[,1])
2.滞后阶数确定
VARselect函数结果包括AIC、HQ、SC和FPE准则
#参数y为时间序列数据,lag.max为最大滞后阶数
#参数type值包括const截距,trend趋势,both同时包含截距和趋势,none不包含截距和趋势
VARselect(y=data, lag.max = 10, type = c("const"))
3.格兰杰因果检验
格兰杰因果检验有两个方法,第一个是在构造模型之前,第二个是在构造模型之后在模型的基础上进行格兰杰因果检验。
(1)构造模型之前格兰杰因果检验
#函数格式:grangertest(yt~xt)
eg:
grangertest(Value~BCI)
(2)构造模型之后格兰杰因果检验
#函数格式:causality(VARModel,cause)
eg
var = VAR(data ,p = 2, type = "const")
causality(var,cause=c('Count','Value'))
ps:在这里如果想要构建SVAR模型的话,需要根据实际情况构建两个矩阵amat和bmat,然后使用这两个矩阵来构建SVAR模型:
svar = SVAR(var,Amat = amat,Bmat = bmat)
4.模型稳定性检验
#这里使用“OLS-CUSUM”,它给出的是残差累积和,在该检验生成的曲线图中,残差累积和曲线以时间为横坐标,
#图中绘出两条临界线,如果累积和超出了这两条临界线,则说明参数不具有稳定性。
sta = stability(var, type = c("OLS-CUSUM"), h = 0.15, dynamic = FALSE, rescale = TRUE)
plot(sta)##结果稳健
5.脉冲响应
#标题栏说明,这是BCI(或者其他变量)对各个变量(包括BCI自身)的脉冲响应
(1)VAR脉冲响应
var.irf<-irf(var,n.head=10)
plot(var.irf)
(2)SVAR脉冲响应
svar.irf<-irf(svar,n.ahead = 100)
plot(svar.irf)
6.方差分解
#反映了各变量的贡献率
(1)VAR方差分解
fevd1<-fevd(var, n.ahead = 10)
fevd1$Count
(2)SVAR方差分解
fevd2<-fevd(svar, n.ahead = 10)
fevd2$Value
ps:有时候需要进行Johansen协整检验
#Johansen协整检验,
#对r=0(不存在协整关系)的检验统计量大于临界值,表明拒绝原假设
yJoTest = ca.jo(data, type = c("trace"), ecdet = c("none"), K = 2)
summary(yJoTest)
网页链接
作者:任坤链接:http://www.zhihu.com/question/21792740/answer/27104765
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
reshape2 横向、纵向做数据变换,例如把纵向堆叠在数据库中的证券行情数据转换成一个按照不同证券代码横向排列,按照时间纵向排列收盘价的数据表
stringr 方便地用正则表达式做批量字符串操作,可做检测、匹配、替换、计数等等
lubridate 方便地做日期/时间操作,各种标准化时间和时区的处理
plyr 轻松地在vector, list, data.frame之间做分组变换,实现拆分、变换、合并的操作
dplyr 轻松地处理data.frame, data.table以及多种数据库为基础的数据,实现选择、变换、分组等等,速度很快
RODBC 连接ODBC数据库接口
RSQLite 连接轻量级SQLite数据库连接
jsonlite 读写json文件
yaml 读写yaml文件,实现灵活的程序外部配置
Rcpp, Rcpp11 写C++03/11代码直接编译后给R调用,大幅提升算法性能
data.table 快速处理较大数据表
ggplot2 高级绘图,一套统一的语法实现复杂图像组合绘制
zoo 时间序列数据的预处理,比如滚动平均等等
rmarkdown 用Markdown写文档并可方便地运行R代码与绘图
knitr 自动文档生成
devtools 扩展包开发必备,在线安装托管的扩展包,检查扩展包是否符合CRAN标准等等
testthat 扩展包自动测试
pipeR 自己写的高性能、低损耗、分工明确的管道操作(pipeline operator)扩展包,使得数据变换流程化
=== 专业领域(数值计算) ===
rootSolve 非线性方程求根、ODE均衡状态解
Rsolnp 非线性优化
=== 专业领域(计量和统计学习) ===
sde 随机微分方程模拟和统计推断
KernSmooth 非参数平滑与分布估计
cpm Change Point Detection 实时分布或者统计关系变化检测
stats4 可用来方便地做MLE估计