其实本文还是源于NC:全球范围内子囊菌是最优势的真菌类群
他们利用了ppcor这个包计算环境因子之间的相关性。此文即是ppcor的学习笔记。
partial correlations和semi-partial (part)correlations适用于研究消除其他变量的前提下两变量的相关性。具体来说:
partial correlations是指在消除了其他所有随机变量影响的条件下,考察两变量之间的相关性。
semi-partial (part) correlations是指在消除了其他变量对两变量部分影响的条件下(如只消除对其中一个变量的影响),考察两变量之间的相关性。
已有一些包可以做partial correlations,如:
space, parcor包;
corpcor的cor2pcor()函数;
Rcmdr的partial.cor()函数;
qp 包可计算q阶的偏相关系数;
GeneNet的ggm.estimate.pcor()函数可用于高斯函数;
PCIT 可用于信息论;
但是他们都没有提供相关系数显著性水平的P值和统计量,且没有包可以做semi-partial (part)correlations。
ppcor
>install.packages("ppcor")
>library(ppcor)
注意输入的数据不允许有缺失值
# data
>y.data <- data.frame(
hl=c(7,15,19,15,21,22,57,15,20,18),
disp=c(0.000,0.964,0.000,0.000,0.921,0.000,0.000,1.006,0.000,1.011),
deg=c(9,2,3,4,1,3,1,3,6,1),
BC=c(1.78e-02,1.05e-06,1.37e-05,7.18e-03,0.00e+00,0.00e+00,0.00e+00
,4.48e-03,2.10e-06,0.00e+00)
)
>y.data
hl disp deg BC
1 7 0.000 9 1.78e-02
2 15 0.964 2 1.05e-06
3 19 0.000 3 1.37e-05
4 15 0.000 4 7.18e-03
5 21 0.921 1 0.00e+00
6 22 0.000 3 0.00e+00
7 57 0.000 1 0.00e+00
8 15 1.006 3 4.48e-03
9 20 0.000 6 2.10e-06
10 18 1.011 1 0.00e+00
pairwise partial correlation
计算两两变量成对的偏相关 有三种方法,默认pearson method = c("pearson", "kendall", "spearman") 结果中包含以下部分: estiamte即相关性r值; p.value为p值; statistic为对p值进行的统计检验; n为样本数; gp为被限制的变量数;
>pcor(y.data)
$estimate
hl disp deg BC
hl 1.0000000 -0.6720863 -0.6161163 0.1148459
disp -0.6720863 1.0000000 -0.7215522 0.2855420
deg -0.6161163 -0.7215522 1.0000000 0.6940953
BC 0.1148459 0.2855420 0.6940953 1.0000000
$p.value
hl disp deg BC
hl 0.00000000 0.06789202 0.10383620 0.78654997
disp 0.06789202 0.00000000 0.04332869 0.49299871
deg 0.10383620 0.04332869 0.00000000 0.05615021
BC 0.78654997 0.49299871 0.05615021 0.00000000
$statistic
hl disp deg BC
hl 0.0000000 -2.2232666 -1.916030 0.2831875
disp -2.2232666 0.0000000 -2.552768 0.7298173
deg -1.9160295 -2.5527682 0.000000 2.3617433
BC 0.2831875 0.7298173 2.361743 0.0000000
$n
[1] 10
$gp
[1] 2
$method
[1] "pearson"
//////////
除去两个变量"deg" and "BC",计算"hl" and "disp" 的偏相关系数。以下三行等价:
>pcor.test(y.data$hl,y.data$disp,y.data[,c("deg","BC")])
>pcor.test(y.data[,1],y.data[,2],y.data[,c(3:4)])
>pcor.test(y.data[,1],y.data[,2],y.data[,-c(1:2)])
estimate p.value statistic n gp Method
1 -0.6720863 0.06789202 -2.223267 10 2 pearson
semi-partial (part) correlation
部分相关性,计算消除了其余变量对第二个变量的影响之后两变量的偏相关性。 除了方法不同,结果构成和上面相同。
>spcor(y.data)
#semi-partial (part) correlation between "hl" and "disp" given "deg" and "BC"
#以下三行等价
>spcor.test(y.data$hl,y.data$disp,y.data[,c("deg","BC")])
>spcor.test(y.data[,1],y.data[,2],y.data[,c(3:4)])
>spcor.test(y.data[,1],y.data[,2],y.data[,-c(1:2)])
Reference
https://cran.r-project.org/web/packages/ppcor/index.html
Kim, S. (2015) ppcor: An R Package for a Fast Calculation to Semi-partial Correlation Coefficients. Communications for Statistical Applications and Methods, 22(6), 665-674.