R-单变量偏相关控制及多重比较校正

R- partial correlation controlling by one variable and correction for multiple comparisons

我想将一个变量 (a) 与大约 20 个其他变量相关联,使用偏相关控制另一个变量(年龄)。我一直在一次使用 ppcor 包中的 p.cor 一对:

p.cor(a, b, age)

这非常乏味,并且没有考虑多重比较。我找到了 partial.cor from RcmdrMisc, which corrects for multiple comparison but controls for all other variables in the matrix, when I only want to control for age. 个关于如何只控制一个变量的答案,但不能纠正多重比较。

我只是 R 的初学者,但有一些基本的脚本编写经验。任何帮助将不胜感激。

您尝试将变量放入 data.frame 或矩阵中,在这种情况下,我想要与年龄关联的变量是 'y',其他列是我想要与之关联的变量:

set.seed(144)
df = data.frame(y = runif(100),
                age = runif(100,20,60),
                matrix(runif(100*20),ncol=20)
                )
colnames(df)[3:22] = paste0("var",1:20)

定义要与所有其他变量关联的变量、控制变量和其余列:

DV = "y"
IV = "age"
ctrl = setdiff(colnames(df),c(DV,IV))

result = do.call(rbind,lapply(ctrl,function(i){
data.frame(ctrl =i,pcor.test(df[,DV],df[,IV],df[,i]))
}))

head(result)

  ctrl   estimate   p.value statistic   n gp  Method
1 var1 -0.1273527 0.2090534 -1.264576 100  1 pearson
2 var2 -0.1311525 0.1956741 -1.302957 100  1 pearson
3 var3 -0.1182934 0.2435512 -1.173293 100  1 pearson
4 var4 -0.1220453 0.2288147 -1.211060 100  1 pearson
5 var5 -0.1310073 0.1961739 -1.301489 100  1 pearson
6 var6 -0.1309958 0.1962135 -1.301373 100  1 pearson

要获得调整后的 p 值,bonferroni,您可以:

result$padj = p.adjust(result$p.value,method="bonferroni")