理学療法士がまとめたノート

統計学備忘録 since2016

Rを使って統計学を勉強するブログです

2変量の正規分布をグラフでイメージ(persp)

また、ここで勉強させていただきました.
http://cse.naro.affrc.go.jp/minaka/R/R-binormal.html
忘れないように要点のみ転記させていただます.まさに備忘録.

今回はRの関数perspを使用して、密度関数の数式から3Dのグラフを描いてみます
確率変数x1、x2が正規分布に従い、無相関であることを仮定して進めていきます.

x1 <- seq(-3, 3, length=50)      # -3~3の範囲を50分割

head(x1)  #先頭部分だけ確認してみます
[1] -3.000000 -2.877551 -2.755102 -2.632653 -2.510204 -2.387755

x2 <- x1  

これで変数の設定は完了です.次に、分散1共分散0のマトリックスを作成します.

sigma.zero <- matrix(c(1,0,0,1), ncol=2)

     [,1] [,2]
[1,]    1    0
[2,]    0    1

Rの関数functionにx1、x2の同時確率密度を定義します. 上記sigma.zeroを分散共分散行列とする密度関数です  

f <- function(x1,x2) { dmvnorm(matrix(c(x1,x2), ncol=2), mean=c(0,0), sigma=sigma.zero) }

#6ポイントのみ確認してみます
f(-3,-3);f(0,0);f(3,3)
[1] 1.964128e-05
[1] 0.1591549
[1] 1.964128e-05

f(-1,-1);f(0,0);f(1,1)
[1] 0.05854983
[1] 0.1591549
[1] 0.05854983

関数outerを使用して、(x2,x2)であらわされる座標に対しFUN(f <- function(x1,x2))を適用します.
つまり、(x2,x2)に該当する値(f)が定まることになり3次元の描画を可能にします.

z <- outer(x1, x2, f)  
#50×50=2500個のデータが生成されました(length(z)で確認)
#10個だけ見てみましょう
z[1:10]
 [1] 1.964128e-05 2.814820e-05 3.973927e-05 5.526846e-05
 [5] 7.572219e-05 1.022015e-04 1.358875e-04 1.779878e-04
 [9] 2.296621e-04 2.919285e-04

http://cse.naro.affrc.go.jp/minaka/R/R-binormal.html に書かれあります,
z の欠損値の置換は省略しております.
色塗りはRのヘルプ persp {graphics} をそのまま使用しました.

nrz <- nrow(z)
ncz <- ncol(z)
# Create a function interpolating colors in the range of specified colors
jet.colors <- colorRampPalette( c("blue", "green") )
# Generate the desired number of colors from this palette
nbcol <- 100
color <- jet.colors(nbcol)
# Compute the z-value at the facet centres
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
# Recode facet z-values into color indices
facetcol <- cut(zfacet, nbcol)
persp(x1, x2, z, col = color[facetcol], phi = 30, theta = -30)
f:id:yoshida931:20180512100244p:plain:w500