【问题标题】:How to plot a regression plane with an interaction in rgl如何在 rgl 中绘制具有交互作用的回归平面
【发布时间】:2013-02-02 10:27:39
【问题描述】:

我想使用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)

但是,当飞机扭曲时,这似乎更加困难。关注这个问题:3D equivalent of the curve function in r,我正在尝试:

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)

【问题讨论】:

  • 通常的方法是将predict 与模型一起使用,而不是尝试从系数向量计算预测。您并没有说您遇到了什么错误,但看起来您的论点与您传递的论点不同。 curve3d 应该得到三个参数,而你只传递了一个。
  • 我会很高兴的。你如何从模型中得到预测?我尝试使用z=mod2$fitted.values,但也没有用。 (我已经尝试了几件事。)
  • 我能够追踪到的具体错误是“coef(mod2) %*% c(1, x, y, x * y) 中的错误:参数不一致”。
  • 对于工作插图,我需要一个数据对象。
  • 我不明白你的评论。

标签: r plot regression interaction rgl


【解决方案1】:
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)

【讨论】:

  • 为什么是 z=matrix(grd[[3]], 5, 5) 而不是 z=matrix(grd[[3]])?这是我唯一没有关注的一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2014-09-28
  • 2012-05-20
  • 2019-10-05
  • 2018-02-08
  • 1970-01-01
相关资源
最近更新 更多