我想将一个变量(a)与大约20个其他变量关联起来,使用部分相关控制另一个变量(年龄)。我一直在使用ppcor包中的p.cor,每次一对:
p.cor(a, b, age)
这是非常繁琐的,并且没有考虑到多重比较。我找到了部分。当我只想控制年龄时,RcmdrMisc更正了多个比较,但控制了矩阵中的所有其他变量。这个问题回答了如何只控制一个变量,但不纠正多个比较。
我只是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")