2

rglの対話型プロット システムを使用して、相互作用項を持つモデルから回帰曲面をプロットしたいと考えています。以下を使用して、交互作用項なしでモデルの回帰平面を簡単にプロットできます。

plot3d(x=x1, y=x2, z=y1, type="s", col="yellow", size=1)
planes3d(a=coef(mod1)[2], b=coef(mod1)[3], c=-1, d=coef(mod1)[1], alpha=.5)

ただし、飛行機がねじれると、これはさらに難しくなるようです。この質問に続いて: r の曲線関数に相当する 3D、私は試しています:

f2 <- function(x, y) as.vector(coef(mod2)%*%c(1, x, y, x*y))

curve_3d <- function(f2, x_range=c(0, 40), y_range=c(0, 40)){ 
  if (!require(rgl) ) {stop("load rgl")}

  xvec <- seq(x_range[1], x_range[2], by=1)
  yvec <- seq(y_range[1], y_range[2], by=1)
  fz   <- outer(xvec, yvec, FUN=f2)
  persp3d(xvec, yvec, fz, alpha=.5)
}
open3d()
plot3d(x=x1, y=x2, z=y2, type="s", col="yellow", size=1)
curve_3d(f2)

しかし、それは機能していません。(他にもいくつか試しましたが、これは短くしています。)これまでの主な問題はf2;にあるようです。ただし、これも のようにしたいと思いますplanes3d。これでワイヤーフレームが得られるかどうかはわかりません。

次に例を示します。

set.seed(897)
x1 = rep(c(0, 10, 20, 30, 40), times=25)
x2 = rep(c(0, 10, 20, 30, 40), each=25)
y2 = 37 + 0.7*x1 + 1.2*x2 - 0.05*x1*x2 + rnorm(125, mean=0, sd=5)
mod2 = lm(y2~x1*x2)
open3d()
plot3d(x=x1, y=x2, z=y2, type="s", col="yellow", size=1)
curve_3d(f2)
4

1 に答える 1

4
grd <- expand.grid(x1=unique(x1), x2=unique(x2) )
grd$pred <-predict(mod2, newdata=grd)
persp3d(x=unique(grd[[1]]), y=unique(grd[[2]]), 
              z=matrix(grd[[3]],5,5), add=TRUE)

ここに画像の説明を入力してください

于 2013-02-18T08:21:57.403 に答える