使用R中的3D图形中的交互绘制回归曲面

时间:2014-11-01 19:10:30

标签: r rgl r-car

使用car::scatter3d(),我正在尝试创建一个带有回归曲面的3D图形,表示分类变量和连续变量之间的相互作用。部分遵循代码here,我获得了下图。

enter image description here

这个数字显然是错误的,因为回归曲面没有达到分类变量的一个值。问题可能在于使用rgl::persp3d()(下面代码的最后一个块),但我无法确定我做错了什么。有人能让我知道我错过了什么,以及如何解决问题?

library(rgl)
library(car)
n <- 100
set.seed(1)
x <- runif(n, 0, 10)
set.seed(1)
z <- sample(c(0, 1), n, replace = TRUE)
set.seed(1)
y <- 0.5 * x + 0.1 * z + 0.3 * x * z + rnorm(n, sd = 1.5)
d <- data.frame(x, z, y)
scatter3d(y ~ x + z, data = d, 
  xlab = "continuous", zlab = "categorical", ylab = "outcome",
  residuals = FALSE, surface = FALSE
)

d2 <- d
d2$x <- d$x / (max(d$x) - min(d$x))
d2$y <- d$y / (max(d$y) - min(d$y))
mod <- lm(y ~ x * z, data = d2)
grd <- expand.grid(x = unique(d2$x), z = unique(d2$z))
grd$pred <- predict(mod, newdata = grd)
grd <- grd[order(grd$z, grd$x), ]

# The problem is likely to lie somewhere below.
persp3d(x = unique(grd$x), y = unique(grd$z), 
  z = matrix(grd$pred, length(unique(grd$z)), length(unique(grd$x))), 
  alpha = 0.5,
  col = "blue",
  add = TRUE,
  xlab = "", ylab = "", zlab = ""
)

我更喜欢在绘制原始图时坚持car::scatter3d(),因为我已经使用car::scatter3d()制作了几个数字,并希望使这个数字与它们一致。

0 个答案:

没有答案