9

2 つの独立変数を使用した回帰の非線形マルチパート回帰の結果を表す優れた曲面があります。回帰予測値を素敵な 3D サーフェスとしてプロットし、実際の値をサーフェス上で跳ね返るポイントとして表示したいと思います。これは、回帰直線をプロットし、実際の値を直線の周りの点として表示する 3D バージョンです。ラティスでこれを行う方法がわかりません。R で別のグラフ作成ライブラリを使用できてうれしいですが、3D プロットを行う他のライブラリを知りません。

これが私がやりたいことの簡略化されたバージョンです:

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 は私の滑らかな表面であり、z2 はほとんど表面の少し上にあるノイズの多いポイントです。したがって、表面は次のようになります。

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

ここに画像の説明を入力

点群は次のようになります。

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

ここに画像の説明を入力

これらの両方を 1 つの格子パネルで取得することは可能ですか?

4

2 に答える 2

7

私はrglが大好きです!しかし、ラティスの 3 次元プロットが役立つ場合もあります。独自の関数を作成して、ラティス関数の 'panel' 引数に渡すことができます。例えば、

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

最後に呼び出す関数は、wireframe() または cloud() です。いずれの場合も、 panel.wireframe() と panel.cloud() が panel 関数内で呼び出されるため、結果は同じになります。

編集:指摘してくれてありがとう、アーロン、おそらく z2 を別の変数として渡すことができます:

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)
于 2009-09-15T09:02:19.377 に答える
0

メモリが機能する場合、Rcmdr は rgl を使用して既にこれを行っています。ただし、それは Rcmdr が適合するモデルに限定される場合があります。

一方、(高速!) スクロール、ズームなど、ラティスでは実行できない機能が提供されます。

于 2009-09-10T16:12:49.177 に答える