相関
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( ) 関数は単一の相関係数に対して有意性の検定ができる。
相関行列と有意性の検定
# 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に例多数。