相関係数の話の続きです.
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) }