1

使用car::scatter3d(),我正在尝试创建一个带有回归曲面的 3D 图形,以指示分类变量和连续变量之间的交互。部分按照这里的代码,我得到了下图。

在此处输入图像描述

该图显然是错误的,因为回归曲面没有达到分类变量的值之一。问题可能在于使用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()并希望使这个数字与它们保持一致。

4

0 回答 0