使用car::scatter3d()
,我正在尝试创建一个带有回归曲面的3D图形,表示分类变量和连续变量之间的相互作用。部分遵循代码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()
制作了几个数字,并希望使这个数字与它们一致。