相关分析是数据分析的一个基本方法, 可以用于发现不同变量之间的关联性, 关联是指数据之间变化的相似性, 这可以通过相关系数来描述. 发现相关性可以帮助你预测未来, 而发现因果关系意味着你可以改变世界.
一, 协方差和相关系数
如果随机变量 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])
- 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
检验的结果是: 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: 样本大小
参考文档:
如何通俗易懂地解释「协方差」与「相关系数」的概念? https://www.zhihu.com/question/20852004
来源: https://www.cnblogs.com/ljhdo/p/5038541.html