R软件版本:[32-bit] E:\R-3.5.1
## 1) 读取Excel数据
library(RODBC)
SSEC_Data <- odbcConnectExcel('stock index.xls')
SSEC <-sqlFetch(SSEC_Data, 'SSEC')
class(SSEC)
SSEC_shjc <- sqlFetch(SSEC_Data, 'SSEC-600009')
SSEC_scgf <- sqlFetch(SSEC_Data, 'SSEC-600008')
SSEC_zggm <- sqlFetch(SSEC_Data, 'SSEC-600007')
close(SSEC_Data)
detach(package:RODBC)
如果用的是[64-bit] E:\R-3.5.1
第二行应该用函数
SSEC_Data <- odbcConnectExcel2007('stock index.xls')
不过我本地没有运行成功
## 2) 计算对数收益序列
head(SSEC)
Close.ptd.SSEC <- SSEC$SSEC_Close
Close.rtd.SSEC <- diff(log(Close.ptd.SSEC))*100
SSEC_Date SSEC_Open SSEC_High SSEC_Low
1 2010-01-04 3289.75 3295.28 3243.32
2 2010-01-05 3254.47 3290.51 3221.46
3 2010-01-06 3277.52 3295.87 3253.04
4 2010-01-07 3253.99 3268.82 3176.71
5 2010-01-08 3177.26 3198.92 3149.02
6 2010-01-11 3301.61 3306.75 3197.33
SSEC_Close #
1 3243.76 NA
2 3282.18 NA
3 3254.22 NA
4 3192.78 NA
5 3196.00 NA
6 3212.75 NA
## 3) 从各自个股的数据框中、提取相应的收盘价
Close.ptd.shjc <- SSEC_shjc$SSEC_600009_Close
Close.ptd.scgf <- SSEC_scgf$SSEC_600008_Close
Close.ptd.zggm <- SSEC_zggm$SSEC_600007_Close
## 4) 绘制上证指数收益时间序列图、散点图、自相关图与偏自相关图
par(mfrow=c(2,2),mar=c(5,4,3,2))
which(SSEC$SSEC_Date=="2010-12-31")
Close.ptd.SSEC.ts<-ts(Close.ptd.SSEC,start=c(2010,1,4),freq=242)
plot(Close.ptd.SSEC.ts, type="l",main="(a) 上证指数日收盘价序列图",
xlab="Date",ylab="Price",cex.main=0.95,las=1)
plot(Close.ptd.shjc[1:20], type="p",pch=17,main="(b) 上证指数样本股散点图",
xlab="Time",ylab="Price",cex.main=0.95,ylim=c(4,14),las=1)
points(Close.ptd.scgf[1:20],pch=15)
points(Close.ptd.zggm[1:20],pch=14)
legend("bottomright", legend=c("SHJC_600009","SCGF_600008","ZGGM_600007"),
pch=c(17,15,14),cex=0.6,lty=c(-1,-1,-1))
acf(Close.rtd.SSEC,main='',xlab='Lag',ylab='ACF',las=1)
title(main='(c) 上证指数收益率自相关检验',cex.main=0.95)
pacf(Close.rtd.SSEC,main='',xlab='Lag',ylab='PACF',las=1)
title(main='(d) 上证指数收益率偏自相关检验',cex.main=0.95)
## 5) Q-Q图、 经验累积分布ecdf图、 密度图、直方图
par(mfrow=c(2,2),mar=c(5,4,3,2))
qqnorm(Close.rtd.SSEC,main="(a) 上证指数收益率Q-Q图",cex.main=0.95,
xlab='理论分位数',ylab='样本分位数')
qqline(Close.rtd.SSEC)
ECD.SSEC <- ecdf(Close.rtd.SSEC[1:10])
plot(ECD.SSEC,lwd = 2,main="(b) 上证指数收益率累积分布函数图",cex.main=0.95,las=1)
xx <- unique(sort(c(seq(-3, 2, length=24), knots(ECD.SSEC))))
lines(xx, ECD.SSEC(xx))
abline(v = knots(ECD.SSEC), lty=2, col='gray70')
x1 <- c((-4):3) # 设定区间范围
lines(x1,pnorm(x1,mean(Close.rtd.SSEC[1:10]),sd(Close.rtd.SSEC[1:10])))
D <-density(Close.rtd.SSEC)
plot(D, main="(c) 上证指数核密度曲线图 ",xlab="收益", ylab='密度',
xlim = c(-7,7), ylim=c(0,0.5),cex.main=0.95)
polygon(D, col="gray", border="black")
curve(dnorm,lty = 2, add = TRUE)
x2 <- c(-7:7)
lines(x2,dnorm(x2,mean=0,sd=1))
abline(v=0,lty = 3)
legend("topright", legend=c("核密度","正态密度"),lty=c(1,2),cex=0.5)
hist(Close.rtd.SSEC[1:100],xaxt='n',main='(d) 上证指数收益率直方图',
xlab='收益/100',ylab='密度', freq=F,cex.main=0.95,las=1)
summary(Close.rtd.SSEC[1:100])
x2 <- seq(-6, 4, by=0.01)
lines(x2,dnorm(x2,mean(Close.rtd.SSEC[1:100]),sd(Close.rtd.SSEC[1:100])))
axis(1,at=axTicks(1),labels = as.integer(axTicks(1))/100 )