1偏相関係数

1.1逆行列n 次正方行列 A に関して，
AA−1 = A−1 A = Inとなる行列 A−1 が存在するとき，A−1 を A の逆行列という．

[n = 2 のとき，行列 A =A−1a11a21a12a22[

1=a11 a22 − a12 a21]の逆行列は，

a22−a21−a12a11], ただし a11 a22 − a12 a21 6= 0である．
分割行列の逆行列は次のようになる．

[A11A21A12A22]−1[=A11A21A12A22]()−1A11 − A12 A−122 A21()−1A22 = A22 − A21 A−111 A12A11 =22A12 = − A−1= − A11 A12 A−111 A12 A
2211A21 = − A−1= − A22 A21 A−122 A21 A
111.2

直交射影行列変数群 X = (x1 , x2 , . . . , xm ) の張る空間への直交射影行列を P, X の張る空間の補空間への直交射影行列を Q とすると，以下が成り立つ．

P= X(X0 X)−1 X0

Q = I − P = I − X(X0 X)−1 X0

1.3

P2= P,

Q2 = Q

P0= P,

Q0 = Q

偏相関係数

変数 y 1 , y 2 から，変数群 X = (x1 , x2 , . . . , xm ) の影響を除いたときの，変数 y 1 , y 2 の相関係数 r12|Xを偏相関係数という．
y 1 , y 2 を X の直交補空間に射影したベクトルを w1 , w2 とすると，r12|X は w1 と w2 のなす角のコサイン（w1 と w2 の相関係数）で与えられる．

w1

r12|X= Qy 1 ,===w2 = Qy 2

w01 w2|w1 ||w2 |y 01 QQy 2√ 0√
y 1 QQy 1 y 02 QQy 2y 0 Qy
√ 0 1 √2 0y 1 Qy 1 y 2 Qy 2

1

偏相関係数は，また，すべての変数を含む相関係数行列の逆行列を利用して求めることもできる．

r12|X√=−c12√
c11 c22

ただし，c12 などは，データ D = [y 1 y 2 X] の相関行列の逆行列の要素である．

1.4

相関係数行列の逆行列を用いた偏相関係数行列の算出

標準化されたデータ行列を D = [Y X]，ただし Y = (y 1 , y 2 )，X = (x1 , x2 , . . . , xm ) とする．相関係数
行列 R は，

R ===1 0DD
n1[Y X]0 [Y X]n[]
1 Y0 Y Y0 X.
n X0 Y X 0 X

逆行列は，[−1R= nY0 Y
X0 Y

Y0 X
X0 X]−1.

逆行列の (1, 1) ブロック C11 は 2 × 2 行列であり，

C11[]−1= n Y0 Y − Y0 X(X0 X)−1 X0 Y[]−1= n Y0 (I − X(X0 X)−1 X0 )Y−1= n (Y0 QY)[y 01 Qy 1
= ny 02 Qy 1=]−1y 01 Qy 2y 02 Qy 2ny 02 Qy 2 y 01 Qy 1 − (y 01 Qy 2 )2[y 02 Qy 2−y 02 Qy 1−y 01 Qy 2y 01 Qy 1]

である．これより，√−c12√
c11 c22−y 01 Qy 2√= −√ 0y 2 Qy 2 y 01 Qy 1y 0 Qy
= √ 0 1 √2 0y 1 Qy 1 y 2 Qy 2
= r12|Xとなることが分かる．
上記を一般化すると，相関係数の逆行列を利用することにより，当該 2 変数以外の全ての変数の影響を除去した偏相関係数行列は，次式で求めることができる．

rij|others

=

√−cij
√ ,cii cjj

ただし，cij は，全ての変数を含む相関係数行列の逆行列の (i, j) 要素である．

2

> # 偏相関係数>> setwd("d:\\")> d1 <- read.table("偏相関_データ.csv", header=TRUE, sep=",")> d2 <- d1[2:4]> head(d2)develop shoes math156.8 17.0 37.9
272.3 16.5 21.2
373.6 17.5 40.5
474.6 17.5 43.7
579.6 17.5 35.2
679.6 18.5 43.2>
> # 単相関係数> (r.d2 <-cor(d2))
developshoes
mathdevelop 1.0000000 0.7597318 0.6074204
shoes
0.7597318 1.0000000 0.5658061
math
0.6074204 0.5658061 1.0000000> # 当該の 2 変数以外の全ての変数の影響を除いた偏相関係数> # 相関係数の逆行列を用いて算出する関数> #-----------------------------------------------------> #partial correlation matrix> #> hensoukan <- function(x){+ if (det(x)!=0){+inv.r <- solve(x)+p <- nrow(x)+par.r <- inv.r+d.r <- diag(1/sqrt(diag(inv.r)),p,p)+par.r <- d.r %*% -inv.r %*% d.r+diag(par.r) <- rep(1,p)+
rownames(par.r) <- rownames(x)+colnames(par.r) <- colnames(x)+ }+ return(par.r)+ }> #----------------------------------------------------->> hensoukan(r.d2)

3

developshoes
mathdevelop 1.0000000 0.6351930 0.3311782
shoes
0.6351930 1.0000000 0.2019794
math
0.3311782 0.2019794 1.0000000> # 直交補空間に射影したベクトルで計算する方法> d3 <- scale(d2)> n<- nrow(d3)> r.xqx <- r.d2
> for (i in 1:2){+ for (j in (i+1):3){+ x <- d3[,c(i,j)]+ y <- d3[,c(-i,-j)]+ P <- y%*%solve(t(y)%*%y)%*%t(y)+ Q <- diag(n) - P+ xqx <- t(x)%*% Q %*% x+ r12 <- xqx[1,2]/sqrt(xqx[1,1])/sqrt(xqx[2,2])+ r.xqx[i,j] <- r12+ r.xqx[j,i] <- r12+ }+ }> r.xqx
developshoes
mathdevelop 1.0000000 0.6351930 0.3311782
shoes
0.6351930 1.0000000 0.2019794
math
0.3311782 0.2019794 1.0000000> # partial.r 関数を利用して，1 つ 1 つ算出> library(psych)# psych パッケージの読み込み> partial.r(d2, c(1,2), c(3))
partial correlations
develop shoes
develop1.00 0.64
shoes
0.64 1.00> partial.r(d2, c(1,3), c(2))
partial correlations
develop mathdevelop1.00 0.33
math
0.33 1.00> partial.r(d2, c(2,3), c(1))
partial correlations
shoes mathshoes
1.0 0.2
math
0.2 1.04