有没有更好的方法来迭代给定数据集的一组参数? 显然,我试图得到一个相关系数表:列是“CI,CVP,平均PAP,平均SAP”,行是“ALAT,ASAT,GGT,Bili,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")
答案 0 :(得分:10)
诀窍是获得所有可能的组合。在这里,我创建了一个包含10列的data.frame
,并使用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")
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")
答案 1 :(得分: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