web-dev-qa-db-ja.com

ペアワイズ相関表

私はRを初めて使用するので、これが簡単な質問であるかどうかをお詫びしますが、今晩はかなりの検索を行ったため、理解できないようです。多数の変数を含むデータフレームがあります。私がやりたいのは、これらのサブセット間の相関のテーブルを作成することです。基本的には、Stataの「pwcorr」または「correlations」に相当します。 SPSS。これに対する1つの鍵は、rが必要なだけでなく、その値に関連付けられた重要性も必要なことです。

何か案は?これは非常に単純なはずですが、良い方法がわからないようです。

14
Cody

Bill Venablesは、このソリューションを この回答 で提供しています。Rメーリングリストから、少し変更を加えました。

cor.prob <- function(X, dfr = nrow(X) - 2) {
  R <- cor(X)
  above <- row(R) < col(R)
  r2 <- R[above]^2
  Fstat <- r2 * dfr / (1 - r2)
  R[above] <- 1 - pf(Fstat, 1, dfr)

  cor.mat <- t(R)
  cor.mat[upper.tri(cor.mat)] <- NA
  cor.mat
}

それでは、テストしてみましょう。

set.seed(123)
data <- matrix(rnorm(100), 20, 5)
cor.prob(data)

          [,1]      [,2]      [,3]      [,4] [,5]
[1,] 1.0000000        NA        NA        NA   NA
[2,] 0.7005361 1.0000000        NA        NA   NA
[3,] 0.5990483 0.6816955 1.0000000        NA   NA
[4,] 0.6098357 0.3287116 0.5325167 1.0000000   NA
[5,] 0.3364028 0.1121927 0.1329906 0.5962835    1

それはcor.testと一致しますか?

cor.test(data[,2], data[,3])

 Pearson's product-moment correlation
data:  data[, 2] and data[, 3] 
t = 0.4169, df = 18, p-value = 0.6817
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval:
 -0.3603246  0.5178982 
sample estimates:
       cor 
0.09778865 

正常に動作しているようです。

10
sebastian-c

sjPlot-packagesjt.corr関数を使用できます。これにより、Officeアプリケーションですぐに使用できる、適切にフォーマットされた相関テーブルが得られます。

最も単純な関数呼び出しは、データフレームを渡すことです。

sjt.corr(df)

ここの例 を参照してください。

3
Daniel

これが私が作成したものです。変数のすべてのペアを取得し、整然としたnX3データフレームを取得する方法を探していたので、この投稿に出くわしました。列1は変数、列2は変数、列3と4はそれらの絶対値と真の相関です。関数に数値と整数値のデータフレームを渡すだけです。

  pairwiseCor <- function(dataframe){
  pairs <- combn(names(dataframe), 2, simplify=FALSE)
  df <- data.frame(Vairable1=rep(0,length(pairs)), Variable2=rep(0,length(pairs)), 
                   AbsCor=rep(0,length(pairs)), Cor=rep(0,length(pairs)))
  for(i in 1:length(pairs)){
    df[i,1] <- pairs[[i]][1]
    df[i,2] <- pairs[[i]][2]
    df[i,3] <- round(abs(cor(dataframe[,pairs[[i]][1]], dataframe[,pairs[[i]][2]])),4)
    df[i,4] <- round(cor(dataframe[,pairs[[i]][1]], dataframe[,pairs[[i]][2]]),4)
  }
  pairwiseCorDF <- df
  pairwiseCorDF <- pairwiseCorDF[order(pairwiseCorDF$AbsCor, decreasing=TRUE),]
  row.names(pairwiseCorDF) <- 1:length(pairs)
  pairwiseCorDF <<- pairwiseCorDF
  pairwiseCorDF
  }

出力は次のとおりです。

 > head(pairwiseCorDF)
             Vairable1        Variable2 AbsCor     Cor
    1        roll_belt     accel_belt_z 0.9920 -0.9920
    2 gyros_dumbbell_x gyros_dumbbell_z 0.9839 -0.9839
    3        roll_belt total_accel_belt 0.9811  0.9811
    4 total_accel_belt     accel_belt_z 0.9752 -0.9752
    5       pitch_belt     accel_belt_x 0.9658 -0.9658
    6 gyros_dumbbell_z  gyros_forearm_z 0.9491  0.9491
3
user3728456

私は、Rパッケージpicanteがあなたが抱えている問題に対処する素晴らしい仕事をしていることを発見しました。データセットをcor.table関数に簡単に渡して、すべての変数の相関とp値のテーブルを取得できます。関数でピアソンのrまたはスピアマンを指定できます。ヘルプについては、次のリンクを参照してください: http://www.inside-r.org/packages/cran/picante/docs/cor.table

また、関数を実行する前に、データセットから数値以外の列を削除することを忘れないでください。コードの例を次に示します。

install.packages("picante")
library(picante)
#Insert the name of your dataset in the code below
cor.table(dataset, cor.method="pearson")
3
jscole

素晴らしいcor.prob() funktion sebastian-cに加えて、上記で引用したように、自己相関をダッシュ​​に置き換える必要がありました。これは次のコードで実現されます。

cor.tbl <- round(cor.prob(data), 3)
cor.tbl[cor.tbl == 1] <- "-"
0
jay.sf