如何迭代参数进行分析

Doc*_*Doc 2 iteration r correlation

有没有更好的方法来迭代给定数据集的一组参数?很显然,我试图让相关系数表:列 "CI,CVP,平均PAP,意味着SAP",行是 "ALAT,ASAT,GGT,臂力器,LDH,FBG".对于每个组合,我想得到相关系数和显着性水平(p = ...).下面你看到"困难的方式".但是有更优雅的方式,可能有可打印的桌子吗?

attach(Liver)
cor.test(CI, ALAT, method = "spearman")
cor.test(CI, ASAT, method = "spearman")
cor.test(CI, GGT, method = "spearman")
cor.test(CI, Bili, method = "spearman")
cor.test(CI, LDH, method = "spearman")
cor.test(CI, FBG, method = "spearman")

cor.test(CVP, ALAT, method = "spearman")
cor.test(CVP, ASAT, method = "spearman")
cor.test(CVP, GGT, method = "spearman")
cor.test(CVP, Bili, method = "spearman")
cor.test(CVP, LDH, method = "spearman")
cor.test(CVP, FBG, method = "spearman")

cor.test(meanPAP, ALAT, method = "spearman")
cor.test(meanPAP, ASAT, method = "spearman")
cor.test(meanPAP, GGT, method = "spearman")
cor.test(meanPAP, Bili, method = "spearman")
cor.test(meanPAP, LDH, method = "spearman")
cor.test(meanPAP, FBG, method = "spearman")

cor.test(meanSAP, ALAT, method = "spearman")
cor.test(meanSAP, ASAT, method = "spearman")
cor.test(meanSAP, GGT, method = "spearman")
cor.test(meanSAP, Bili, method = "spearman")
cor.test(meanSAP, LDH, method = "spearman")
cor.test(meanSAP, FBG, method = "spearman")

detach("Liver")
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 10

诀窍是获得所有可能的组合.在这里,我创建一个data.frame包含10列并使用该combn函数获取所有组合.然后它非常简单地获得corrleation和p值.

set.seed(12)
x <- as.data.frame(matrix(rnorm(100), nrow=10))
combinations <- combn(ncol(x), 2)

out <- apply(combinations, 2, function(idx) {
    t <- cor.test(x[, idx[1]], x[, idx[2]], method = "spearman")
    c(names(x)[idx[1]], names(x)[idx[2]], t$estimate, t$p.value)
})
# more formatting if necessary
out <- as.data.frame(t(out))
names(out) <- c("col.idx1", "col.idx2", "cor", "pval")
Run Code Online (Sandbox Code Playgroud)

Edit:通过利用FUN内部参数combn(根据Greg的建议)更紧凑的代码

set.seed(12)
x <- as.data.frame(matrix(rnorm(100), nrow=10))
out <- as.data.frame(t(combn(ncol(x), 2, function(idx) {
    t <- cor.test(x[, idx[1]], x[, idx[2]], method = "spearman")
    c(names(x)[idx[1]], names(x)[idx[2]], t$estimate, t$p.value)
})))
names(out) <- c("col.idx1", "col.idx2", "cor", "pval")
Run Code Online (Sandbox Code Playgroud)

  • 我就是这样做的,但我很欣赏其他作者已经为众所周知的软件包(如Hmisc)提供测试代码的工作. (2认同)
  • 我不确定,但我认为您可能需要使用:t < - cor.test(x [,idx [1]],x [,idx [2]],method ='spearman')来获得答案原始海报正在寻求. (2认同)

Did*_*rts 9

rcor.test()ltm中有一个函数可以生成相关系数和p值表.例如,使用的数据iris没有您的数据框.

library(ltm)
rcor.test(iris[,1:4],method="spearman")


             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length  *****       -0.167       0.882        0.834     
Sepal.Width   0.041        *****      -0.310       -0.289     
Petal.Length <0.001       <0.001       *****        0.938     
Petal.Width  <0.001       <0.001      <0.001        *****     

upper diagonal part contains correlation coefficient estimates 
lower diagonal part contains corresponding p-values
Run Code Online (Sandbox Code Playgroud)

  • "Hmisc"中还有`rcorr`,它将为您提供相关系数和p值的单独矩阵. (7认同)