Как построить плоскость регрессии с взаимодействием в RGL
Я хочу построить регрессионную поверхность из модели с термином взаимодействия, используя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 эквивалент функции кривой в 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)