R语言相关分析

本文转自https://blog.csdn.net/qq_33683364/article/details/53992564

相关分析

相关系数可以用来描述定量变量之间的关系。相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。我们将关注多种相关系数和相关性的显著性检验。我们将使用R基础安装中的state.x77数据集,它提供了美国50个州在1977年的Population(人口)、Income(收入)、Illiteracy(文盲率)、LifeExp(预期寿命)、Murder(谋杀率)和HSGrad(高中毕业率)数据。数据集中还收录了Frost(气温)和Area(土地面积数据),但为了节约空间,这里将其丢弃。

1.相关的类型

R可以计算多种相关系数,包括Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数。

1.1. Pearson、Spearman和Kendall相关

Pearson积差相关系数衡量了两个定量变量之间的线性相关程度。它是说明有直线关系的两变量间,相关关系密切程度和相关方向的统计指标。

Spearman等级相关系数则衡量分级定序变量之间的相关程度。

Kendall’s Tau相关系数也是一种非参数的等级相关度量。如欲考察几位老师对多篇作文的评分标准是否一致(又称评分者信度),就应该使用肯德尔系数。
对于定序数据而言, Spearman系数与Pearson系数是等价的;如果一个变量为定量数据,一个变量为定序数据,应计算Spearman系数或将定量数据变为定序数据后使用Pearson系数。
肯达尔t系数一个重要优点在于便于解释,如果肯达尔系数等于1/3,意味着:一致情况的出现频率是不一致的两倍(1+t/1-t)

cor() 函数可以计算这三种相关系数,而cov()函数可用来计算协方差。两个函数的参数有很多,其中与相关系数的计算有关的参数可以简化为:

cor(x,use=,method=)

x指矩阵或数据框;

use指定缺失数据的处理方式,可选的方式为all.obs(假设不存在缺失数据——遇到缺失数据时将报错)、everything(遇到缺失数据时,相关系数的计算结果将被设为missing)、complete.obs(行删除)以及pairwise.complete.obs(成对删除,pairwisedeletion);

method指定相关系数的类型。可选类型为pearson、spearman或kendall

states<-state.x77[,1:6]
cov(states)
cor(states)
cor(states,method = "spearman")
cor(mtcars,method = "kendall")
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

请注意,在默认情况下得到的结果是一个方阵(所有变量之间两两计算相关)。你同样可以计算非方形的相关矩阵。观察以下示例:

x<-states[,c("Population","Income","Illiteracy","HS Grad")]
y<-states[,c("Life Exp","Murder")]
cor(x,y)
  
  
  • 1
  • 2
  • 3

当你对某一组变量与另外一组变量之间的关系感兴趣时,cor()函数的这种用法是非常实用的。注意,上述结果并未指明相关系数是否显著不为0(即,根据样本数据是否有足够的证据得出总体相关系数不为0的结论)。由于这个原因,你需要对相关系数进行显著性检验.

1.2. 偏相关

偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。偏相关分析也称净相关分析,它在控制其他变量的线性影响的条件下分析两变量间的线性相关性你可以使用ggm包中的pcor()函数计算偏相关系数。 ggm 包没有被默认安装,在第一次使用之前需要先进行安装。
函数调用格式为:
pcor(u,s)
其中的 u 是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余的数值为条件变量(即要排除影响的变量)的下标。 S 为变量的协方差阵。

library(ggm)
#在控制了收入、文盲率和高中毕业率时
#人口和谋杀率的偏相关系数
pcor(c(1,5,2,3,6),cov(states))
  
  
  • 1
  • 2
  • 3
  • 4

1.3. 其他类型相关

polycor 包中的 hetcor()函数可以计算一种混合的相关矩阵,其中包括数值型变量的Pearson积差相关系数、数值型变量和有序变量之间的多系列相关系数、有序变量之间的多分格相关系数以及二分变量之间的四分相关系数。多系列、多分格和四分相关系数都假设有序变量或二分变量由潜在的正态分布导出。

2.相关性的显著性检验

进行统计显著性检验时,常用的原假设为变量间不相关(即总体的相关系数为0)。

2.1对单个的Pearson、Spearman和Kendall相关系数进行检验。

简化后的使用格式为:
cor.test(x,y,alternative= ,method= )
x 和 y 为要检验相关性的变量;
alternative 则用来指定进行双侧检验或单侧检验(取值为”two.side”、”less”或”greater”),当研究的假设为总体的相关系数小于0时,请使用alternative=”less”。在研究的假设为总体的相关系数大于0时,应使用
alternative=”greater” 。在默认情况下,假设为 alternative=”two.side” (总体相关系数不等于0)。
method 用以指定要计算的相关类型( “pearson” 、”kendall” 或 “spearman” )。

cor.test(states[,3],states[,5])
  
  
  • 1

这段代码检验了预期寿命和谋杀率的Pearson相关系数为0的原假设。假设总体的相关度为0,则预计在一千万次中只会有少于一次的机会见到0.703这样大的样本相关度(即p=1.258e08)。由于这种情况几乎不可能发生,所以可以拒绝原假设,即预期寿命和谋杀率之间的总体相关度不为0。

