【統計学】相関係数(R)
前回解説いたしました相関係数をRで実装してみたいと思います。
共分散
データ
散布図でも使用しました上記書籍のP60にあるJリーグの試合結果のデータを使用します。
#勝数 wins <- c(22, 20, 20, 18, 17, 18, 13, 13, 13, 13, 13, 13, 13, 12, 12, 5, 6, 4) #得点 score <- c(67, 84, 80, 60, 68, 62, 51, 47, 49, 50, 57, 43, 56, 46, 42, 32, 44, 38) #失点 lost <- c(28, 55, 48, 41, 51, 53, 49, 45, 43, 56, 58, 55, 65, 65, 64, 56, 70, 74)
計算
cov関数を使用します。勝数と得点の共分散をみると
cov(wins, score) #[1] 61.3268
標本相関係数
データ
上記のデータです。
計算
次に同じ勝数と得点で相関係数をとります。相関係数はcor関数で算出できます。
cor(wins, score) #[1] 0.8681079
強い相関があることがわかります。点が取れるチームが勝つ!ということですね。
複数個並べると、各変数間の相関係数が相関行列の形で計算されます。
data <- data.frame(wins = wins, score = score, lost = lost) cor(data) # wins score lost #wins 1.0000000 0.8681079 -0.7077240 #score 0.8681079 1.0000000 -0.4413409 #lost -0.7077240 -0.4413409 1.0000000
失点より得点ですね。
標本自己相関分析
データ
ここからは新しいデータを使います。教科書のP65例題2.3を使います。
rate <- c(103,105,105,107,107,109,112,111,111,115,118,119)
計算
計算には いいパッケージがなかったため、下のサイトを拝借しました。
acf2 <- function( x, # 時系列データ k) # ラグ { n <- length(x) if (n < 3 || n-k < 2 || k < 1) { stop("invalid argument") } mean <- mean(x) num <- sum((x[1:(n-k)]-mean)*(x[(k+1):n]-mean)) den <- var(x)*(n-1) return(num/den) } acf2(rate, 1) #[1] 0.6979758
順位相関
データ
教科書P66表2-5のデータを使用します。10人の統計学と数学の得点順位です。
statistics <- c(1,2,3,4,5,6,7,8,9,10) math <- c(1,4,2,3,7,5,6,10,8,9)
計算
cor.test関数のメソッドに"s"または"spearman"を設定することで計算できます。
cor.test ( statistics , math, method="s") #0.8909091