2011年5月12日木曜日

R言語のouter関数で3次元plot

R言語のouter関数を使うと、3次元plotが簡単にできるので、その方法について紹介。まずはouter関数の呼び出し方は以下の通りである。

outer(X, Y, FUN="*", ...)

XとYの組み合わせに対してFUNを適用するようになっている。関数の返り値はX、Yがベクトル(ベクトル以外でも利用できるが、ベクトルで十分な場合が多い)であれば、2次元で表されるマトリックスになる。

> x <- 1:3
> y <- 1:5
> outer(x,y) # FUNを省略すると掛け算になる
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    4    6    8   10
[3,]    3    6    9   12   15

これを用いると、(x,y)であらわされる座標に対しFUNを適用することでz=FUN(x,y)が得られ、x,y,zで3次元のグラフが描けるということが理解していただけると思う。試しに2次元標準正規分布を描いてみることにしよう。2次元分布生成のコードは舟尾暢男氏のR-Tipsにあるものを参考にさせていただいた。

x <- seq(-3,3,length=100)
y <- x
rho <- 0.9
gaussDist <- function(x,y,rho) {
  1/(2*pi*sqrt(1-rho^2))*exp(-(x^2-2*rho*x*y+y^2) / (2*(1-rho^2)))
}
z <- outer(x,y,gaussDist,rho)
filled.contour(x,y,z)

最後のfilled.contourによって、連続的な色で表現される等高線を描くようにしている。グラデーションを用いず、線だけでよいという場合にはcontour関数でよい。この場合、標高を表す数値はグラフの外でなく、よくある地図のように、数値が内部に書かれるようになる。

図を見れば明らかであるが、相関が強いため、確率密度の高い箇所が直線状に現れている。無相関になるにつれて、確率密度の等高線は直線から円に変化する。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計