cor.test 每次只能检验一种相关关系。但幸运的是,ggm包中提供的corr.test()函数可以一次做更多事。 corr.test() 函数可以为Pearson、Spearman或Kendall相关计算相关矩阵和显著性水平。
使用格式为:corr.test(x,use= ,method= )
x指矩阵或数据框;
use= 的取值可为 "pairwise" 或 "complete" (分别表示对缺失值执行成对删除或行删除);
method 用以指定要计算的相关类型( "pearson"(默认) 、"kendall" 或 "spearman" );

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
library(psych)
corr.test(x=states,use="complete")
  
  
  • 1
  • 2
这里可以看到,人口数量和高中毕业率的相关系数(0.10)

  
  
  • 1

2.2偏相关检验

在多元正态性的假设下,psych包中的pcor.test()函数可以用来检验在控制一个或多个额外变量时两个变量之间的条件独立性。
使用格式为:pcor.test(r,q,n)
r 是由 pcor() 函数计算得到的偏相关系数, q 为要控制的变量数(以数值表示位置), n 为样本大小。

  
  
  • 1
  • 2
  • 3
pcor.test(pcor(c(1,5,2,3,6),cov(states)),c(2,3,6),n=states)
  
  
  • 1
psych 包中的 r.test() 函数提供了多种实用的显著性检验方法。

  
  
  • 1

3.相关关系的可视化

以相关系数表示的二元关系可以通过散点图和散点图矩阵进行可视化,而相关图(correlogram)则为以一种有意义的方式比较大量的相关系数提供了一种独特而强大的方法。
以 mtcars 数据框中的变量相关性为例,它含有11个变量,对每个变量都测量了32辆汽车。
mpg   Miles/(US) gallon  英里/加仑
cyl   Number of cylinders气缸数
disp    Displacement (cu.in.)发动机排量
hp    Gross horsepower总马力
drat    Rear axle ratio 最终传动比
wt    Weight (1000 lbs)重量(千英镑)
qsec    1/4 mile time   1/4米加速时间
vs    V/S
am    Transmission (0 = automatic, 1 = manual)换挡方式
gear    Number of forward gears前进档数量
carb    Number of carburetors化油器数量
利用下面的代码,你可以获得该数据的相关系数:

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
options(digits = 2)
cor(mtcars)
  
  
  • 1
  • 2
利用 corrgram 包中的 corrgram() 函数,可以以图形方式展示该相关系数矩阵。
corrgram() 函数基本格式为:corrgram(x,order= ,panel= ,text.panle= ,diag.panel= ) 
x 是一行一个观测的数据框;
order = TRUE 时,相关矩阵将使用主成分分析法对变量重排序,这将使得二元变量的关系模式更为明显。order = FALSE 时,变量按原来的顺序输出。
选项 panel 设定非对角线面板使用的元素类型。你可以通过选项lower.panel和upper.panel来分别设置主对角线下方和上方的元素类型。而 text.panel 和 diag.panel 选项控制着主对角线元素类型。

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
非对角线panel选项 含义
panel.pie 用饼图的填充比例来表示相关性大小
panel.shade 用阴影的深度来表示相关性
panel.ellipse 绘制置信椭圆和平滑拟合曲线
panel.pts 绘制散点图
主对角线panel选项 含义
panel.minmax 输出变量的最大最小值
panel.txt 输出的变量名字
library(corrgram)
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,
         text.panel=panel.txt,main="Correlogram of Mtcars intercorrelations" )
  
  
  • 1
  • 2
  • 3
我们先从下三角单元格(在主对角线下方的单元格)开始解释这幅图形。默认地,蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色和从左上指向右下的斜杠表示变量呈负相关。色彩越深,饱和度越高,说明变量相关性越大。相关性接近于0的单元格基本无色。本图为了将有相似相关模式的变量聚集在一起,对矩阵的行和列都重新进行了排序(使用主成分法)。
从图中含阴影的单元格中可以看到, gear 、 am 、 drat 和 mpg 相互间呈正相关, wt 、 disp 、hp 和 carb 相互间也呈正相关。但第一组变量与第二组变量呈负相关。你还可以看到 carb 和 am 、vs 和 gear 、 vs 和 am 以及 drat 和 qsec 四组变量间的相关性很弱。
上三角单元格用饼图展示了相同的信息。颜色的功能同上,但相关性大小由被填充的饼图块的大小来展示.正相关性将从12点钟处开始顺时针填充饼图,而负相关性则逆时针方向填充饼图。

  
  
  • 1
  • 2
  • 3
library(corrgram)
corrgram(mtcars,order=TRUE,lower.panel=panel.ellipse,
         upper.panel=panel.pts,text.panel=panel.txt,
         diag.panel=panel.minmax,
         main="Correlogram of Mtcars intercorrelations" )
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
我们在下三角区域使用平滑拟合曲线和置信椭圆,上三角区域使用散点图。散点图限制了一些变量的可用值。例如,挡位数须取3、4或5,气缸数须取4、6或者8。am(传动类型)和vs(V/S)都是二值型。因此上三角区域的散点图看起来很奇怪。
为数据选择合适的统计方法时,你一定要保持谨慎的心态。指定变量是有序因子还是无序因子可以为之提供有用的诊断。当R知道变量是类别型还是有序型时,它会使用适合于当前测量水平的统计方法。

  
  
  • 1
  • 2
					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet">
            </div>

相关分析

猜你喜欢

转载自blog.csdn.net/enyayang/article/details/88087589