library(rgl)
## Warning: package 'rgl' was built under R version 4.2.2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(scatterplot3d)
## Warning: package 'scatterplot3d' was built under R version 4.2.3
library(FactoClass)
## Warning: package 'FactoClass' was built under R version 4.2.3
## Loading required package: ade4
## Warning: package 'ade4' was built under R version 4.2.3
## Loading required package: ggrepel
## Warning: package 'ggrepel' was built under R version 4.2.3
## Loading required package: xtable
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
Boston2 <- Boston[1:50,]
fit3 <- lm(medv ~ rm +age, data=Boston2)
sp <- scatterplot3d::scatterplot3d(Boston2$rm,
Boston2$age,
Boston2$medv,
angle = 45)
sp$plane3d(fit3, lty.box = "solid")#,
# polygon_args = list(col = rgb(.1, .2, .7, .5)) # Fill color
orig <- sp$xyz.convert(Boston2$rm,
Boston2$age,
Boston2$medv)
plane <- sp$xyz.convert(Boston2$rm,
Boston2$age, fitted(fit3))
i.negpos <- 1 + (resid(fit3) > 0)
segments(orig$x, orig$y, plane$x, plane$y,
col = c("blue", "red")[i.negpos],
lty = 1) # (2:1)[i.negpos]
sp <- FactoClass::addgrids3d(Boston2$rm,
Boston2$age,
Boston2$medv,
angle = 45,
grid = c("xy", "xz", "yz"))