相关性分析和作图

news2024/11/19 19:26:35

相关的类型

1. PearsonSpearmanKendall相关
Pearson 积差相关系数衡量了两个定量变量之间的线性相关程度。(连续)
Spearman等级相关系数则衡量分级定序变量之间的相关程度。(分类)
Kendall’s Tau 相关系数也是一种非参数的等级相关度量。
cor() 函数可以计算这三种相关系数,而 cov() 函数可用来计算协方差。两个函数的参数有
很多,其中与相关系数的计算有关的参数可以简化为:
cor(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))
states<-state.x77[,1:6]
cov(states)#协方差
cor <- cor(states)#相关性

1.计量资料 计量资料(measurement data)又称定量资料(quantitative data)或数值变量(numericalvariable)资料。为观测每个观察单位某项指标的大小而获得的资料。其变量值是定量的,表现为数值大小,一般有度量衡单位。根据其观测值取值是否连续,又可分为连续型(continuous)或离散型(discrete)两类。前者可在实数范围内任意取值,如身高、体重、血压等;后者只取整数值,如某医院每年的病死人数等。

2.计数资料 计数资料(cnumeration data)又称定性资料(qualitative data)或无序分类变量(unorderedcategorical variable)资料,亦称名义变量(nominal variable)资料。为将观察单位按某种属性或类别分组计数,分组汇总各组观察单位数后而得到的资料。其变量值是定性的,表现为互不相容的属性或类别,如试验结果的阳性阴性、家族史的有无等。分两种情形:

(1)二分类:如检查某小学学生大便中的蛔虫卵,以每个学生为观察单位,结果可报告为蛔虫卵阴性与阳性两类;如观察某药治疗某病患者的疗效,以每个患者为观察单位,结果可归纳为治愈与未愈两类。两类间相互对立,互不相容。

(2)多分类:如观察某人群的血型分布,以人为观察单位,结果可分为A型、B型、AB型与O型,为互不相容的四个类别。

3.等级资料 等级资料(ranked data)又称半定量资料(semi-quantitative data)或有序分类变量(ordinalcategorical variable)资料。为将观察单位按某种属性的不同程度分成等级后分组计数,分类汇总各组观察单位数后而得到的资料。其变量值具有半定量性质,表现为等级大小或属性程度。如观察某人群某血清反应,以人为观察单位,根据反应强度,结果可分一、±、+、++、+++、++++六级;又如观察用某药治疗某病患者的疗效,以每名患者为观察单位,结果可分为治愈、显效、好转、无效四级等。

2. 偏相关
偏相关 是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。你可以使用
ggm 包中的 pcor() 函数计算偏相关系数。
library(ggm)
pcor(c(1,5,2,3,6),cov(states))
[1] 0.3462724
在控制了收入、文盲率和高中毕业率的影响时,人口和谋杀率之间的相关系数为
0.346

pcor(c(1,5,2,3,6),cov(states))##控制了变量

相关性的显著性检验

cor.test()

可以使用cor.test()函数对单个的PearsonSpearmanKendall相 系数进行检验。简化后的使用格式为:

cor.test(x, y,
         alternative = c("two.sided", "less", "greater"),#指定进行双侧检验或单侧检验
         method = c("pearson", "kendall", "spearman"),#计算的相关类型
         exact = NULL, conf.level = 0.95, continuity = FALSE, ...)
当研究的假设为总体的相关系数小于 0 时,请使用alternative= "less" 。在研究的假设为总体的相关系数大于 0 时,应使用 alternative="greater"。在默认 情况下,假设为 alternative="two.side" (总体相关系数不等于 0 )。
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 
这段代码检验了预期寿命和谋杀率的 Pearson 相关系数为 0的原假设。及预期寿命和谋杀率存在相关性。
corr.test()更好
cor.test 每次只能检验一种相关关系。但幸运的是, psych包中提供的 corr.test() 函数可以一次做更多事情。 corr.test() 函数可以为 Pearson Spearman 或Kendall 相关计算相关矩阵和显著性水平。
library(psych)
res <-corr.test(states,use = "pairwise")
#"pairwise"或"complete" 分别表示对缺失值执行成对删除或行删除
corr <- res$r#可以查看相关性R值
corp <- res$p#可以查看P值
res$p.adj#可以查看FDR值
library(psych)
res <- corr.test(data, exp, use = 'pairwise', 
                 method = 'spearman', adjust = 'holm',#FDR值
                 alpha = 0.05)
