欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 统计学