相関係数の話の続きです.
chaos-kiyono.hatenablog.com
今回は確率変数を使って考えてみます.

相関って線形な関係
平均0,分散の確率変数
と,これと独立な平均0,分散
の確率変数
を仮定します.
と
の分布については,分散が有限ということだけで形は指定しません.
と線形な依存性がある確率変数
を,定数
,
を使って次の形で表します.
この場合,のとき,
には
と線形な関係があり,
の係数の
が大きいほどその関係性が薄くなります.つまり,
と
の相関は,
の絶対値が,
の絶対値よりも大きいほど強いと言えそうです.今回は実際に相関係数を計算してこのことを足しためてみます.
以下の計算で使う基本事項として,の期待値と分散を計算しておきます.
の期待値は,
の分散は,
です.
上の例では,なら
と
は独立 (
は
とは独立なので)です.また,
なら
と
は単に比例しています.
相関係数の定義は,
です.
上で定義した,と
の相関係数を計算すると,
になります.最後の式は,直角三角形をイメージしてもらって,直角をはさむ2辺の長さを,
としたときに,斜辺の長さ
と
の比になっています.

上の結果を使うと,のとき,つまり,
と
に相関がないケースでは,
になります.
また,のとき,つまり,
が
の定数倍のケースでは,
か,
になります.
そして,相関係数の範囲は,
のとき,
,
のとき,
になることが分かります.
ということで,相関係数がとる値の範囲は,です.
についても,になります.上の計算はこの証明にはなっていないので,この範囲については自分で考えるか,インターネットで検索して調べてみてください.当然,いろんな教科書に載っています.
相関する確率変数の生成
上の計算を簡単にすることを考えます.簡単化のため,互いに独立な確率変数と
は,平均0,分散1とします.そして,
の分散も1にします.このとき,
が成り立つ必要があるので,となります.
以上の条件でもう一度,相関係数を計算してみると,
になります.結局,になりました.
ということで,相関係数がの確率変数
と
を作りたいとき,まず,平均0,分散1の互いに独立な確率変数
と
を用意して,
とすれば良いと言うことです.
Rで互いに相関する正規乱数の生成
真の相関係数がになる正規乱数をRで生成してみます.使ったスクリプトはこれです.
# データの長さ N <- 1000 # 真の相関係数 r <- 0.5 # 2変量乱数の生成 x <- rnorm(N) # 正規乱数 w <- rnorm(N) # 正規乱数 y <- r*x+sqrt(1-r^2)*w # 相関係数の推定 r.est <- cor(x,y) ### # 散布図を描画 y.max <- max(abs(c(x,y))) par(pty="s",cex.main=1.5) plot(x,y,xlim=c(-y.max*1.3,y.max*1.3),ylim=c(-y.max*1.3,y.max*1.3),pch=16,col="blue",main=sprintf("r (est) = %.2f",r.est)) if(r >= 0){ text(y.max*1.2,-y.max*1.2,sprintf("r (true) = %.2f",r),pos=2,cex=1.4,col=2) text(-y.max*1.2,y.max*1.2,sprintf("N = %d",N),pos=4,cex=1.4,col=1) }else{ text(-y.max*1.2,-y.max*1.2,sprintf("r (true) = %.2f",r),pos=4,cex=1.4,col=2) text(y.max*1.2,y.max*1.2,sprintf("N = %d",N),pos=2,cex=1.4,col=1) }