res$p.adj#可以查看FDR值
res$r#可以查看相关性R值

相关性方法选择

正态分布Pearson

        直线相关(linear correlation)又称简单相关(simple correlation),用于双变量正态分布(bivariate normaldistribution)资料。直线相关的性质可由散点图直观的说明。

        相关系数(coefficient of correlation)又称Pearson积差相关系数(coefficient of product-momentcorrelation),以符号r表示样本相关系数,符号p表示其总体相关系数。它用来说明具有直线关系的两变量间相关的密切程度与相关方向。R²取值在0到1之间且无单位,其数值大小反映了回归贡献的相对程度,也就是在Y的总变异中回归关系所能解释的百分比。回归平方和越接近总平方和,则r绝对值越接近1,说明相关的实际效果越好。

 正态分布检测:t检验(连续变量)和卡方检验(分类变量)-CSDN博客


data <- iris##鸢尾花数据集
data1 <- data[,c(1,5)]
data2 <- data1[data1$Species=="setosa"|data1$Species=="versicolor",]
##提取鸢尾花数据集的部分数据进行分析

shapiro.test(data2$Sepal.Length)
#W = 0.96964, p-value = 0.02076 不符合正太分布
 
#密度图
ggdensity(data2$Sepal.Length, 
          main = "Density plot of sepal length",
          xlab = "sepal length")
#正态性测试对样本量敏感。小样本最常通过正态性测试。
#因此,重要的是将外观检查和显着性测试相结合以做出正确的决定
#综合分析也可以采用t检验

秩相关Spearman

        秩相关(rank correlation)或称等级相关,是用双变量等级数据作直线相关分析,这类方法对原变量分布不作要求,属于非参数统计方法。适用于下列资料:①不服从双变量正态分布而不宜作积差相关分析,这一点从原始数据的基本统计描述或直观的散点图中可以看出;②总体分布型未知,例如限于仪器测量精度个别样品的具体数值无法读出而出现“超限值”时(如X<0.001);③原始数据是用等级表示用等级相关系数r来说明两个变量间直线相关关系的密切程度与相关方向

相关性热图

corrplot包corrplot函数
数据处理:计算相关性系数和P值
rm(list = ls())
library(corrplot)
# 计算相关性
corData = cor(mtcars,
              method = "pearson",            # 计算相关性的方法有"pearson", "spearman", "kendall"
              use = "pairwise.complete.obs") # 缺失值处理的方式
# 计算相关性的P值和置信区间
testRes = cor.mtest(mtcars,
                    conf.level = 0.95,       # 置信区间
                    method = "pearson")      # 计算相关性的方法有"pearson", "spearman", "kendall"
corrp <- testRes$p

绘图:
#pdf("plot.pdf",width = 4,height = 4)##保存图片
# 绘图
?corrplot
corrplot(corData,
         method = "square",           # 图案形状 "square"方框,"circle"圆, "ellipse"椭圆, "number"数字, "shade"阴影花纹, "color"颜色方框, "pie饼图"
         type = "full",               # 绘制范围"full"全部, "lower"下半部分, "upper"半部分
         col=colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(100), # 主体颜色
         bg = "white",                # 背景颜色
         # col.lim = c(-1,1),         # 数据颜色的范围,是相关性数据的话,直接is.corr = T就好
         title = "ABCD",             # 标题
         is.corr = T,                 # 输入相关性矩阵,数据范围-1到1
         add = F,                     # 是否在原来的图层上添加图形
         diag = T,                    # 是否显示主对角
         outline = "green",           # 轮廓,True或False或设置颜色
         mar = c(5, 4, 4, 2),         # bottom,left,top,right 指定的边距行数(需要一定的边距才能显示标题)
         addgrid.col = NA,          # 网格线的颜色,NA为不绘制,NULl为默认的灰色
         addCoefasPercent = F,        # 是否把相关性数值改为百分数
         order = "original",          # 排序方式 c("original", "AOE", "FPC", "hclust", "alphabet")
         hclust.method = c("complete", "ward", "ward.D", "ward.D2", "single", "average","mcquitty", "median", "centroid"),
         
         #position of text labels标签参数(好像没有缩短图例的参数)
         tl.pos = "lt",               # 位置'lt', 'ld', 'td', 'd' or 'n'   
         tl.cex = 1,                  # 字体的大小
         tl.col = "black",            # 字体的颜色
         tl.offset = 0.4,             # 标签离图案的距离
         tl.srt = 60,                 # 坐标轴标签旋转角度
         #color-legend;图例参数
         cl.pos = "r",                # 图例位置:r右边 b下边 n不显示
         cl.length = NULL,            # 数字越大,图例的分隔越稠
         cl.cex = 0.8,                # 图例的字体大小
         cl.ratio = 0.2,             # 图例的宽度
         cl.align.text = "c",         # 图例文字的对齐方式 l左对齐 c居中 r右对齐
         cl.offset = 1,             # 图例文字距离图例颜色条的距离 居中时无效
         #数值显示
         number.cex = 1,              # 相关性数字标签的字体大小
         number.font = 2,             # 相关性数字标签的字体
         number.digits = 2,           # 相关性数字标签,保留的小数点位数
         na.label = "",               # 当为NA时,显示的内容
         ## P值矩阵
         p.mat = testRes$p,           
         sig.level = 0.05,            # 当p大于sig.level时触发动作
         insig = "label_sig",         # sig.level, insig, pch, pch.col, pch.cex,label_sig(星号)
         
         #置信区间
         plotCI = "n",                # c("n", "square", "circle", "rect")
         lowCI.mat = testRes$lowCI,   # p值置信区间下边界数据
         uppCI.mat = testRes$uppCI,   # p值置信区间上边界数据
)

