金融统计
风险回报权衡
风险回报权衡即Risk-Return Trade-Off。这里我们用过去的股票和债券数据的表现进行比较。
其中的数据来源::F-F_Research_Data_Factors.txt
下载网站:http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html
Step1:数据导入
#读取文件
FF.raw <- read.fwf(file="F-F_Research_Data_Factors.txt", widths=c(6,8,8,8,8),skip=4)
head(FF.raw)
V1 V2 V3 V4 V5
1 192607 2.96 -2.56 -2.43 0.22
2 192608 2.64 -1.17 3.82 0.25
3 192609 0.36 -1.40 0.13 0.23
4 192610 -3.24 -0.09 0.70 0.32
5 192611 2.53 -0.10 -0.51 0.31
6 192612 2.62 -0.03 -0.05 0.28
#获取最后几行数据
tail(FF.raw)
V1 V2 V3 V4 V5
1248 2018 -6.95 -3.21 -9.73 1.83
1249 2019 28.28 -6.10 -10.34 2.15
1250 2020 23.66 13.17 -46.57 0.45
1251 2021 23.56 -3.92 25.57 0.04
1252 <NA> <NA> <NA> <NA> <NA>
1253 Copyri ght 2022 Kenneth R. Fren ch
Step2:数据处理
由于文件后面包含汇总的年度数据,这是我们不需要的,所以需要删除。
FF.raw<-FF.raw[-1154:-1253,]
#命名
names(FF.raw)<-paste(c("text.date","RmxRf","SMB","HML","Rf"))
head(FF.raw)
text.date RmxRf SMB HML Rf
1 192607 2.96 -2.56 -2.43 0.22
2 192608 2.64 -1.17 3.82 0.25
3 192609 0.36 -1.40 0.13 0.23
4 192610 -3.24 -0.09 0.70 0.32
5 192611 2.53 -0.10 -0.51 0.31
6 192612 2.62 -0.03 -0.05 0.28
tail(FF.raw)
text.date RmxRf SMB HML Rf
1148 202202 -2.29 2.23 3.04 0.00
1149 202203 3.05 -1.60 -1.80 0.01
1150 202204 -9.46 -1.41 6.19 0.01
1151 202205 -0.34 -1.85 8.41 0.03
1152 202206 -8.43 2.09 -5.97 0.06
1153 202207 9.56 2.78 -4.08 0.08
#显示内部结构
str(FF.raw)
'data.frame': 1153 obs. of 5 variables:
$ text.date: chr "192607" "192608" "192609" "192610" ...
$ RmxRf : chr " 2.96" " 2.64" " 0.36" " -3.24" ...
$ SMB : chr " -2.56" " -1.17" " -1.40" " -0.09" ...
$ HML : chr " -2.43" " 3.82" " 0.13" " 0.70" ...
$ Rf : chr " 0.22" " 0.25" " 0.23" " 0.32" ...
FF.raw<-FF.raw[,c(-1,-3,-4)]
#将数据数值化并计算
FF.raw$RmxRf<-as.numeric(as.character(FF.raw$RmxRf))/100
FF.raw$Rf<-as.numeric(as.character(FF.raw$Rf))/100
FF.raw$date<-seq(as.Date("1926-07-01"),as.Date("2022-07-01"),by="months")
FF.raw[c(1:3,nrow(FF.raw)),]
RmxRf Rf date
1 0.0296 0.0022 1926-07-01
2 0.0264 0.0025 1926-08-01
3 0.0036 0.0023 1926-09-01
1153 0.0956 0.0008 2022-07-01
str(FF.raw)
'data.frame': 1153 obs. of 3 variables:
$ RmxRf: num 0.0296 0.0264 0.0036 -0.0324 0.0253 0.0262 -0.0006 0.0418 0.0013 0.0046 ...
$ Rf : num 0.0022 0.0025 0.0023 0.0032 0.0031 0.0028 0.0025 0.0026 0.003 0.0025 ...
$ date : Date, format: "1926-07-01" "1926-08-01" "1926-09-01" "1926-10-01" ...
Step3:计算原始市场回报量
数据给出了超额市场回报率,即市场回报率减去无风险利率,我们需要的是原始的市场回报。
FF.raw$Rm<-FF.raw$RmxRf+FF.raw$Rf
FF.raw[c(1:3,nrow(FF.raw)),]
RmxRf Rf date Rm
1 0.0296 0.0022 1926-07-01 0.0318
2 0.0264 0.0025 1926-08-01 0.0289
3 0.0036 0.0023 1926-09-01 0.0059
1153 0.0956 0.0008 2022-07-01 0.0964
Step4:子集数据
FF<-subset(FF.raw,FF.raw$date>="1963-12-01" & FF.raw$date<="2013-12-31")
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm
450 0.0183 0.0029 1963-12-01 0.0212
451 0.0224 0.0030 1964-01-01 0.0254
452 0.0154 0.0026 1964-02-01 0.0180
1050 0.0281 0.0000 2013-12-01 0.0281
Step5:市场总回报率和无风险利率
FF$Gross.Rm<-1+FF$Rm
FF$Gross.Rm[1]<-1
FF$Gross.Rf<-1+FF$Rf
FF$Gross.Rf[1]<-1
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm Gross.Rm Gross.Rf
450 0.0183 0.0029 1963-12-01 0.0212 1.0000 1.0000
451 0.0224 0.0030 1964-01-01 0.0254 1.0254 1.0030
452 0.0154 0.0026 1964-02-01 0.0180 1.0180 1.0026
1050 0.0281 0.0000 2013-12-01 0.0281 1.0281 1.0000
Step6:市场累计收益和无风险利率
FF$cum.Rm<-cumprod(FF$Gross.Rm)
FF$cum.Rf<-cumprod(FF$Gross.Rf)
FF[c(1:3,nrow(FF)),]
RmxRf Rf date Rm Gross.Rm Gross.Rf cum.Rm cum.Rf
450 0.0183 0.0029 1963-12-01 0.0212 1.0000 1.0000 1.000000 1.000000
451 0.0224 0.0030 1964-01-01 0.0254 1.0254 1.0030 1.025400 1.003000
452 0.0154 0.0026 1964-02-01 0.0180 1.0180 1.0026 1.043857 1.005608
1050 0.0281 0.0000 2013-12-01 0.0281 1.0281 1.0000 124.745642 12.099660
Step7:数据可视化
#获取最大最小值
y.range<-range(FF$cum.Rm,FF$cum.Rf);y.range
[1] 1.0000 124.7456
par(mfrow=c(1,1))
title1<-"Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$cum.Rm,type="l",xlab="Date",ylab="Value of $1 Investment ($)",ylim=y.range,main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$cum.Rf,lty=2)
legend("topleft",c("Stocks (2013 Ending Value: $124.89)","Bonds (2013 Ending Value: $12.10)"),lty=c(1,2))
根据图中结果可以看出,股票的一美元投资价值总体大于债券投资价值,但是债券的价值显示为逐步增长,而股票的波动率较大。
Step8:绘制股票和债券收益图
#最大最小值
y.range<-range(FF$Rm,FF$Rf);y.range
[1] -0.2264 0.1661
title1<-"Volatility of Stock vs. Bond Returns"
title2<-"1964 to 2013"
plot(x=FF$date,FF$Rm,type="l",xlab="Date",ylab="Returns (%)",ylim=y.range,col="gray50",main=paste(title1,"\n",title2))
lines(x=FF$date,y=FF$Rf)
abline(h=0)
legend("topleft",c("Stocks","Bonds"),lty=c(1,2))