相関

cor( ) 関数で相関係数、cov( ) で共分散が算出できる

使用法: cor(x, use=, method= )

引数 記述
x 行列またはデータフレーム
use all.obs: データを全て使う。欠損値のあるデータをxに指定したときにエラーになる。
complete.obs (リストワイズ除去): 欠損値のあるケース (行) を丸ごと削除。
pairwise.complete.obs (ペアワイズ除去): 欠損値と対応するデータのみ除去。サンプルサイズ自体は一番大きくなる。
method 相関係数のタイプを指定する。 pearson, spearman or kendallの3種。デフォルトはpearson.

# mtcarsデータで使用例.
cor(mtcars, use="complete.obs", method="kendall")
cov(mtcars, use="complete.obs")

cor( ) cov( ) で有意性の検定はできない。cor.test( ) 関数は単一の相関係数に対して有意性の検定ができる。


相関行列と有意性の検定

  • psychパッケージの corr.test( ) 関数
  • Hmiscパッケージの rcorr( ) 関数

# corr.test
library(psych)
corr.test(mtcars)

# rcorr。事前にデータを行列にしておかないといけない
library(Hmisc)
rcorr(as.matrix(mtcars))


相関係数の出力


# corstars() 関数を利用する。オリジナルはHmiscパッケージが必要。Hmiscはpsychと同じ関数があるのでここではpsychパッケージを使ったものにに書き換える。
corstars2 <- function(x){
  require(psych)
  corr.test.res <- corr.test(x)
  R <- corr.test.res$r
  p <- corr.test.res$p
  mystars <- ifelse(p < .01, "** |", ifelse(p < .05, "*  |", "   |"))
  R <- format(round(cbind(rep(-1.111, ncol(x)), R), 3))[,-1]
  Rnew <- matrix(paste(R, mystars, sep=""), ncol=ncol(x))
  diag(Rnew) <- paste(diag(R), "   |", sep="")
  rownames(Rnew) <- colnames(x)
  colnames(Rnew) <- paste(colnames(x), "  |", sep="")
  Rnew <- list(rmat= as.data.frame(Rnew), corrtest = corr.test.res)
  return(Rnew)
  }

xres <- corstars2(swiss[,1:4])
xres
# 下三角行列で出力
  x <- corstars2(swiss[,1:4])$rmat
  x[upper.tri(x)] <- NA
  print(x, na.print="")
# 上三角行列で出力
  x <- corstars2(swiss[,1:4])$rmat
  x[lower.tri(x)] <- NA # 上を作るときは"lower"
  print(x, na.print="")


## その他出力の検証: どれも微妙にずれる。
# corstarsl 関数を使う。
  # デフォルトで下三角。
  xl <- corstarsl(swiss[,1:4])
  xl

# R2htmlでhtml出力。
library(R2HTML)
  HTMLStart(
  outdir=getwd(),
  file="myreport",
  extension="html",
  echo=T,
  HTMLframe=F
  )
HTML.title("My Report", HR=1)
x
HTMLStop()
# xtable
library(xtable)
print(xtable(x), type="html")


他のタイプの相関

  • ポリコリック相関 (polychoric correlation): 多分相関係数ともいう。順序尺度同士の相関係数。polycorパッケージのpolychor関数。パッケージ名はpolycorであるが、関数はpolychorなので注意。 psychパッケージのpolychoric関数がなお便利
  • heterogeneous correlations: pearson, ポリシリアル (数値と順序の相関) 、ポリコリックの3種の相関係数をひとつの行列にまとめたもの (らしい)
  • 偏相関: ggmパッケージのpcor関数で算出可能

    library(ggm)
    data(mydata)
    pcor(c("a", "b", "x", "y", "z"), var(mydata))
    # x, y, zの影響を統制したaとbの相関


相関のグラフ化

corrgram( ) でコレログラムが描ける。また、pairs()splom( )散布図行列が描ける。

R Graph Gallery多数。