@fanxy
2020-03-29T16:22:02.000000Z
字数 9253
阅读 5461
樊潇彦
复旦大学经济学院
金融数据
下载数据:price.Rdata
setwd("D:\\...\\Ch04") # 设定工作目录,注意为/或\\
rm(list=ls()) # 清内存
install.packages(c("MASS","Himsc","fBasics","mice","sm","mnormt"))
## 调用
library(tidyverse)
library(ggplot2)
library(MASS)
library(Himsc)
library(fBasics)
library(mice)
library(sm)
library(mnormt)
Source:Wiki term "Probability measure".
若函数 满足:
binom
)、泊松分布pois
等unif
、正态分布(高斯分布,norm
)、指数分布exp
,以及、、(t
、F
、chisq
)分布等。是随机变量 的 个独立抽取的样本,常用的样本统计量(sample statistics)定义如下:
此外,假定 是随机变量 的 个独立抽取的样本,定义:
注意:
四种前缀(以正态分布 为例):
dnorm(x,mu,sigma)
pnorm(x,mu,sigma)
qnorm(1-alpha/2,mu,sigma)
rnorm(N,mu,sigma)
课堂讨论:借用下图说明R命令的含义
dnorm(2,0,1)
pnorm(2,0,1)
qnorm(1-0.05/2,0,1)
rnorm(5,0,1)
x <- seq(from = -5, to = 5, by = 0.01) # 横轴向量
y <- dnorm(x) # 正态分布的概率密度函数
plot(x=x,y=y, type="l",col="seagreen",lwd=2,
xlab="x",ylab="density\ny = dnorm(x)")
grid(col="darkgrey",lwd=2)
title(main="概率分布(PDF)")
y <- pnorm(x) # 正态分布的累积分布函数
plot(x=x,y=y,type="l",col="seagreen",lwd=2, xlab="x = qnorm(y)",
ylab="probability\ny = pnorm(x)") ; grid(col="darkgrey",lwd=2)
title(main="累积分布(CDF)")
set.seed(1)
x <- rnorm(100, sd=3) # 模拟生成单变量
y <- rnorm(100, mean=1) + x
mn = apply(cbind(x,y), 2, mean) # 计算x和y的均值
covmat= cov(cbind(x,y)) # 计算x和y的协方差
simdata=rmnorm(300,mean=mn,varcov=covmat) # mnormt包中函数,模拟生成双变量
ggplot(as.data.frame(simdata), aes(x=x, y=y)) +
geom_point() +geom_smooth(method="lm") + theme_bw()
library(MASS)
data(Insurance) # 调用保险数据
str(Insurance) # 查看数据结构
attach(Insurance) # 绑定数据
# 1)连续变量
mean(Holders) # 基本统计量,有缺失值时用 mean(Holders, na.rm = TRUE)
median(Holders)
sd(Holders)
var(Holders)
quantile(Holders) # 四分位值
quantile(Holders,seq(0,1,0.1)) # 十分位值
library(Hmisc)
describe(data.frame(District, Group, Age)) # 简单数据描述
describe(data.frame(Holders, Claims))
library(fBasics)
basicStats(data.frame(Holders, Claims)) # 更多统计量
# 2)离散变量
table(Age) # 离散变量频率表
# 1)两个连续变量
cor(data.frame(Holders, Claims),use="pairwise",method="pearson") # 相关系数
cov(data.frame(Holders, Claims),use="pairwise",method="pearson") # 协方差矩阵
# 2)一个连续变量和一个离散变量
by(data.frame(Holders,Claims),Age,summary) # 按离散变量分组,对连续变量做统计描述
# 3)两个离散变量
table(District,Age) # 两个离散变量频率表
detach(Insurance) # 解除绑定
t.text()
:单变量 ,双变量 var.text()
:单变量 ,双变量 wilcox.test()
normalTest()
chisq.test()
ks.test()
注意:
# 比较净收益率和对数收益率
R <- seq(-0.2,0.2,len=100)
data=data.frame(R, r=log(1+R))
ggplot(data,aes(R,r)) +
geom_line() +
geom_abline(slope=1, intercept=0, color="red") +
labs(title ="对数收益率(r)和简单净收益率(R)", x = "R", y = "r= log(1+R)") +
theme_bw()
4.年化复合收益率
其他相关定义:
## 价格为不同数据类型,计算收益率
# 1) 向量
P <- c(265.50, 264.27, 266.49, 253.81, 269.20, 277.69, 301.22, 280.98, 312.64,
364.03, 393.62, 398.79)
P[-length(P)] # P(1), P(2) ... P(T-1)
P[-1] # P(2), P(3) ... P(T)
R <- P[-1] / P[-length(P)] - 1 # R(t) = P(t+1)/P(t) -1
R <- diff(P) / P[-length(P)] # [P(t+1) - P(t)]/P(t)
r <- diff(log(P)) # r(t) = log(P(t+t)) - log(P(t))
# 2) zoo 对象
library(zoo)
z <- zooreg(P, as.yearmon("2013-01"), freq = 12)
R.z <- diff(z) / lag(z,-1) # 指定 lag=-1
r.z <- diff(log(z))
# 3) xts 对象
library(xts)
x <- as.xts(z)
R.x <- diff(x) / lag(x) # 默认 lag=1
r.x <- diff(log(x))
# 4) timeSeries 对象
library(timeSeries)
r.ts= returns(P)
# 比较上述计算结果,注意xts和timeSeries的第一期为NA
comp= data.frame(r, r.z, r.x[-1], r.ts[-1]) # 四种结果列为数据框
round(comp,3) # 保留3位小数
记债券价格为 、利息为、面值(par value)为。
# 计算股票、债券、汇率的收益率
library(quantmod)
loadSymbols("AAPL") # 苹果股票
loadSymbols("^TNX") # 10年期美国国债收益率
loadSymbols("DEXUSEU",src="FRED") # 汇率,1欧元等于E美元
# 如果无法直接下载,可通过 load("price.Rdata") 调用数据
chartSeries(AAPL,theme="white",TA=NULL) # 股价,TA=NULL则不包括成交量
AAPL.rtn=diff(log(AAPL$AAPL.Adjusted)) # 经调整的股价对数收益率
chartSeries(AAPL.rtn,theme="white")
chartSeries(TNX,theme="white")
TNX.rtn=diff(TNX$TNX.Adjusted) # 债券收益率(%)的变化率
chartSeries(TNX.rtn,theme="white")
chartSeries(DEXUSEU,theme="white")
USEU.rtn=diff(log(DEXUSEU$DEXUSEU)) # 汇率变化率
chartSeries(USEU.rtn,theme="white")
根据 Fan and Yao(2015) 资产收益率具有以下典型特征:
# 以苹果的对数收益率为例
x=as.data.frame(AAPL.rtn)[,1]
# 或者用 Tsay(2013)中3M公司数据
url="https://faculty.chicagobooth.edu/ruey.tsay/teaching/introTS/ch1data.zip"
download.file(url, "ch1data.zip") # 下载存为同名文件
x=read.table(unz("ch1data.zip","d-mmm-0111.txt"),header=T) # 读入数据
x=x[,2] # 去掉日期
# 1) 作图
hist(x,nclass=30) # 直方图
d1=density(x,na.rm=T) # 密度
plot(d1$x,d1$y,xlab='rtn',ylab='density',type='l') # 密度线
rangex=range(x,na.rm=T) # 取值范围
seqx=seq(rangex[1],rangex[2],.001) # x轴间隔0.001
y1=dnorm(seqx,mean(x,na.rm=T),stdev(x,na.rm=T)) # 正态分布
lines(seqx,y1,lty=2) # 添加正态分布线
# 2) 检验
library(fBasics)
basicStats(x)
mean(x,na.rm=TRUE); var(x,na.rm=TRUE); stdev(x,na.rm=TRUE);
t.test(x) # 均值检验 H0: x=0
normalTest(x,method='jb',na.rm=T) # 正态分布检验,JB-test
s3=skewness(x,na.rm =T)
T=length(x)
t3=s3/sqrt(6/T)
pp=2*(1-pnorm(t3)) # 偏度检验(Skewness test)
s4=kurtosis(x,na.rm =T)
t4=s4/sqrt(24/T)
pp=2*(1-pnorm(t4)) # 峰度检验(Kurtosis test)