r语言相关性分析_R语言的相关性分析


今天是生信星球陪你的第588天

大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

花花于2020年4月6日撰写此内容,在结束TCGA项目及完成R包开发后几天开始系统地学习统计学知识。为更好地掌握这一领域内容,整理了一些参考资料。其中发现StatQuest的B站官方频道已提供中英双语版本,并补充了配套的学习资源以辅助理解。同时还有配套的中文学习笔记可供参考。经过努力发现整体难度较之前有所下降,并在持续探索中尚未完全理清头绪。。
1.示例数据
x1:R语言内置数据集iris的前4列。
x2:R语言内置数据集state.x77
x = iris[,-5]x2 = state.x77
state.x77列名的含义:
Population:截至1975年7月1日的人口估计
Income:人均收入(1974)
Illiteracy:文盲率(1970年,占人口百分比)
Life Exp:预期寿命(1969-71年)
Murder:每10万人的谋杀和非过失杀人率(1976)
HS Grad 高中毕业生百分比(1970)
Frost:首都或大城市中最低温度低于冰点(1931-1960)的平均天数
Area:土地面积(平方英里)
2.协方差
使用cov()函数计算。
协方差的概念:当cov(x,y)>0时,说明x和y的变化方向呈正相关;当cov(x,y)<0时,则表明两者呈负相关;若cov(x,y)=0,则表示两者之间不存在相关关系。需要注意的是,协方差对数据波动范围的敏感度较高,在实际应用中不具备衡量变量间相关程度及数据分散程度的能力,在高级统计分析中具有基础地位。
cov(x$Sepal.Length,x$Petal.Length)#> [1] 1.274315cov(x)#> Sepal.Length Sepal.Width Petal.Length Petal.Width#> Sepal.Length 0.6856935 -0.0424340 1.2743154 0.5162707#> Sepal.Width -0.0424340 0.1899794 -0.3296564 -0.1216394#> Petal.Length 1.2743154 -0.3296564 3.1162779 1.2956094#> Petal.Width 0.5162707 -0.1216394 1.2956094 0.5810063pheatmap::pheatmap(cov(x))

image.png
3.相关
3.1计算相关性系数
cor函数能够计算出包括pearson、kendall以及spearman在内的三种相关性指标,默认情况下采用的是...类型的指标进行计算。$...类型的指标属于参数检验范畴,在使用该方法时需要注意满足数据分布的要求:即参与分析的两个变量必须满足正态分布这一前提条件。\$...类型的指标则属于非参数检验方法,在数据分布不确定的情况下可以更好地发挥其作用
输入值为两个向量
cor(x$Sepal.Length,x$Petal.Length)#> [1] 0.8717538cor(x$Sepal.Length,x$Petal.Length,method = "kendall")#> [1] 0.7185159cor(x$Sepal.Length,x$Petal.Length,method = "spearman")#> [1] 0.8818981
输入值为一个数值型数据框/矩阵
cor(x)#> Sepal.Length Sepal.Width Petal.Length Petal.Width#> Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411#> Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259#> Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654#> Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000pheatmap::pheatmap(cor(x))

image.png
可见,计算的结果是x的4个变量(4列)两两之间的相关性。
3.2 相关系数的显著性检验
cor.test(x$Sepal.Length,x$Petal.Length)#> #> Pearson's product-moment correlation#> #> data: x$Sepal.Length and x$Petal.Length#> t = 21.646, df = 148, p-value #> alternative hypothesis: true correlation is not equal to 0#> 95 percent confidence interval:#> 0.8270363 0.9055080#> sample estimates:#> cor #> 0.8717538cor.test(x$Sepal.Length,x$Petal.Length,method = "kendall")#> #> Kendall's rank correlation tau#> #> data: x$Sepal.Length and x$Petal.Length#> z = 12.647, p-value #> alternative hypothesis: true tau is not equal to 0#> sample estimates:#> tau #> 0.7185159cor.test(x$Sepal.Length,x$Petal.Length,method = "spearman")#> Warning in cor.test.default(x$Sepal.Length, x$Petal.Length, method =#> "spearman"): Cannot compute exact p-value with ties#> #> Spearman's rank correlation rho#> #> data: x$Sepal.Length and x$Petal.Length#> S = 66429, p-value #> alternative hypothesis: true rho is not equal to 0#> sample estimates:#> rho #> 0.8818981
在cor.test函数中有一个叫做alternative的参数用来表示单边或双边检验。它有三种情况:当相关性系数为正数时选择'greater';当为负数时选择'less';如果未指定则默认选择'two.sided'。
4.偏相关
在调节若干相关因素时(即),两个连续型变量间的相互关联通常被研究。(这些变量均为连续型数据)
控制某个变量,指的是排除该变量的影响。被控制的变量称为条件变量。
使用ggm::pcor()函数来计算。用法为:pcor(u, S)。
u被定义为一个用于表示列号的向量,在该向量中包含若干项数据。其中前两项构成研究对象的基础部分(即第一项与第二项),其余项则作为条件变量进行分析。例如,在c(1,2,4,5)的情况下,则表明我们将在第四项与第五项的数据条件下考察第一项与第二项之间的相关性
- S 是协方差矩阵
举个栗子
人口数量(第一列)和收入水平(第二列)都可能受到文盲率(第三列)的影响;如果直接单独计算相关性的话:
cor(x2[,1],x2[,3])#> [1] 0.1076224cor(x2[,2],x2[,3])#> [1] -0.4370752
相关系数约为0.1和-4.3。控制其中一个变量计算另一个变量的影响,结果则不同。
#install.packages("ggm")library(ggm)#在控制收入的条件下,人口数量对文盲率的影响pcor(c(1,3,2),cov(x2))#> [1] 0.2257943#在控制人口的条件下,收入对文盲率的影响pcor(c(2,3,1),cov(x2))#> [1] -0.4725271
偏相关系数为0.2和-0.47,相比原来,绝对值大了一些。
同样的道理,控制收入、文盲率的影响,研究人口与谋杀率的偏相关性:
pcor(c(1,5,2,3),cov(x2))#> [1] 0.3621683
偏相关性的显著性检验
pcor.test(pcor(c(2,3,1),cov(x2)),q=3,n=50)#> $tval#> [1] -3.596675#> #> $df#> [1] 45#> #> $pvalue#> [1] 0.0007972922
用法为:pcor.test(r, q, n)
r是偏相关性计算结果,q是变量数,n是样本数,在帮助文档中有描述。
想了解更多课程详情?加入生信零基础入门学习小组吧!
全国巡讲 全球倾听
数据挖掘线上班开课(将原本两周的课程延长至三周)
让我们一起探索单细胞分析的秘密吧!
