R语言笔记-变量间相关性评价
程序员文章站
2022-05-19 11:58:13
...
文章目录
示例数据:
MASS
包中的
birthwt
数据集。
首先将数据集中的分类变量因子化,具体参考 这里。
连续变量间相关性
为便于处理,将数据集中的连续变量抽取为一新的数据集:cont.vars<-dplyr::select(birthwt,age,lwt,bwt)
计算Pearson、Spearman、Kendall相关系数:cor(,method="")
计算相关系数矩阵的语法:cor(数据框名,method="相关系数名称")
- Pearson相关系数:一般要求两个变量服从正态分布
- Spearman和Kendall相关系数:对变量分布没有要求
> cor(cont.vars,method="pearson")
age lwt bwt
age 1.00000000 0.1800732 0.09031781
lwt 0.18007315 1.0000000 0.18573328
bwt 0.09031781 0.1857333 1.00000000
> cor(cont.vars,method="spearman")
age lwt bwt
age 1.00000000 0.1860614 0.06123376
lwt 0.18606140 1.0000000 0.24888824
bwt 0.06123376 0.2488882 1.00000000
> cor(cont.vars,method="kendall")
age lwt bwt
age 1.00000000 0.1315227 0.03978887
lwt 0.13152272 1.0000000 0.16969573
bwt 0.03978887 0.1696957 1.00000000
计算协方差矩阵,可以使用语法cov(数据框)
。
需注意的是,无论是cor()
还是cov()
,均要求数据框内仅含有连续变量/逻辑型变量,否则会报错:
> cor(birthwt,method="pearson")
Error in cor(birthwt, method = "pearson") : 'x'必需为数值
> cov(birthwt)
Error in cov(birthwt) : is.numeric(x) || is.logical(x) is not TRUE
相关系数的假设检验与置信区间
检验一个相关系数:cor.test()
语法:cor.test(数据框名$变量1,数据框名$变量2,method="相关系数名称")
> cor.test(birthwt$lwt,birthwt$bwt,method = "pearson")
Pearson's product-moment correlation
data: birthwt$lwt and birthwt$bwt
t = 2.5848, df = 187, p-value = 0.0105 # P值
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.04417405 0.31998094 # 相关系数95%CI
sample estimates: # 相关系数估计值
cor
0.1857333
检验相关矩阵下的所有相关系数:corr.test()
psych
包中的corr.test()
函数可以一次性检验一个相关矩阵下的所有相关系数。
语法如下:
corr.test(数据框名,method="相关系数名称")
- 若需要显示相关系数95%CI,以
print()
函数打印该检验结果并声明参数short=FALSE
> print(corr.test(cont.vars,method = "pearson"),short = FALSE)
Call:corr.test(x = cont.vars, method = "pearson")
Correlation matrix
age lwt bwt
age 1.00 0.18 0.09
lwt 0.18 1.00 0.19
bwt 0.09 0.19 1.00
Sample Size
[1] 189
Probability values (Entries above the diagonal are adjusted for multiple tests.)
age lwt bwt
age 0.00 0.03 0.22
lwt 0.01 0.00 0.03
bwt 0.22 0.01 0.00
Confidence intervals based upon normal theory. To get bootstrapped values, try cor.ci
raw.lower raw.r raw.upper raw.p lower.adj
age-lwt 0.04 0.18 0.31 0.01 0.02
age-bwt -0.05 0.09 0.23 0.22 -0.05
lwt-bwt 0.04 0.19 0.32 0.01 0.01
upper.adj
age-lwt 0.33
age-bwt 0.23
lwt-bwt 0.35
偏相关:pcor()
与pcor.test()
偏相关:在控制一个变量时,另两个变量的相关性。
使用ggm
包下的pcor()
与pcor.test()
函数,可实现偏相关系数的计算与检验。
语法如下:
- 计算偏相关系数:
pcor(c(待检变量1名称/序号,待检变量2名称/序号,控制变量名称/序号),cov(数据框名))
> names(cont.vars) # 用于查看变量的序号
[1] "age" "lwt" "bwt"
> pcor(c(2,3,1),cov(cont.vars)) # 声明变量序号的写法
[1] 0.1729928
> pcor(c("lwt","bwt","age"),cov(cont.vars)) # 声明变量名称的写法,与上等价
[1] 0.1729928
- 对偏相关系数进行检验:
pcor.test(pcor()输出结果,q=控制变量序号,n=观测记录数)
> pcor.test(r,q=1,n=nrow(cont.vars))
$tval
[1] 2.308192
$df
[1] 186
$pvalue
[1] 0.02208844
分类变量间相关性
独立分类变量相关性:assocstats()
衡量独立分类变量相关性的指标有:
- Phi系数:只适用于四格表
- 列联系数 (contingency coefficient)
- Cramer’s V系数
使用vcd
包中的assocstats()
函数,可计算上述指标。
语法:assocstats(table(数据框名$分类变量1,数据框名$分类变量2))
> assocstats(table(Arthritis$Treatment,Arthritis$Improved))
X^2 df P(> X^2)
Likelihood Ratio 13.530 2 0.0011536
Pearson 13.055 2 0.0014626
Phi-Coefficient : NA
Contingency Coeff.: 0.367
Cramer's V : 0.394
配对列联表相关性 (一致性):kap()
配对列联表一致性用Kappa统计量表征。
使用epiDisplay
包中的kap()
函数,可计算配对列联表的Kappa统计量。
> my.matrix<-matrix(c(11,2,12,33),nrow=2)
> kap(my.matrix)
Table for calculation of kappa
A B
A 11 12
B 2 33
Observed agreement = 75.86 %
Expected agreement = 55.71 %
Kappa = 0.455
Standard error = 0.121 , Z = 3.762 , P value = < 0.001
上一篇: R语言相关性分析
下一篇: R语言计算相关性和p-values