读取上市公司收益率数据
library("readr")
library("readxl")
library("dplyr")
library(stringr)
library(PerformanceAnalytics)
setwd("e:/R/tail risk/month")
r8<-read.csv("r8.csv")
r<-data.frame(Trdmnt=as.numeric(str_replace_all(r8$Trddt,"-","")) ,r8)%>%select(-3)%>%tbl_df()
y<-read_excel("y.xlsx",sheet = 1)
ywf<-read_excel("ywf.xlsx",sheet = 1)%>%select(-2,-4)
y1<-slice(y,-(1L:2L))%>%select(-4)
y2<-as.numeric(str_replace_all(y1$Trdmnt,"-",""))
y3<-left_join(data.frame(y1,y2)%>%select(-2)%>%rename(Trdmnt= y2),ywf,by="Trdmnt")
y4<-y3[,c(1,4,2,3,5)]%>%filter(Mretwd!="NA")
write.csv(y4,"y4.csv",row.names = FALSE)
y4<-read.csv("y4.csv")
y4<-mutate(y4,eMretwd=Mretwd-Nrrmtdt/100)
ys<-read_excel("ys.xlsx",sheet = 1)%>%slice(-(1L:2L))%>%filter(Markettype==5)%>%select(-1)
ys<-data.frame(Trdmnt=as.numeric(str_replace_all(ys$Trdmnt,"-","")) ,ys)%>%select(-2)
y6<-left_join(y4,ys,by="Trdmnt")
write.csv(y6,"y6.csv",row.names = FALSE)
y6<-read.csv("y6.csv")
y6<-mutate(y6,ecm=Cmretwdos-Nrrmtdt/100)
load("r.RData")
listd<-read.csv("listd.csv");listy<-read.csv("listy.csv")
r<-left_join(r,listd,by="Stkcd")
y5<-read.csv("y6.csv")%>%tbl_df()
y5<-left_join(y5,listy,by="Stkcd")
sy<-read_excel("sy.xlsx")%>%tbl_df()
wy<-read_excel("wy.xlsx")%>%tbl_df()
varp<-0.05
利用类似Fama-Macbeth滚动方法检验
a0b1=numeric();a1b1=numeric();a2b1=numeric();a3b1=numeric();a4b1=numeric()
a0b2=numeric();a1b2=numeric();a2b2=numeric();a3b2=numeric();a4b2=numeric()
a0c1=numeric();a1c1=numeric();a2c1=numeric();a3c1=numeric();a4c1=numeric()
a0c2=numeric();a1c2=numeric();a2c2=numeric();a3c2=numeric();a4c2=numeric()
a0d1=numeric();a1d1=numeric();a2d1=numeric();a3d1=numeric();a4d1=numeric()
a0d2=numeric();a1d2=numeric();a2d2=numeric();a3d2=numeric();a4d2=numeric()
a0e1=numeric();a1e1=numeric();a2e1=numeric();a3e1=numeric();a4e1=numeric()
a0e2=numeric();a1e2=numeric();a2e2=numeric();a3e2=numeric();a4e2=numeric()
a0g1=numeric();a1g1=numeric();a2g1=numeric();a3g1=numeric();a4g1=numeric()
a0g2=numeric();a1g2=numeric();a2g2=numeric();a3g2=numeric();a4g2=numeric()
a0f1=list(NA,NA,NA,NA,NA);a1f1=list(NA,NA,NA,NA,NA);a2f1=list(NA,NA,NA,NA,NA);a3f1=list(NA,NA,NA,NA,NA);a4f1=list(NA,NA,NA,NA,NA)
a0f2=list(NA,NA,NA,NA,NA);a1f2=list(NA,NA,NA,NA,NA);a2f2=list(NA,NA,NA,NA,NA);a3f2=list(NA,NA,NA,NA,NA);a4f2=list(NA,NA,NA,NA,NA)
for(i in 0:20){
for(h in 0:11){
r1<-filter(r,Trdmnt>=(19950101+100*h+10000*i),Trdmnt<(19980101+100*h+10000*i))
r1<-filter(r1,List<=min(r1$Trdmnt))
k<-round(nrow(distinct(r1,Trdmnt))*varp)
r2<-distinct(r1,Trdmnt,.keep_all = TRUE)%>%transmute(rme=Cdretwdos-Nrrdaydt/100,rme=-rme)%>%arrange(rme)
r3<-slice(r2,(nrow(distinct(r1,Trdmnt))-k+1):n())
r4<-transmute(r3,lrme=log(rme));a<-sum(r4)
α1<-1/k*a-log(as.numeric(slice(r2,nrow(distinct(r1,Trdmnt))-k)))
r5<-mutate(r1,rje=-(Dretwd-Nrrdaydt/100),rme=-(Cdretwdos-Nrrdaydt/100))
b<-group_by(r5,Stkcd)%>%arrange(rme)%>%slice(n()-round(n()*varp))%>%select(Stkcd,rme)%>%rename(frme=rme)
f<-group_by(r5,Stkcd)%>%arrange(rje)%>%slice(n()-round(n()*varp))%>%select(Stkcd,rje)%>%rename(frje=rje)
e<-group_by(r5,Stkcd)%>%summarise(k=round(n()*varp))
c<-left_join(r5,f,by="Stkcd")%>%left_join(b,by="Stkcd")
c1<-mutate(c,t=ifelse(rje>frje&rme>frme,1,0),tt=ifelse(rme>frme,1,0))
c2<-group_by(c1,Stkcd)%>%summarise(τ=sum(t)/sum(tt))
varm<-b
varj<-f
d<-left_join(c2,varj,by="Stkcd")%>%left_join(varm,by="Stkcd")%>%mutate(tβ=(τ^α1)*frje/frme)%>%select(-(2:4))%>%arrange(desc(tβ))
y6<-filter(y5,Trdmnt==(199801+h+100*i))
a0b1[i*12+(h+1)]=mean(inner_join(y6,slice(d,1:(n()/5)),by="Stkcd")$eMretwd)
a1b1[i*12+(h+1)]=mean(inner_join(y6,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd)
a2b1[i*12+(h+1)]=mean(inner_join(y6,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd)
a3b1[i*12+(h+1)]=mean(inner_join(y6,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd)
a4b1[i*12+(h+1)]=mean(inner_join(y6,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd)
a0b2[i*12+(h+1)]=weighted.mean(inner_join(y6,slice(d,1:(n()/5)),by="Stkcd")$eMretwd,inner_join(y6,slice(d,1:(n()/5)),by="Stkcd")$Msmvosd)
a1b2[i*12+(h+1)]=weighted.mean(inner_join(y6,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd,inner_join(y6,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$Msmvosd)
a2b2[i*12+(h+1)]=weighted.mean(inner_join(y6,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd,inner_join(y6,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$Msmvosd)
a3b2[i*12+(h+1)]=weighted.mean(inner_join(y6,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd,inner_join(y6,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$Msmvosd)
a4b2[i*12+(h+1)]=weighted.mean(inner_join(y6,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd,inner_join(y6,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$Msmvosd)
y55<-filter(y5,Trdmnt>=(199501+h+100*i),Trdmnt<(199801+h+100*i))
y55<-filter(y55,List<=min(y55$Trdmnt))
dd<-group_by(y55,Stkcd)%>%filter(n()>=24)%>%summarise(β=as.matrix(lm(eMretwd~ecm)$coefficients)[2])%>%filter(β!="NA")
y7<-left_join(y6,dd,by="Stkcd")%>%filter(β!="NA")%>%mutate(eMretwd=eMretwd-ecm*β)
a0d1[i*12+(h+1)]=mean(inner_join(y7,slice(d,1:(n()/5)),by="Stkcd")$eMretwd)
a1d1[i*12+(h+1)]=mean(inner_join(y7,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd)
a2d1[i*12+(h+1)]=mean(inner_join(y7,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd)
a3d1[i*12+(h+1)]=mean(inner_join(y7,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd)
a4d1[i*12+(h+1)]=mean(inner_join(y7,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd)
a0d2[i*12+(h+1)]=weighted.mean(inner_join(y7,slice(d,1:(n()/5)),by="Stkcd")$eMretwd,inner_join(y7,slice(d,1:(n()/5)),by="Stkcd")$Msmvosd)
a1d2[i*12+(h+1)]=weighted.mean(inner_join(y7,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd,inner_join(y7,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$Msmvosd)
a2d2[i*12+(h+1)]=weighted.mean(inner_join(y7,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd,inner_join(y7,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$Msmvosd)
a3d2[i*12+(h+1)]=weighted.mean(inner_join(y7,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd,inner_join(y7,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$Msmvosd)
a4d2[i*12+(h+1)]=weighted.mean(inner_join(y7,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd,inner_join(y7,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$Msmvosd)
y8<-left_join(y55,sy,by="Trdmnt")
ddd<-group_by(y8,Stkcd)%>%filter(n()>=24)%>%summarise(β=as.matrix(lm(eMretwd~mkt+smb+hml)$coefficients)[2],
SMB=as.matrix(lm(eMretwd~mkt+smb+hml)$coefficients)[3],
HML=as.matrix(lm(eMretwd~mkt+smb+hml)$coefficients)[4])
ddd1<-filter(ddd,β!="NA",SMB!="NA",HML!="NA")
y8<-left_join(y6,sy,by="Trdmnt")
y9<-left_join(y8,ddd1,by="Stkcd")%>%filter(β!="NA",SMB!="NA",HML!="NA")
y10<-mutate(y9,eMretwd=eMretwd-mkt*β-smb*SMB-hml*HML)
a0e1[i*12+(h+1)]=mean(inner_join(y10,slice(d,1:(n()/5)),by="Stkcd")$eMretwd)
a1e1[i*12+(h+1)]=mean(inner_join(y10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd)
a2e1[i*12+(h+1)]=mean(inner_join(y10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd)
a3e1[i*12+(h+1)]=mean(inner_join(y10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd)
a4e1[i*12+(h+1)]=mean(inner_join(y10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd)
a0e2[i*12+(h+1)]=weighted.mean(inner_join(y10,slice(d,1:(n()/5)),by="Stkcd")$eMretwd,inner_join(y10,slice(d,1:(n()/5)),by="Stkcd")$Msmvosd)
a1e2[i*12+(h+1)]=weighted.mean(inner_join(y10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd,inner_join(y10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$Msmvosd)
a2e2[i*12+(h+1)]=weighted.mean(inner_join(y10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd,inner_join(y10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$Msmvosd)
a3e2[i*12+(h+1)]=weighted.mean(inner_join(y10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd,inner_join(y10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$Msmvosd)
a4e2[i*12+(h+1)]=weighted.mean(inner_join(y10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd,inner_join(y10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$Msmvosd)
yy8<-left_join(y55,wy,by="Trdmnt")
ddd2<-group_by(yy8,Stkcd)%>%filter(n()>=24)%>%summarise(α=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[1],
β=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[2],
SMB=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[3],
HML=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[4],
RMW=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[5],
CMA=as.matrix(lm(eMretwd~mkt+smb+hml+rmw+cma)$coefficients)[6])
ddd3<-filter(ddd2,β!="NA",SMB!="NA",HML!="NA",RMW!="NA",CMA!="NA")
yy8<-left_join(y6,wy,by="Trdmnt")
yy9<-left_join(yy8,ddd3,by="Stkcd")%>%filter(β!="NA",SMB!="NA",HML!="NA",RMW!="NA",CMA!="NA")
yy10<-mutate(yy9,eMretwd=eMretwd-mkt*β-smb*SMB-hml*HML-rmw*RMW-cma*CMA)%>%select(1:8)
a0g1[i*12+(h+1)]=mean(inner_join(yy10,slice(d,1:(n()/5)),by="Stkcd")$eMretwd)
a1g1[i*12+(h+1)]=mean(inner_join(yy10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd)
a2g1[i*12+(h+1)]=mean(inner_join(yy10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd)
a3g1[i*12+(h+1)]=mean(inner_join(yy10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd)
a4g1[i*12+(h+1)]=mean(inner_join(yy10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd)
a0g2[i*12+(h+1)]=weighted.mean(inner_join(yy10,slice(d,1:(n()/5)),by="Stkcd")$eMretwd,inner_join(yy10,slice(d,1:(n()/5)),by="Stkcd")$Msmvosd)
a1g2[i*12+(h+1)]=weighted.mean(inner_join(yy10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$eMretwd,inner_join(yy10,slice(d,(n()/5*1+1):(n()/5*(1+1))),by="Stkcd")$Msmvosd)
a2g2[i*12+(h+1)]=weighted.mean(inner_join(yy10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$eMretwd,inner_join(yy10,slice(d,(n()/5*2+1):(n()/5*(2+1))),by="Stkcd")$Msmvosd)
a3g2[i*12+(h+1)]=weighted.mean(inner_join(yy10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$eMretwd,inner_join(yy10,slice(d,(n()/5*3+1):(n()/5*(3+1))),by="Stkcd")$Msmvosd)
a4g2[i*12+(h+1)]=weighted.mean(inner_join(yy10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$eMretwd,inner_join(yy10,slice(d,(n()/5*4+1):(n()/5*(4+1))),by="Stkcd")$Msmvosd)
ms<-max(slice(group_by(arrange(y55,Trdmnt),Stkcd),n())$Trdmnt)
y11<-filter(y5,Trdmnt==ms)%>%select(1,3)
y12<-left_join(d,y11,by="Stkcd")%>%filter(Msmvosd!="NA")%>%arrange(Msmvosd)
for(l in 0:4){
a0f1[[l+1]][i*12+(h+1)]=mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*0+1):(n()/5*(0+1))),-Msmvosd),by="Stkcd")$eMretwd)
a1f1[[l+1]][i*12+(h+1)]=mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*1+1):(n()/5*(1+1))),-Msmvosd),by="Stkcd")$eMretwd)
a2f1[[l+1]][i*12+(h+1)]=mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*2+1):(n()/5*(2+1))),-Msmvosd),by="Stkcd")$eMretwd)
a3f1[[l+1]][i*12+(h+1)]=mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*3+1):(n()/5*(3+1))),-Msmvosd),by="Stkcd")$eMretwd)
a4f1[[l+1]][i*12+(h+1)]=mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*4+1):(n()/5*(4+1))),-Msmvosd),by="Stkcd")$eMretwd)
a0f2[[l+1]][i*12+(h+1)]=weighted.mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*0+1):(n()/5*(0+1))),-Msmvosd),by="Stkcd")$eMretwd,
inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*0+1):(n()/5*(0+1))),-Msmvosd),by="Stkcd")$Msmvosd)
a1f2[[l+1]][i*12+(h+1)]=weighted.mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*1+1):(n()/5*(1+1))),-Msmvosd),by="Stkcd")$eMretwd,
inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*1+1):(n()/5*(1+1))),-Msmvosd),by="Stkcd")$Msmvosd)
a2f2[[l+1]][i*12+(h+1)]=weighted.mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*2+1):(n()/5*(2+1))),-Msmvosd),by="Stkcd")$eMretwd,
inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*2+1):(n()/5*(2+1))),-Msmvosd),by="Stkcd")$Msmvosd)
a3f2[[l+1]][i*12+(h+1)]=weighted.mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*3+1):(n()/5*(3+1))),-Msmvosd),by="Stkcd")$eMretwd,
inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*3+1):(n()/5*(3+1))),-Msmvosd),by="Stkcd")$Msmvosd)
a4f2[[l+1]][i*12+(h+1)]=weighted.mean(inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*4+1):(n()/5*(4+1))),-Msmvosd),by="Stkcd")$eMretwd,
inner_join(yy10,select(slice(arrange(slice(y12,(n()/5*l+1):(n()/5*(l+1))),desc(tβ)),(n()/5*4+1):(n()/5*(4+1))),-Msmvosd),by="Stkcd")$Msmvosd)}}}