添加下三角:上下三角不一致

add = T,   diag = F,

#添加图形
corrplot(corData,
         method = "number",            
         type = "lower",   #下三角
         col=colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(100), # 主体颜色
         add = T,                      # 是否在原来的图层上添加图形
         diag = F,                     # 是否显示主对角
         order = "original",          
         na.label = "",                # 当为NA时,显示的内容
         p.mat = testRes$p,            # P值矩阵
         sig.level = 0.05,             # 当p大于sig.level时触发动作
)
dev.off()

ggcorrplot包ggcorrplot函数
数据
rm(list = ls())
library(ggcorrplot)
library(ggtext)
data(mtcars)
corr <- round(cor(mtcars), 2)#相关系数(保留2位小数)
p.mat <- cor_pmat(mtcars)##P值
作图

(这个图例要小很多)

?ggcorrplot
ggcorrplot(corr, method = "square", #"square", "circle"
           type ="full" , #full完全(默认),lower下三角,upper上三角
           ggtheme = ggplot2::theme_minimal,
           title = "ABCD",
           show.legend = TRUE,  #是否显示图例。
           legend.title = "CorrA", #指定图例标题。
           show.diag =T ,    #对角线
           colors = c("blue", "white", "red"), #颜色设置
           outline.color = "white", #指定方形或圆形的边线颜色
           hc.order = FALSE,  #是否按hclust(层次聚类顺序)排列
           ##显示相关性系数设置
           lab =F , #是否添加相关系数
           lab_col = "black", #相关系数的颜色,只有当lab=TRUE时有效
           lab_size = 4, #指定相关系数大小,只有当lab=TRUE时有效。
           
           #P值显示
           p.mat = p.mat ,  #p.mat= p_mat,insig= "pch", pch.col= "red", pch.cex= 4,
           sig.level = 0.05,#P值
           insig = c("pch", "blank"),#显示X
           pch = 8, #8为星号
           pch.cex = 4, #大小
           #标签
           tl.cex = 10, #指定变量文本的大小,
           tl.col = "black", #指定变量文本的颜色,
           tl.srt = 45, #指定变量文本的旋转角度。
           digits = 2 #指定相关系数的显示小数位数(默认2)。
           
)
dev.off()

如果需要显示相关性系数:展示

##显示相关性系数设置
           lab =T , #是否添加相关系数
           lab_col = "black", #相关系数的颜色,只有当lab=TRUE时有效
           lab_size = 4, #指定相关系数大小,只有当lab=TRUE时有效。

计算矩阵后使用pheatmap作图

pheatmap作图可以更好的展示P值

数据准备
rm(list = ls())
library(ggcorrplot)
library(ggtext)
library(psych)
library(pheatmap)
library(reshape2)

data(mtcars)
corr <- round(cor(mtcars), 2)
p.mat <- cor_pmat(mtcars)
table(p.mat<0.05)#P计数

