金融时间序列分析用R语言画简单收益率和对数收益率的ACF图?!

Python015

金融时间序列分析用R语言画简单收益率和对数收益率的ACF图?!,第1张

acf(int[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly

acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly

log return')

Box.test(int[,2], lag = 5, type = "Ljung-Box")

Box.test(int[,2], lag = 10, type = "Ljung-Box")

Box.test(int.l[,2], lag = 5, type = "Ljung-Box")

Box.test(int.l[,2], lag = 10, type = "Ljung-Box")

运行结果有以下错误,怎么办?

>int <- read.table("d-intc7208.txt", head=T)

错误于file(file, "rt") : 无法打开链结

此外: 警告信息:

In file(file, "rt") :

无法打开文件'd-intc7208.txt': No such file or directory

+ acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int monthly

错误: 意外的符号 in:

"

acf(int.l[,2], lag.max = 15,type = "correlation", plot = TRUE,main='int"

>log return')

错误: 意外的符号 in "log return"

课程采用Ruey S. Tsay的《金融数据分析导论:基于R语言》(Tsay 2013 ) (An Introduction to Analysis of Financial Data with R)作为主要教材之一。

时间序列的线性模型,包括:

股价序列呈现缓慢的、非单调的上升趋势, 局部又有短暂的波动。

可口可乐公司每季度发布的每股盈利数据。 读入:

时间序列图:

序列仍体现出缓慢的、非单调的上升趋势,又有明显的每年的周期变化(称为季节性), 还有短期的波动。

下面用基本R的 plot() 作图并用不同颜色标出不同季节。

现在可以看出,每年一般冬季和春季最低, 夏季最高,秋季介于夏季和冬季之间。

收益率在0上下波动,除了个别时候基本在某个波动范围之内。

用xts包的 plot() 函数作图:

聚焦到2004年的数据:

红色是6月期国债利率, 黑色是3月期国债。 一般6月期高, 但是有些时期3月期超过了6月期,如1980年:

如图标普500月收益率那样的收益率数据基本呈现出在一个水平线(一般是0)上下波动, 且波动范围基本不变。 这样的表现是时间序列“弱平稳序列”的表现。

弱平稳需要一阶矩和二阶矩有限。某些分布是没有有限的二阶矩的,比如柯西分布, 这样的分布就不适用传统的线性时间序列理论。

稍后给出弱平稳的理论定义。

如图2可口可乐季度盈利这样的价格序列则呈现出水平的上下起伏, 如果分成几段平均的话, 各段的平均值差距较大。 这体现出非平稳的特性。

以下为一堆公式推导,具体查看: http://www.math.pku.edu.cn/teachers/lidf/course/fts/ftsnotes/html/_ftsnotes/fts-tslin.html#fig:tslin-intro-sp02

时间序列

自协方差函数

弱平稳序列

图6 是IBM股票月度简单收益率对标普500收益率的散点图。 从图中看出, 两者有明显的正向相关关系。

对于不独立的样本, 比如时间序列样本, 也可以计算相关系数, 其估计合理性需要一些模型假设。

对于联合分布非正态的情况, 有时相关系数不能很好地反映X和Y的正向或者负向的相关。 斯皮尔曼(Spearman)相关系数是计算X的样本的秩(名次)与Y的样本的秩之间的相关系数, 也称为Spearman rank correlation。

另一种常用的非参数相关系数是肯德尔tau(Kendall’s )系数, 反映了一致数对和非一致数对之间的差别。

即两个观测的分量次序一致的概率减去分量次序相反的概率。 一致的概率越大,说明两个的正向相关性越强。

对IBM收益率与标普收益率数据计算这三种相关系数:

自相关函数 (Autocorrelation function, ACF)参见 (何书元 2003 ) P.131 §4.2的例2.1。 原始文献: MAURICE STEVENSON BARTLETT, On the Theoretical Specification and Sampling Properties of Auto-Correlated Time Series, Journal of the Royal Statistical Society (Supplement) 8 (1946), pp. 24-41.

在基本R软件中, acf(x) 可以估计时间序列 x 的自相关函数并对其前面若干项画图。

例:CRSP的第10分位组合的月对数收益率, 1967-1到2009-12。 第10分位组合是NYSE、AMEX、NASDAQ市值最小的10%股票组成的投资组合, 每年都重新调整。

图6: CRSP第10分位组合月对数收益率

用 acf() 作时间序列的自相关函数图:

acf() 的返回值是一个列表,其中 lag 相当于, acf 相当于。 用 plot=FALSE 取消默认的图形输出。

有研究者认为小市值股票倾向于在每年的一月份有正的收益率。

为此,用对的检验来验证。 如果一月份有取正值的倾向, 则相隔12个月的值会有正相关。

计算统计量的值,检验p值:

值小于0.05, 这个检验的结果支持一月份效应的存在性。

Ljung和Box(Ljung and Box 1978 )对Box和Pierce(Box and Pierce 1970 )提出了混成统计量(Portmanteau statistic)

检验方法进行了改进

在R软件中, Box.test(x, type="Ljung-Box") 执行Ljung-Box白噪声检验。 Box.test(x, type="Box-Pierce") 执行Box-Pierce混成检验。 用 fitdf= 指定要减去的自由度个数。

检验IBM股票月收益率是否白噪声。

考虑IBM股票从1926-01到2011-09的月度收益率数据, 简单收益率和对数收益率分别考虑。

读入数据:

读入的是简单收益率的月度数据。 作ACF图:

从ACF来看月度简单收益率是白噪声。

作Ljung-Box白噪声检验, 分别取和:

在0.05水平下均不拒绝零假设, 支持IBM月度简单收益率是白噪声的零假设。

从简单收益率计算对数收益率, 并进行LB白噪声检验:

在0.05水平下不拒绝零假设。

Box-Pierce检验和Ljung-Box检验受到取值的影响, 建议采用, 且序列为季度、月度这样的周期序列时, 应取为周期的整数倍。

对CRSP最低10分位的资产组合的月简单收益率作白噪声检验。

此组合的收益率序列的ACF:

针对和作Ljung-Box白噪声检验:

在0.05水平下均拒绝零假设, 认为CRSP最低10分位的投资组合的月度简单收益率不是白噪声。

有效市场假设认为收益率是不可预测的, 也就不会有非零的自相关。 但是,股价的决定方式和指数收益率的计算方式等可能会导致在观测到的收益率序列中有自相关性。 高频金融数据中很常见自相关性。

常见的白噪声检验还有TREVOR S. BREUSCH (1978) 和LESLIE G. GODFREY (1978)提出的拉格朗日乘子法检验(LM检验)。 零假设为白噪声, 对立假设为AR、MA或者ARMA。 参见:

设是独立同分布的二阶矩有限的随机变量, 称为独立同分布白噪声(white noise)。 最常用的白噪声一般假设均值为零。 如果独立同分布, 称为高斯(Gaussian)白噪声或正态白噪声。

白噪声序列的自相关函数为零(除外)。

实际应用中如果样本自相关函数近似为零 (ACF图中都位于控制线之内或基本不超出控制线), 则可认为该序列是白噪声的样本。

如:IBM月度收益率可以认为是白噪声(见例 3.3 ); CRSP最低10分位投资组合月度收益率不是白噪声(见例 3.4 )。

不是所有的弱平稳时间序列都有这样的性质。 非平稳序列更是不需要满足这些性质。

公式就不赘述

如果从时间序列的一条轨道就可以推断出它的所有有限维分布, 就称其为严平稳遍历的。 这里不给出遍历性的严格定义, 仅给出一些严平稳遍历的充分条件。 可以证明, 宽平稳的正态时间序列是严平稳遍历的, 由零均值独立同分布白噪声产生的线性序列是严平稳遍历的。

Tsay, Ruey S. 2013. 金融数据分析导论:基于R语言 . 机械工业出版社.

何书元. 2003. 应用时间序列分析 . 北京大学出版社.

Box, GEP, and D. Pierce. 1970. “Distribution of Residual Autocorelations in Autoregressive-Integrated Moving Average Time Series Models.” J. of American Stat. Assoc. 65: 1509–26.

Ljung, G., and GEP Box. 1978. “On a Measure of Lack of Fit in Time Series Models.” Biometrika 66: 67–72.

参考学习资料: http://www.math.pku.edu.cn/teachers/lidf/course/fts/ftsnotes/html/_ftsnotes/fts-tslin.html#fig:tslin-intro-sp02

R语言常用函数整理本篇是基础篇,即R语言自带的函数。

vector:向量

numeric:数值型向量

logical:逻辑型向量

character;字符型向量

list:列表

data.frame:数据框

c:连接为向量或列表

length:求长度

subset:求子集

seq,from:to,sequence:等差序列

rep:重复

NA:缺失值

NULL:空对象

sort,order,unique,rev:排序

unlist:展平列表

attr,attributes:对象属性

mode,class,typeof:对象存储模式与类型

names:对象的名字属性

字符型向量 nchar:字符数

substr:取子串 format,formatC:把对象用格式转换为字符串

paste()、paste0()不仅可以连接多个字符串,还可以将对象自动转换为字符串再相连,另外还能处理向量。

strsplit:连接或拆分

charmatch,pmatch:字符串匹配

grep,sub,gsub:模式匹配与替换

complex,Re,Im,Mod,Arg,Conj:复数函数

factor:因子 codes:因子的编码 levels:因子的各水平的名字 nlevels:因子的水平个数 cut:把数值型对象分区间转换为因子

table:交叉频数表 split:按因子分组 aggregate:计算各数据子集的概括统计量 tapply:对“不规则”数组应用函数

dev.new() 新建画板

plot()绘制点线图,条形图,散点图.

barplot( ) 绘制条形图

dotchart( ) 绘制点图

pie( )绘制饼图.

pair( )绘制散点图阵

boxplot( )绘制箱线图

hist( )绘制直方图

scatterplot3D( )绘制3D散点图.

par()可以添加很多参数来修改图形

title( ) 添加标题

axis( ) 调整刻度

rug( ) 添加轴密度

grid( ) 添加网格线

abline( ) 添加直线

lines( ) 添加曲线

text( ) 添加标签

legend() 添加图例

+, -, *, /, ^, %%, %/%:四则运算 ceiling,floor,round,signif

1、round() #四舍五入

例:x <- c(3.1416, 15.377, 269.7)

round(x, 0) #保留整数位

round(x, 2) #保留两位小数

round(x, -1) #保留到十位

2、signif() #取有效数字(跟学过的有效数字不是一个意思)

例:略

3、trunc() #取整

floor() #向下取整

ceiling() #向上取整

例:xx <- c(3.60, 12.47, -3.60, -12.47)

trunc(xx)

floor(xx)

ceiling(xx)

max,min,pmax,pmin:最大最小值

range:最大值和最小值 sum,prod:向量元素和,积 cumsum,cumprod,cummax,cummin:累加、累乘 sort:排序 approx和approx fun:插值 diff:差分 sign:符号函数

abs,sqrt:绝对值,平方根

log, exp, log10, log2:对数与指数函数

sin,cos,tan,asin,acos,atan,atan2:三角函数

sinh,cosh,tanh,asinh,acosh,atanh:双曲函数

beta,lbeta,gamma,lgamma,digamma,trigamma,tetragamma,pentagamma,choose ,lchoose:与贝塔函数、伽玛函数、组合数有关的特殊函数

fft,mvfft,convolve:富利叶变换及卷积

polyroot:多项式求根

poly:正交多项式

spline,splinefun:样条差值

besselI,besselK,besselJ,besselY,gammaCody:Bessel函数

deriv:简单表达式的符号微分或算法微分

array:建立数组

matrix:生成矩阵

data.matrix:把数据框转换为数值型矩阵

lower.tri:矩阵的下三角部分

mat.or.vec:生成矩阵或向量

t:矩阵转置

cbind:把列合并为矩阵

rbind:把行合并为矩阵

diag:矩阵对角元素向量或生成对角矩阵

aperm:数组转置

nrow, ncol:计算数组的行数和列数

dim:对象的维向量

dimnames:对象的维名

rownames,colnames:行名或列名

%*%:矩阵乘法

crossprod:矩阵交叉乘积(内积)

outer:数组外积

kronecker:数组的Kronecker积

apply:对数组的某些维应用函数

tapply:对“不规则”数组应用函数

sweep:计算数组的概括统计量

aggregate:计算数据子集的概括统计量

scale:矩阵标准化

matplot:对矩阵各列绘图

cor:相关阵或协差阵

Contrast:对照矩阵

row:矩阵的行下标集

col:求列下标集

solve:解线性方程组或求逆

eigen:矩阵的特征值分解

svd:矩阵的奇异值分解

backsolve:解上三角或下三角方程组

chol:Choleski分解

qr:矩阵的QR分解

chol2inv:由Choleski分解求逆

><,>,<=,>=,==,!=:比较运算符 !,&,&&,|,||,xor():

逻辑运算符 logical:

生成逻辑向量 all,

any:逻辑向量都为真或存在真

ifelse():二者择一 match,

%in%:查找

unique:找出互不相同的元素

which:找到真值下标集合

duplicated:找到重复元素

optimize,uniroot,polyroot:一维优化与求根

if,else,

ifelse,

switch:

分支 for,while,repeat,break,next:

循环 apply,lapply,sapply,tapply,sweep:替代循环的函数。

function:函数定义

source:调用文件 ’

call:函数调用 .

C,.Fortran:调用C或者Fortran子程序的动态链接库。

Recall:递归调用

browser,debug,trace,traceback:程序调试

options:指定系统参数

missing:判断虚参是否有对应实参

nargs:参数个数 stop:终止函数执行

on.exit:指定退出时执行 eval,expression:表达式计算

system.time:表达式计算计时

invisible:使变量不显示

menu:选择菜单(字符列表菜单)

其它与函数有关的还有:

delay,

delete.response,

deparse,

do.call,

dput,

environment ,

formals,

format.info,

interactive,

is.finite,

is.function,

is.language,

is.recursive ,

match.arg,

match.call,

match.fun,

model.extract,

name,

parse 函数能将字符串转换为表达式expression

deparse 将表达式expression转换为字符串

eval 函数能对表达式求解

substitute,

sys.parent ,

warning,

machine

cat,print:显示对象

sink:输出转向到指定文件

dump,save,dput,write:输出对象

scan,read.table,readlines, load,dget:读入

ls,objects:显示对象列表

rm, remove:删除对象

q,quit:退出系统

.First,.Last:初始运行函数与退出运行函数。

options:系统选项

?,help,help.start,apropos:帮助功能

data:列出数据集

head()查看数据的头几行

tail()查看数据的最后几行

每一种分布有四个函数:

d―density(密度函数),p―分布函数,q―分位数函数,r―随机数函数。

比如,正态分布的这四个函数为dnorm,pnorm,qnorm,rnorm。下面我们列出各分布后缀,前面加前缀d、p、q或r就构成函数名:

norm:正态,

t:t分布,

f:F分布,

chisq:卡方(包括非中心)

unif:均匀,

exp:指数,

weibull:威布尔,

gamma:伽玛,

beta:贝塔

lnorm:对数正态,

logis:逻辑分布,

cauchy:柯西,

binom:二项分布,

geom:几何分布,

hyper:超几何,

nbinom:负二项,

pois:泊松

signrank:符号秩,

wilcox:秩和,

tukey:学生化极差

sum, mean, var, sd, min, max, range, median, IQR(四分位间距)等为统计量,

sort,order,rank与排序有关,

其它还有ave,fivenum,mad,quantile,stem等。

R中已实现的有chisq.test,prop.test,t.test。

cor,cov.wt,var:协方差阵及相关阵计算

biplot,biplot.princomp:多元数据biplot图

cancor:典则相关

princomp:主成分分析

hclust:谱系聚类

kmeans:k-均值聚类

cmdscale:经典多维标度

其它有dist,mahalanobis,cov.rob。

ts:时间序列对象

diff:计算差分

time:时间序列的采样时间

window:时间窗

lm,glm,aov:线性模型、广义线性模型、方差分析

quo()等价于quote()

enquo()等价于substitute()