my.cor <- function(x)
{
r <- cor(x)
i <- solve(r)
d <- diag(i)
p <- -i/sqrt(outer(d,d))
r[lower.tri(r)] <- p[lower.tri(p)]
diag(r) <- sqrt(1-1/d)
return(r)
}
# example
x <- matrix(c(1,2,3,4,3, 5,14,3,2,4, 6,5,4,6,3, 4,3,2,6,5), 5)
my.cor(x)
# 上三角行列: 単相関係数
# 下三角行列: 2次の偏相関係数
# 対角要素: 重相関係数
# returned value
# [,1] [,2] [,3] [,4]
# [1,] 0.6184644 -0.49058484 -0.23543548 0.4160251
# [2,] -0.3553252 0.53356576 0.06355615 -0.3930731
# [3,] -0.3440509 0.03407991 0.44334712 0.2425356
# [4,] 0.3732220 -0.23326740 0.38235645 0.5780364