2013-03-13 14 views
6

iki değişkenli 3d normallere ve hatlarını çizimi:R - I MASS paketi ile oynamak ve örneğin, iki iki değişkenli normal sadece kullanarak görüntü ve par (yeni = TRUE) çizmek için sırasıyla

# lets first simulate a bivariate normal sample 
library(MASS) 
bivn <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1, .5, .5, 1), 2)) 
bivn2 <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1.5, 1.5, 1.5, 1.5), 2)) 

# now we do a kernel density estimate 
bivn.kde <- kde2d(bivn[,1], bivn[,2], n = 50) 
bivn.kde2 <- kde2d(bivn2[,1], bivn[,2], n = 50) 

# fancy perspective 
persp(bivn.kde, phi = 45, theta = 30, shade = .1, border = NA) 
par(new=TRUE) 
persp(bivn.kde2, phi = 45, theta = 30, shade = .1, border = NA) 

Çok iyi görünmüyorsa, sanırım sadece eksen ve eşyalarla oynamalıyım. Ama kontur ile benzer bir yaklaşım denersem, parseller çakışmaz. Basitçe değiştirilirler:

# fancy contour with image 
image(bivn.kde); contour(bivn.kde, add = T) 
par(new=TRUE) 
image(bivn.kde2); contour(bivn.kde, add = T) 

İstediğim şeye en iyi yaklaşım mı bu yoksa sadece kendimi zorlaştırıyorum mı? Herhangi bir öneri kabul edilir. Teşekkür ederim!

+1

görmeni çalışıyoruz gerçekten emin değilim? İki yoğunluk arasındaki farklar? Neden onları yan yana çizmiyorsun? – Seth

+0

Jeffries-matusita mesafesinin davranışını inceliyorum ve iki dağılımın nasıl örtüştüğünü ve j-m mesafesinin her bir "değişken" için nasıl hareket ettiğini ve iki sınıfın (iki dağılım) sınıflandırılmasının nasıl kötüleştiğini görmek istedim. – JEquihua

cevap

9

Belki de rgl kitaplığını kullanabilirsiniz. Etkileşimli 3d grafikler oluşturmanızı sağlar.

enter image description here

o zaman aşağıda gibi bir şey yapabilirsiniz iki yüzey arasındaki farkı çizdirmek istiyorsanız

require(rgl) 

col1 <- rainbow(length(bivn.kde$z))[rank(bivn.kde$z)] 
col2 <- heat.colors(length(bivn.kde2$z))[rank(bivn.kde2$z)] 
persp3d(x=bivn.kde, col = col1) 
with(bivn.kde2, surface3d(x,y,z, color = col2)) 
.

res <- list(x = bivn.kde$x, y = bivn.kde$y, z = bivn.kde$z - bivn.kde2$z) 
col3 <- heat.colors(length(res$z))[rank(res$z)] 
persp3d(res, col = col3) 

enter image description here