##对所有p值进行判断,p<0.01的以“**”标注,p值0.01<p<0.05的以“*”标注
if (!is.null(p.mat)){
  ssmt <- p.mat< 0.01
  p.mat[ssmt] <-'**'
  smt <- p.mat >0.01& p.mat <0.05
  p.mat[smt] <- '*'
  p.mat[!ssmt&!smt]<- ''
} else {
  p.mat <- F
}
作图
#自定义颜色范围
mycol<-colorRampPalette(c("blue","white","tomato"))(100)
#绘制热图,可根据个人需求调整对应参数
?pheatmap
pheatmap(corr,
         scale = "none",#均一化处理
         cluster_row = T, #行距类
         cluster_col = T, #列聚类
         treeheight_col = 0, #设置为0 即不显示聚类树
         treeheight_row = 20,#行聚类树
         border=NA,#边框颜色
         display_numbers = p.mat,##显著性标记
         fontsize_number = 12, 
         number_color = "white",
         cellwidth = 20, #格子宽度
         cellheight =20,#格子高度
         color=mycol,#颜色
         legend=T,#是否显示图例
         main="ABCD")#标题
dev.off()

参考:

1:医学统计学/孙振球,徐勇勇主编.—4版.一北京:人民卫生出版社,2014

2:R语言实战/(美)卡巴科弗(Kabacoff,R.I.)著;高涛,肖楠,陈钢译.--北京:人民邮电出版社,

2013.1

3:R语言---相关系数_r语言相关系数-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1263821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 | 查找

基本概念 关键字&#xff1a;数据元素中唯一标识该元素的某个数据项的值&#xff0c;使用基于关键字的查找&#xff0c;查找结果应该是唯一的。例如&#xff0c;在由一个学生元素构成的数据集合中&#xff0c;学生元素中“学号”这一数据项的值唯一地标识一名学生。 查找表&a…

【深入解析git和gdb:版本控制与调试利器的终极指南】

【本节目标】 1. 掌握简单gdb使用于调试 2. 学习 git 命令行的简单操作, 能够将代码上传到 Github 上 1.Linux调试器-gdb使用 1.1.背景 程序的发布方式有两种&#xff0c;debug模式和release模式release模式不可被调试&#xff0c;debug模式可被调试Linux gcc/g出来的二进制…

钉钉直播不了检查防火墙配置没有拦截应用测试直通都放行的,电脑还可以ping通直播域名,就是开始不了直播

环境: 防火墙 AF8.0.17 Win10 专业版 问题描述: 钉钉直播不了检查防火墙配置没有拦截应用测试直通都放行的,电脑还可以ping通直播域名,就是开始不了直播 钉钉直播不了 不能直播电脑电脑可以ping通直播域名 防火墙查了3个域名都没有拦截,AF测试应用直通都放行的 解…

CSS问题:如何实现瀑布流布局?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2500字&#xff0c;整篇阅读大约需要4分钟。 本文主要内容分三部分&#xff0c;如果您只需要解决问题&#xff0c;请阅读第一、二部分即可。如果您有更多时间&#xff…

新!2023初中生古诗文大会阅读专辑的考点Word版和在线模拟题来了

如六分成长之前的文章中所述&#xff0c;小学生古诗文大会复选&#xff08;复赛&#xff09;的出题趋势表明&#xff0c;有一些题目出自小学生古诗文阅读专辑&#xff0c;大家纷纷表示考得很细、很难。 所以合理推测&#xff0c;初中生古诗文大会复选&#xff08;复赛&#xf…

如何运行C/C++程序

一、在线运行C/C 码曰 - 让代码在云端多飞一会&#xff1a;这是一个支持C/C&#xff0c;Java&#xff0c;Python等多种语言的在线编程&#xff0c;编译运行&#xff0c;粘贴分享的平台。你可以在这里输入你的代码&#xff0c;点击运行按钮&#xff0c;就可以看到输出结果。你也…

Redis(二):常见数据类型:String 和 哈希

引言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&#xff0c;同时掌握每 种数据结构的常⻅命令&#xff0c;会在使⽤ Redis 的时候做到游刃有余。 Redis 的命令有上百种&#xff0c;我们不可能全部死记硬背下来&#xff0c;但是…

9.2 Windows驱动开发:内核解析PE结构导出表

