R代码和SPSS绘制相关性热图/矩阵的差别说明

博主在使用SPSS统计软件做pearson相关性分析的时候,发现用热图可视化可能效果会更好,于是,博主就去度娘了,然后用R代码绘制,但是发现做显著性的时候(P值检验),p值计算出来竟然不一样,惊呆了!! >_< 然后使劲度娘也没有找到原因,如果小可爱们找到原因一点要@以下我。感谢[/双手合十],下面就回到正题上。

一、绘制相关性热图方法

  1. base::cor() 和base::cor.test()
  2. psych::cor.test()
  3. Hmisc::rcorr()
  4. corrplot::cor.mtest()

以上就是找到的方法,最后博主还是使用基础包中的方式绘制了相关性热图,代码在后面附上。以上几种方法请看别的博主的链接:
>>>1、2、3讲解<<<
>>>4讲解<<<


(1)避坑

  1. 博主使用的是cor.mtest()来看显著性检验的,但是结果和SPSS或者base::cor.test()结果相差甚远呐。。。。
  • cor.mtest()
    R代码和SPSS绘制相关性热图/矩阵的差别说明_第1张图片
  • base::cor.test()
    R代码和SPSS绘制相关性热图/矩阵的差别说明_第2张图片
    注解: 具体啥cor.mtest()啥 原因,咋也不懂呐,明白的小可爱记得留言一下啊。

(2)使用base::cor()计算相关系数,使用base::cor.test()计算p值,做相关性检验

  • 读取csv数据
#读取数据
data_read <- read.csv("C:/Users/zang/Desktop/Time-series/2013_成渝地区_01.csv",header = T)
  • 计算相关系数
#计算相关系数并保留小数位数
mycor <- cor(data_read,method = 'pearson')
mycor <- round(mycor,3)
  • 计算p值:编写函数计算
#计算p值
cor.mtest1 <- function(mat, ...) {
  mat <- as.matrix(mat)
  n <- ncol(mat)
  p.mat<- matrix(NA, n, n)
  diag(p.mat) <- 0
  for (i in 1:(n - 1)) {
    for (j in (i + 1):n) {
      tmp <- cor.test(mat[, i], mat[, j], ...)
      p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
    }
  }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
matrix_p=cor.mtest1(data_read)
  • 绘制相关性热图/矩阵图 corrplot包
corrplot(mycor,              # 数据
         type = 'upper',      #type修改类型   默认full,下三角lower,上三角upper
         #p.mat = matrix_p,sig.level = 0.05,insig = 'blank'    #不显著的框为白色
         #p.mat = matrix_p,sig.level = 0.05,insig = 'p-value',    #不显著的显示p值
         #p.mat = matrix_p,sig.level = -1, order="hclust",insig = 'p-value',    #sig.level =-1 显示所有p值    是按照分层聚类的结果排序
         p.mat = matrix_p, sig.level = c(.001, .01, .05),outline="white",insig = "label_sig" ,  #添加显著性星标*   insig为"label_sig",可用于显示不同显著水平的星标;
         #na.label = "NA"  #缺失值的展示,默认是用?
)

完整代码如下:

library(corrplot)
library(readr)

#读取数据
#data_read <- read.csv("G:/皮尔逊相关系数/年均值-2013/result/相关热图-矩阵图/8套模拟数据+站点插值数据_珠三角.csv",header = T)
data_read <- read.csv("C:/Users/zang/Desktop/Time-series/2013_成渝地区_01.csv",header = T)

#计算相关系数
mycor <- cor(data_read,method = 'pearson')
mycor

#保留小数点
mycor <- round(mycor,3)



######### base::cor.test() 计算p值  此方法跟spss计算的结果一致#############
cor.mtest1 <- function(mat, ...) {
  mat <- as.matrix(mat)
  n <- ncol(mat)
  p.mat<- matrix(NA, n, n)
  diag(p.mat) <- 0
  for (i in 1:(n - 1)) {
    for (j in (i + 1):n) {
      tmp <- cor.test(mat[, i], mat[, j], ...)
      p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
    }
  }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
matrix_p=cor.mtest1(data_read)

matrix_p

###########################################################



##################绘制相关系数热图、矩阵图##############################
corrplot(mycor,              # 数据
         type = 'upper',      #type修改类型   默认full,下三角lower,上三角upper
         #p.mat = matrix_p,sig.level = 0.05,insig = 'blank'    #不显著的框为白色
         #p.mat = matrix_p,sig.level = 0.05,insig = 'p-value',    #不显著的显示p值
         #p.mat = matrix_p,sig.level = -1, order="hclust",insig = 'p-value',    #sig.level =-1 显示所有p值    是按照分层聚类的结果排序
         p.mat = matrix_p, sig.level = c(.001, .01, .05),outline="white",insig = "label_sig" ,  #添加显著性星标*   insig为"label_sig",可用于显示不同显著水平的星标;
         #na.label = "NA"  #缺失值的展示,默认是用?
)

注: 以上就是本次绘制相关性热图的一些避坑小技巧,至于上面所说的cor.mtest()如何解决暂时没有找到办法,找到的小可爱们留个言呗,[双手合十]。

你可能感兴趣的:(R语言相关,r语言,矩阵,开发语言,相关性热图/矩阵,深度学习)