R语言-实现按日期分组求皮尔森相关系数矩阵

 更新时间:2021年04月17日 10:47:29   作者:大猫__0  
这篇文章主要介绍了R语言-实现按日期分组求皮尔森相关系数矩阵,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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)

缺失值比例图如下:

2

分组计算并分组保存:

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'))#将相关系数矩阵存到文件中
}

补充:Pearson相关系数R代码实现

Pearson相关系数(Pearson Correlation Coefficient)

Pearson's r,称为皮尔逊相关系数(Pearson correlation coefficient),用来反映两个随机变量之间的线性相关程度。

要理解皮尔逊相关系数,首先要理解协方差(Covariance)。协方差可以反映两个随机变量之间的关系,如果一个变量跟随着另一个变量一起变大或者变小,那么这两个变量的协方差就是正值,就表示这两个变量之间呈正相关关系,反之相反。

如果协方差的值是个很大的正数,我们可以得到两个可能的结论:

(1) 两个变量之间呈很强的正相关性

(2) 两个变量之间并没有很强的正相关性,协方差的值很大是因为X或Y的标准差很大

那么到底哪个结论正确呢?只要把X和Y变量的标准差,从协方差中剔除不就知道了吗?

协方差能告诉我们两个随机变量之间的关系,但是却没法衡量变量之间相关性的强弱。

因此,为了更好地度量两个随机变量之间的相关程度,引入了皮尔逊相关系数。

可以看到,皮尔逊相关系数就是用协方差除以两个变量的标准差得到的。

代码如下:

> setwd("F:\\CSDN\\blog")
> states <- state.x77[,1:5]
> cov(states) #计算方差和协方差
              Population      Income   Illiteracy     Life Exp      Murder
Population 19931683.7588 571229.7796  292.8679592 -407.8424612 5663.523714
Income       571229.7796 377573.3061 -163.7020408  280.6631837 -521.894286
Illiteracy      292.8680   -163.7020    0.3715306   -0.4815122    1.581776
Life Exp       -407.8425    280.6632   -0.4815122    1.8020204   -3.869480
Murder         5663.5237   -521.8943    1.5817755   -3.8694804   13.627465
> cor(states) #计算Pearson积差相关系数
            Population     Income Illiteracy    Life Exp     Murder
Population  1.00000000  0.2082276  0.1076224 -0.06805195  0.3436428
Income      0.20822756  1.0000000 -0.4370752  0.34025534 -0.2300776
Illiteracy  0.10762237 -0.4370752  1.0000000 -0.58847793  0.7029752
Life Exp   -0.06805195  0.3402553 -0.5884779  1.00000000 -0.7808458
Murder      0.34364275 -0.2300776  0.7029752 -0.78084575  1.0000000
> cor(states,method = "spearman") #计算spearman等级相关系数
           Population     Income Illiteracy   Life Exp     Murder
Population  1.0000000  0.1246098  0.3130496 -0.1040171  0.3457401
Income      0.1246098  1.0000000 -0.3145948  0.3241050 -0.2174623
Illiteracy  0.3130496 -0.3145948  1.0000000 -0.5553735  0.6723592
Life Exp   -0.1040171  0.3241050 -0.5553735  1.0000000 -0.7802406
Murder      0.3457401 -0.2174623  0.6723592 -0.7802406  1.0000000
> cor.test(states[,3],states[,5]) #进行相关性系数

	Pearson's product-moment correlation

data:  states[, 3] and states[, 5]
t = 6.8479, df = 48, p-value = 1.258e-08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5279280 0.8207295
sample estimates:
      cor 
0.7029752 

> #cor.test()只能检验一种相关关系,psych包提供了更多的选择
> #install.packages("psych")
> library(psych)
> corr.test(states,use = "complete")
Call:corr.test(x = states, use = "complete")
Correlation matrix 
           Population Income Illiteracy Life Exp Murder
Population       1.00   0.21       0.11    -0.07   0.34
Income           0.21   1.00      -0.44     0.34  -0.23
Illiteracy       0.11  -0.44       1.00    -0.59   0.70
Life Exp        -0.07   0.34      -0.59     1.00  -0.78
Murder           0.34  -0.23       0.70    -0.78   1.00
Sample Size 
[1] 50
Probability values (Entries above the diagonal are adjusted for multiple tests.) 
           Population Income Illiteracy Life Exp Murder
Population       0.00   0.44       0.91     0.91   0.09
Income           0.15   0.00       0.01     0.09   0.43
Illiteracy       0.46   0.00       0.00     0.00   0.00
Life Exp         0.64   0.02       0.00     0.00   0.00
Murder           0.01   0.11       0.00     0.00   0.00

 To see confidence intervals of the correlations, print with the short=FALSE option

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • R语言学习VennDiagram包绘制韦恩图示例

    R语言学习VennDiagram包绘制韦恩图示例

    这篇文章主要为大家介绍了R语言学习VennDiagram包绘制韦恩图示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • R语言关于协方差分析实例分析

    R语言关于协方差分析实例分析

    在本篇内容里小编给大家整理的是一篇关于R语言关于协方差分析实例分析内容,有兴趣的朋友们可以学习下。
    2021-05-05
  • R语言 Factor类型的变量使用说明

    R语言 Factor类型的变量使用说明

    这篇文章主要介绍了R语言 Factor类型的变量使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 详解R语言图像处理EBImage包

    详解R语言图像处理EBImage包

    EBImage是R的一个扩展包,提供了用于读取、写入、处理和分析图像的通用功能,非常容易上手,本文给大家介绍下R语言图像处理EBImage包的相关知识,感兴趣的朋友一起看看吧
    2022-02-02
  • R语言时间序列中时间年、月、季、日的处理操作

    R语言时间序列中时间年、月、季、日的处理操作

    这篇文章主要介绍了R语言时间序列中时间年、月、季、日的处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Rstudio中安装package出现的问题及解决

    Rstudio中安装package出现的问题及解决

    这篇文章主要介绍了Rstudio中安装package出现的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解R语言中生存分析模型与时间依赖性ROC曲线可视化

    详解R语言中生存分析模型与时间依赖性ROC曲线可视化

    这篇文章主要介绍了R语言中生存分析模型与时间依赖性ROC曲线可视化,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • R语言 数据表匹配和拼接 merge函数的使用

    R语言 数据表匹配和拼接 merge函数的使用

    这篇文章主要介绍了R语言 数据表匹配和拼接 merge函数的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • R语言实现岭回归的示例代码

    R语言实现岭回归的示例代码

    本文主要介绍了R语言实现岭回归的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • R语言入门之安装R和Rstuido软件

    R语言入门之安装R和Rstuido软件

    这篇文章主要介绍了R语言入门之安装R和Rstuido软件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论