在笔者的上一篇文章《内核特征码扫描PE代码段》中LyShark带大家通过封装好的LySharkToolsUtilKernelBase函数实现了动态获取内核模块基址&#xff0c;并通过ntimage.h头文件中提供的系列函数解析了指定内核模块的PE节表参数&#xff0c;本章将继续延申这个话题&#xff0c;实现…

vue实现动态路由菜单!!!

目录 总结一、步骤1.编写静态路由编写router.jsmain.js注册 2.编写permisstions.js权限文件编写permisstions.jsaxios封装的APIstore.js状态库system.js Axios-APIrequest.js axios请求实例封装 3.编写菜单树组件MenuTree.vue 4.主页中使用菜单树组件 总结 递归处理后端响应的…

java基础-IO

1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分&#xff0c;因为系统会存在大量处理设备上的数据&#xff0c;这里的设备指硬盘&#xff0c;内存&#xff0c;键盘录入&#xff0c;网络传输等。当然这里需要考虑的问题不仅仅是实现&#xff0c;还包括同步…

人工智能|机器学习——机器学习如何判断模型训练是否充分

一、查看训练日志 训练日志是机器学习中广泛使用的训练诊断工具&#xff0c;每个 epoch 或 iterator 结束后&#xff0c;在训练集和验证集上评估模型&#xff0c;并以折线图的形式显示模型性能和收敛状况。训练期间查看模型的训练日志可用于判断模型训练时的问题&#xff0c;例…

IOC DI入门

1.加上Component&#xff0c;控制翻转&#xff0c;将service和dao都交给IOC容器管理&#xff0c;成为IOC容器中的bean。用哪个类就在哪个类上面加component。 2.加上autowired。依赖注入。controller依赖于service&#xff0c;service依赖于dao。加上时&#xff0c;IOC容器会提…

Taro3+Vue3重构Mpvue小程序项目踩坑记

1、Taro小程序编译时报错&#xff1b; 原因:页面中存在小程序识别不了的标签&#xff1b;如div解决方法&#xff1a; 将div标签替换成小程序可识别的标签&#xff1b; 安装Taro中提供的插件:tarojs/plugin-html, 使其可被识别&#xff1b; 插件安装教程参考Taro官网&#xff1…

Matlab 点云曲率计算(之二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经讨论过许多关于计算曲率的问题,这里使用一个通过拟合三次曲面方程的方式来计算曲率,计算过程如下图所示: 二、实现代码 %********

springboot+bootstarp+jsp房屋租赁系统ssm_t65a9

小型房屋租赁系统主要有管理员、房东和租户三个功能模块。以下将对这三个功能的作用进行详情的剖析。 管理员模块&#xff1a;管理员是系统中的核心用户&#xff0c;管理员登录后&#xff0c;可以对后台系统进行管理。主要功能有个人中心、房东管理、租户管理、房源城市管理、房…

数据库应用:MongoDB 库与集合管理

目录 一、理论 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 二、实验 1.MongoDB用户管理 2.MogoDB库管理 3.MogoDB集合管理 三、问题 1.不显示新创建的数据库 2.插入数据报错 3.删除指定数据库报错 一、理论 1.MongoDB用户管理 (1) 内置角色 数据库用户…

什么是高级语言、机器语言、汇编语言?什么是编译和解释?

1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种&#xff0c;例如 C、C、Java、Python 等。这些语言被称为高级语言&#xff0c;因为它们更接近人类的自然语言&#xff0c;而不是计算机能够直接…

【LeetCode刷题】--38.外观数列

38.外观数列 方法&#xff1a;遍历生成 该题本质上是依次统计字符串中连续相同字符的个数 例如字符串 1112234445666我们依次统计连续相同字符的个数为: 3 个连续的字符 1, 222 个连续的 2&#xff0c;1 个连续的字符 3&#xff0c;3个连续的字符 4&#xff0c;1个连续的字符…

创建一个带有背景图层和前景图层的渲染窗口

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a; 创建一个带有背景图层和前景图层的渲染窗口&#xff0c;知识点&#xff1a;1. 画布转image&#xff1b;2. 渲染图层设置&#xff1b;3.…

如何高效批量生成条形码?

条形码作为商品、库存和信息管理的基础工具&#xff0c;扮演着至关重要的角色。为了满足用户对于高效、专业、多样化的条形码生成需求&#xff0c;我们推出了一款专业高效的在线条形码生成工具。 网址&#xff1a;https://www.1txm.com/ 多样化条形码支持 易条形支持多种常见…