R 計算メモ(分散、共分散)
分散と共分散を計算をしたいとき用のメモ。
Rでは、標本分散、標本共分散を求める関数はないので、自分で定義する。
以下のサイトを参考にさせていただいた。
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/59.html
関数定義ここから。
標本分散
# 関数を定義(標本分散) variance <- function(x) { var(x) * (length(x)-1) / length(x) }
標本共分散
# 関数を定義(2変数の標本共分散) # 2変数(xとy)の不偏共分散 : var(x, y) covariance <- function(x, y) { var(x, y) * (length(x)-1)/length(x) }
標本標準偏差
# 関数を定義(標本標準偏差) stddev <- function(x) { sqrt(variance(x)) }
相関係数
# 関数を定義(標本分散と標本共分散を使った相関係数) # cor(x, y)と同じになる correlation <- function(x, y) { covariance(x, y) / (stddev(x) * stddev(y)) }
検算。以下のサイトのデータを使わせいただいた。
https://sci-pursuit.com/math/statistics/correlation-coefficient.html
元データ(2変数、xとy)
# 変数x (英語の点数) xvar <- c(50, 60, 70, 80, 90) # 変数y (数学の点数) yvar <- c(40, 70, 90, 60, 100)
分散
# 変数xの標本分散 variance(xvar) [1] 200 # (参考)変数xの不偏分散 var(xvar) [1] 250 # 変数yの標本分散 variance(yvar) [1] 456 # (参考)変数yの不偏分散 var(yvar) [1] 570
標準偏差
# 変数xの標本標準偏差 stddev(xvar) [1] 14.14214 # (参考)変数xの不偏標準偏差 sd(xvar) [1] 15.81139 # 変数yの標本標準偏差 stddev(yvar) [1] 21.35416 # (参考)変数yの不偏標準偏差 sd(yvar) [1] 23.87467
共分散
# 2変数の標本共分散 covariance(xvar, yvar) [1] 220 # (参考)2変数の不偏共分散 cov(xvar, yvar) [1] 275
相関係数
# 2変数の相関係数(標本分散、標本共分散を使うパターン) correlation(xvar, yvar) [1] 0.7284928 # (参考)2変数の相関係数 (R標準の関数) > cor(xvar, yvar) [1] 0.7284928
相関係数は不偏、標本のどちらを使っても同じ結果になる。
計算式の分母(割る数)は、標本の方が大きいので(標本はN、不偏はN-1)、大小関係は以下のとおりとなる。
グラフ化
ggplot2を使って、2変数を散布図にプロットする方法。
library(ggplot2) obs <- data.frame(x=xvar, y=yvar) g <- ggplot(obs, aes(x=xvar, y=yvar)) g <- g + xlim(0, 100) + ylim(0, 100) g <- g + geom_point() plot(g)