数据分析第七篇:相关分析(代码片段)

ljhdo ljhdo     2023-01-10     445

关键词:

相关分析是数据分析的一个基本方法,可以用于发现不同变量之间的关联性,关联是指数据之间变化的相似性,这可以通过相关系数来描述。发现相关性可以帮助你预测未来,而发现因果关系意味着你可以改变世界。 

一,协方差和相关系数

如果随机变量X和Y是相互独立的,那么协方差

Cov(X,Y) = E [X-E(X)] [Y-E(Y)] = 0,

这意味着当协方差Cov(X,Y) 不等于 0 时,X和Y不相互独立,而是存在一定的关系,此时,称作X和Y相关。在统计学上,使用协方差和相关系数来描述随机变量X和Y的相关性:

协方差:如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。从数值来看,协方差的数值越大,两个变量同向程度也就越大。

技术分享图片µ是变量的期望。

相关系数:相关系数消除了两个变量变化幅度的影响,只是单纯反应两个变量每单位变化时的相似程度

技术分享图片δ是变量的标准差。

相关系数用于描述定量变量之间的关系,相关系数的符号(+、-)表明关系的方向(正相关、负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。

例如,下面两种情况中,很容易看出X和Y都是同向变化的,而这个“同向变化”有个非常显著特征:X、Y同向变化的过程,具有极高的相似度。

技术分享图片

1,观察协方差,情况一的协方差是:

技术分享图片

情况二的协方差是:

 技术分享图片

协方差的数值相差一万倍,只能从两个协方差都是正数判断出在这两种情况下X、Y都是同向变化,但是一点也看不出两种情况下X、Y的变化都具有相似性这一特点。

2,观察相关系数,情况一的相关系数是:

技术分享图片

情况二的相关系数是:

 技术分享图片

虽然两种情况的协方差相差1万倍,但是,它们的相关系数是相同的,这说明,X的变化与Y的变化具有很高的相似度。

二,相关的类型

R可以计算多种相关系数,包括Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数。下面让我们依次理解这些相关系数。

1,Pearson、Spearman和Kendall相关系数

Pearson积差相关系数衡量了两个定量变量之间的线性相关程度,Spearman等级相关系数则衡量分级定序变量之间的相关程度,Kendall相关系数也是一种非参数的等级相关度量。cor()函数可以计算这三种相关系数,而cov()函数可以计算协方差。

cor(x, y = NULL, use = "everything", method = c("pearson", "kendall", "spearman"))

cov(x, y = NULL, use = "everything", method = c("pearson", "kendall", "spearman"))

参数注释:

  • x:矩阵或数据框
  • y:默认情况下,y=NULL表示y=x,也就是说,所有变量之间两两计算相关,也可以指定其他的矩阵或数据框,使得x和y的变量之间两两计算相关。
  • use:指定缺失数据的处理方式,可选的方式为all.obs(遇到缺失数据时报错)、everything(遇到缺失数据时,把相关系数的计算结果设置为missing)、complete.obs(行删除)以及pairwise.complete.obs(成对删除)
  • method:指定相关系数的类型,可选类型为"pearson", "kendall", "spearman"

例如,使用R基础安装包中的state.x77数据集,它提供了美国50个州的人口、收入、文盲率(Illiteracy)、预期寿命(Life Exp)、谋杀率和高中毕业率(HS Grad)等数据。

states <- state.x77[,1:6]

> cor(states)
            Population     Income Illiteracy    Life Exp     Murder     HS Grad
Population  1.00000000  0.2082276  0.1076224 -0.06805195  0.3436428 -0.09848975
Income      0.20822756  1.0000000 -0.4370752  0.34025534 -0.2300776  0.61993232
Illiteracy  0.10762237 -0.4370752  1.0000000 -0.58847793  0.7029752 -0.65718861
Life Exp   -0.06805195  0.3402553 -0.5884779  1.00000000 -0.7808458  0.58221620
Murder      0.34364275 -0.2300776  0.7029752 -0.78084575  1.0000000 -0.48797102
HS Grad    -0.09848975  0.6199323 -0.6571886  0.58221620 -0.4879710  1.00000000

可以看到,收入和高中毕业率之间存在很强的正相关(约0.620),文盲率和谋杀率之间存在很强的正相关(约0.703),文盲率和高中毕业率之间存在很强的负相关(约-0.657),预期寿命和谋杀率之间存在很强的负相关(约-0.781)等。

2,偏相关

偏相关是指在控制一个或多个定量变量(称作条件变量)时,另外两个定量变量之间的相关关系。可以使用ggm包中的pcor()函数计算偏相关系数。

pcor(u, S)

参数注释:

  • u:位置向量,前两个整数表示要计算偏相关系数的变量下标,其余的整数为条件变量的下标。
  • S:是数据集的协方差矩阵,即cov()函数计算的结果

例如:在控制了收入、文盲率和高中毕业率的条件下,计算的人口和谋杀率之间的偏相关系数为0.346

> library(igraph)
> library(ggm)
> colnames(states)
[1] "Population" "Income"     "Illiteracy" "Life Exp"   "Murder"     "HS Grad"  
> pcor(c(1,5,2,3,6),cov(states))
[1] 0.3462724

三,相关性的显著性检验

在计算好相关系数之后,需要对相关性进行显著性检验,常用的原假设是变量间不相关(即总体的相关系数为0),可以使用cor.test()函数对单个的Pearson、Spearman和Kendall相关系数进行显著性检验,以验证原假设是否成立。如果p值很小,说明变量之间存在相关性,相关性的大小由相关系数确定。

显著性检验返回的结果中,p值(p value)就是当原假设为真时所得到的样本观察结果出现的概率。如果p值很小,说明原假设情况的发生的概率很小,而如果出现了,根据小概率原理,我们就有理由拒绝原假设,p值越小,我们拒绝原假设的理由越充分。

小概率原理是指:在统计学中,通常把在现实世界中发生几率小于5%的事件称之为“不可能事件”,通常把显著性水平定义为0.05,或0.025。当p值小于显著性水平时,把原假设视为不可能事件,因为拒绝原假设。

1,cor.test()检验

cor.test()每次只能检验一种相关关系,原假设是变量间不相关,即总体的相关系数是0。

cor.test(x, y,
         alternative = c("two.sided", "less", "greater"),
         method = c("pearson", "kendall", "spearman"),
         exact = NULL, conf.level = 0.95, continuity = FALSE, ...)

参数注释:

  • alternative:用于指定进行双侧检验还是单侧检验,有效值是 "two.sided", "greater" 和 "less",对于单侧检验,当总体的相关系数小于0时,使用alternative="less";当总体的相关系数大于0时,使用alternative="greater";默认情况下,alternative="two.side",表示总体相关系数不等于0。
  • method:指定计算的相关类型,
  • exact:逻辑值,是否计算出精确的p值
  • conf.level:检验的置信水平

例如,下面的代码用于检验预期寿命和谋杀率的Pearson相关系数为0的原假设,

> cor.test(states[,3],states[,5])

    Pearsons 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 

检验的结果是:p值(p-value=1.258e-08),样本估计的相关系数cor 是 0.703,这说明:

假设总体的相关度为0,则预计在1千万次中只会有少于1次的机会见到0.703的样本相关度,由于这种情况几乎不可能发生,所以拒绝原假设,即预期寿命和谋杀率之间的总体相关度不为0。

2,corr.test()检验

psych包中的corr.test()函数,可以依次为Pearson、Spearman或Kendall计算相关矩阵和显著性水平。

corr.test(x, y = NULL, use = "pairwise",method="pearson",adjust="holm", alpha=.05,ci=TRUE)

参数注释:

  • use:指定缺失数据的处理方式,默认值是pairwise(成对删除);complete(行删除)
  • method:计算相关的方法,Pearson(默认值)、Spearman或Kendall

3,偏相关的显著性检验

在多元正态性的假设下,psych包中的pcor.test()函数用于检验在控制一个或多个条件变量时,两个变量之间的独立性。

pcor.test(r, q, n)

参数注释:

  • r:是由pcor()函数计算得到的偏相关系数
  • q:要控制的变量(以位置向量表示)
  • n:样本大小

 

参考文档:

如何通俗易懂地解释「协方差」与「相关系数」的概念?

perfview专题(第七篇):如何洞察触发gc的c#代码?(代码片段)

一:背景上一篇我们聊到了如何用PerfView洞察GC的变化,但总感觉还缺了点什么?对,就是要跟踪到底是什么代码触发了GC,这对我们分析由于GC导致的CPU爆高有非常大的参考价值,在以前我都是用WinDBG来实... 查看详情

第七篇商城系统-商品发布-sku和spu管理(代码片段)

商品服务1.新增商品1.1品牌的关联1.1.1PubSub依赖缺失打开新增商品页面的时候会出现的错误提示:原因是缺少:PubSub相关依赖解决办法使用npm添加依赖:npminstall--savepubsub-js(失败的话使用此命令:cnpminstall--savep... 查看详情

第七篇springsecurity中的权限管理

SpringSecurity中的权限管理  SpringSecurity是一个权限管理框架,核心是认证和授权,前面已经系统的给大家介绍过了认证的实现和源码分析,本文重点来介绍下权限管理这块的原理。一、权限管理的实现  服务端的... 查看详情

第七篇:数据预处理-数据归约(pca/efa为例)

前言    这部分也许是数据预处理最为关键的一个阶段。    如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析。    本文仅介绍主成分分析法(PC... 查看详情

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

powerbi开发第七篇:数据集和数据刷新

PowerBI报表是基于数据分析的引擎,数据真正的来源(DataSource)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样。PowerBIService(云端)有时不直接访问DataSource,而是直接从PowerBIService创建的数据集(Dataset)中获... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或... 查看详情

flask初识,第七篇,flask中的路由(代码片段)

 Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用@app.route("/",methods=["GET","POST"])为什么要这么用?其中的工作原理我们知道多少?请关注跟DragonFire学Flask之路由系统,这里有你想要的答案 1.@app.route()装饰器... 查看详情

第七篇flowable核心内容之任务分配(代码片段)

Flowable的任务分配1.任务分配1.1固定分配  固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式1.2表达式分配  Flowable使用UEL进行表达式解析。UEL代表UnifiedExpressionLanguage,是EE6... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多... 查看详情

jdk11|第七篇:zgc垃圾收集器(代码片段)

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/gfdml-SfvhFdMXlAu-a61w一、简介Java11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。在本文中,我们将介绍开发新GC的动机,技术... 查看详情

混合编程jni第七篇之jni的命令行们(代码片段)

 系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客        今天将继续JNI的学习,jni编程中常使用的一些命令行工具如何使用事半功倍,今天就快速的过一下,希望在接下来的使用中... 查看详情

构建之法——第七篇

本周我对于软件的设计与实现和用户体验进行了一个深度的学习。我们写软件就是要解决用户的需求,我们需要表达和传递一些信息:在“需求分析”阶段,我们要搞清楚,在问题领域的现实世界里,都有哪些实体,如何抽象出... 查看详情

vscode源码分析加载第一个画面(代码片段)

...制第六篇:vscode源码分析【六】服务实例化和单例的实现第七篇:vscode源码分析【 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

测开之函数进阶篇・第七篇《装饰器》(代码片段)

目录装饰器开放封闭原则装饰器的作用装饰器的应用场景实现一个装饰器装饰器原理阐述带参数的装饰器装饰器装饰类定义一个时间装饰器装饰器开放封闭原则软件实体应该是可扩展、而不可修改的。也就是说,对扩展是开... 查看详情