2009-09-10 13 views
9

İki bağımsız değişkenle bir regresyonda doğrusal olmayan çok parçalı regresyon sonuçlarını temsil eden güzel bir yüzeye sahibim. Tahmin edilen değerleri güzel bir 3B yüzey olarak çizdirmek ve daha sonra gerçek değerleri yüzeyin etrafında zıplayan nokta olarak göstermek istiyorum. Bu, bir regresyon çizgisini çizmenin ve gerçekleri çizginin etrafındaki noktalar olarak gösteren 3D versiyonu olacaktır. Bunu kafesle nasıl yapacağımı anlayamıyorum. R'de başka bir grafik kütüphanesi kullanmaktan mutluluk duyuyorum, ancak 3D grafikleri yapan diğerlerini bilmiyorum.Bir tel kafes çizimi VE kafesli bir bulut R

İşte yapmak istediğim basitleştirilmiş versiyonu:

library(lattice) 
#set up some simplified data 
x <- seq(-.8, .8, .1) 
y <- seq(-.8, .8, .1) 
myGrid <- data.frame(expand.grid(x,y)) 
colnames(myGrid) <- c("x","y") 
myGrid$z <- myGrid$x + myGrid$y 
noise <- rnorm(length(myGrid$z),.3,.2) 
myGrid$z2 <- myGrid$x + myGrid$y + noise 

z benim pürüzsüz bir yüzey ve z2 yüzeyi üzerinde çoğunlukla hafif benim gürültülü noktalarıdır. Yani yüzey şuna benzer:

cloud(myGrid$z2 ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z") 

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/09/cloud.png

o birinde bunlardan ikisi almak mümkün mü:

wireframe(myGrid$z ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z") 

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/09/wireframe.png

ve noktaların bulut gibi görünür kafes paneli?

cevap

0

Bellek sunulursa, Rcmdr bunu zaten sizin için kullanıyordur. Bu, Rcmdr'nin uygun olduğu modellerle sınırlı olabilir.

Diğer taraftan, size (hızlı!) Kaydırma, yakınlaştırma, ... hangi kafesin yapamayacağını verir.

+0

ama sanırım: Bunu belirttiğin için teşekkürler, Aaron, o zaman muhtemelen başka değişken olarak z2 geçebilir Aksi halde karar vermiş olsaydım RGL kesinlikle yarar sağlayacaktı! – hatmatrix

+0

Aynı zamanda basit ("oyun yok") özelliğini saklıyorum ama OpenGL genellikle basit bir donanım üzerinde çalışıyor. Bir şans verin - hatırladığım gibi sadece 2d desteğine ihtiyacınız var. –

6

Seviyorum rgl! Ancak, örgüdeki 3-boyutlu grafiklerin de yararlı olduğu zamanlar vardır - kafes işlevlerine karşı 'panel' argümanına geçebileceğiniz kendi fonksiyonunuzu yazabilirsiniz. Örneğin, Çağrılan son işlev wireframe() veya cloud(); Panelde her iki durumda da panel.wireframe() ve panel.cloud() panel fonksiyonu içinde çağrılır, sonuç aynı olmalıdır.

Düzenleme: "Ben oyun oynamak yok" çünkü benim Linux'unuzun grafik kartı skimped

mypanel <- function(x,y,z,z2,...) { 
    panel.wireframe(x,y,z,...) 
    panel.cloud(x,y,z2,...) 
} 
wireframe(z ~ x * y, data=myGrid, xlab="X", ylab="Y", zlab="Z", 
      panel=mypanel, z2=myGrid$z2) 
+2

Güzel! Ancak, bulut için "z" yerine "z2" noktasındaki noktaları kullanmak için "mypanel" işlevindeki panel.cloud (x, y, myGrid $ z2) işlevini kullanın. – Aaron

+0

Oh, ve bulut nasıl çizilir, ama farklı x'ler ve y'ler için? – Rekin

+0

Muhtemelen 1) rbind() başka bir x, y, z setini myGrid'e, 2) myGrid'e kategorik bir değer ekleyebilir ve 3) bu kategorik değişkeni (faktörü) gruplar argümanına geçirebilirsiniz. – hatmatrix

İlgili konular