2

特定のデータセットのパラメーターのセットを反復処理するためのより良い方法はありますか?明らかに、私は相関係数の表を取得しようとしています。列は「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")
4

2 に答える 2

10

トリックは、すべての可能な組み合わせを取得することです。ここでは、data.frame10 列の を作成し、関数を使用してすべての組み合わせを取得しcombnます。次に、相関値と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")
于 2012-12-28T11:15:32.383 に答える
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
于 2012-12-28T11:18:13.150 に答える