R语言按日期分组求相关系数
前几天得到了3700+支股票一周内的波动率,想要计算每周各个股票之间的相关系数并将其可视化。最终结果保存在制定文件夹中。部分数据如下:
先读取数据
data<-read.csv("D:/data/stock_day_close_price_week_series.csv",
header = TRUE,blank.lines.skip = TRUE)
利用mice包处理缺失值:
library(lattice)
library(MASS)
library(mice)
aggr(data,prop=FALSE,numbers=TRUE,sortVars=TRUE)#查看缺失值
imp<-mice(data[,3:7],1)#用链式方程法填补缺失值
stripplot(imp,pch=20,cex=1.2)#查看填补结果
data1<-complete(imp,action = 1)
缺失值比例图如下:
分组计算并分组保存:
d<-unlist(levels(factor(dat[,2])))#得到各个开始日期
mydata<-list()
mydatap<-list()
xg<-list()
for (i in 1:11 ) {#修改组数有多少个开始日期
mydata[[i]] <- filter(dat,Start_date==d[[i]])#按照开始日期对数据分组
mydatap[[i]] <- mydata[[i]][1:nrow(mydata[[i]]),3:7]
xg[[i]]<- cor(t(mydatap[[i]]))#计算相关系数矩阵
rownames(xg[[i]])=mydata[[i]][,1]
colnames(xg[[i]])=mydata[[i]][,1]
dat<-filter(dat,Start_date!=d[[i]])
write.csv (xg[[i]],file=paste0('D:/data/','relation_graph_',d[[i]],'.csv'))#将相关系数矩阵存到文件中
}
部分计算结果:
总代码如下:
data<-read.csv("D:/data/stock_day_close_price_week_series.csv",
header = TRUE,blank.lines.skip = TRUE)
library(colorspace)
library(grid)
library(lattice)
library(mice)
library(data.table)
library(VIM)
library(dplyr)
library(corrplot)
matrixplot(data)
aggr(data,prop=FALSE,numbers=TRUE,sortVars=TRUE)#查看缺失值
imp<-mice(data[,3:7],1)#用链式方程法填补缺失值
stripplot(imp,pch=20,cex=1.2)
data1<-complete(imp,action = 1)
dat<-cbind(data[,1:2],data1)
d<-unlist(levels(factor(dat[,2])))#得到各个开始日期
mydata<-list()
mydatap<-list()
xg<-list()
for (i in 1:11 ) {#修改组数有多少个开始日期
mydata[[i]] <- filter(dat,Start_date==d[[i]])#按照开始日期对数据分组
mydatap[[i]] <- mydata[[i]][1:nrow(mydata[[i]]),3:7]
xg[[i]]<- cor(t(mydatap[[i]]))#计算相关系数矩阵
rownames(xg[[i]])=mydata[[i]][,1]
colnames(xg[[i]])=mydata[[i]][,1]
dat<-filter(dat,Start_date!=d[[i]])
write.csv (xg[[i]],file=paste0('D:/data/','relation_graph_',d[[i]],'.csv'))#将相关系数矩阵存到文件中
}