Three-dimensional PCA biplots are obtained by specifying
dim.biplot = 3
in the call to PCA()
. The
package rgl
is required and on calling the
plot()
the biplot is drawn in an rgl
window.
The plot can then be interactively rotated and zoomed using the mouse
buttons.
The process of adding new samples to the biplot, called interpolation
utilises the functions interpolate()
and
newsamples()
. These functions work in the same way as in
the call to the two-dimensional biplot. The function
interpolate()
accepts the argument newdata
to
specify a matrix or data frame containing the new samples to be
interpolated. The function newsamples()
operates the same
way as samples()
in that the user can specify the
aesthetics of the interpolated samples.
biplot(iris[1:100,1:4])|> PCA(dim.biplot = 3) |> axes(col="black") |>
interpolate(newdata = iris[101:150,1:4]) |> newsamples(col="purple") |> plot()
To interpolate new variables to the biplot, the function
interpolate()
and newaxes()
are called. The
function interpolate()
accepts the argument
newvariable
to specify a matrix or data frame of the same
number of rows in the data specified in biplot()
containing
the new variables to be interpolated. The function
newaxes()
allows the user to specify the aesthetics of the
interpolated variables.
biplot(iris[,1:3])|> PCA(dim.biplot = 3) |> axes(col="black") |>
interpolate(newvariable = iris[,4]) |>
newaxes(col="darkred",X.new.names = "Petal.Width") |> plot()
To add the prediction of samples on the biplot, the
prediction()
function is used. The
predict.samples
argument takes in a vector indicating
either the row numbers of the samples to predict or set to TRUE
indicating to predict all samples. The argument which
allows the user to select which variable to predict the sample on. In
the example below, samples 100 to 150 predictions are shown for
variables 1 and 4. The aesthetics for the display of the predictions are
arguments in the axes()
function: predict.col
and predict.lwd
.
biplot(iris) |> PCA(group.aes = iris$Species,dim.biplot = 3,show.class.means = TRUE) |>
axes(col="black",predict.col = "orange") |>
prediction(predict.samples=100:150,which = c(1,4)) |> plot()
Similarly, to add the prediction of group means, the function
prediction()
is used. The argument
predict.means
takes in a vector specifying which group
means to predict. In the example below, only the first group means is
predicted. Important to note that the argument
show.class.means
must be set to TRUE in the
PCA()
function.
biplot(iris) |>
PCA(group.aes = iris$Species,dim.biplot = 3,show.class.means = TRUE) |>
axes(col="black",predict.col = "darkred") |>
prediction(predict.means = 1) |> plot()
Ellipses are added to a 3D biplot using the ellipses()
function which works in the same way as a 2D biplot.
biplot(iris) |> PCA(group.aes = iris[,5],dim.biplot = 3) |>
axes(col="black") |>
ellipses(kappa = 3,opacity = 0.5) |> plot()
#> Computing 3 -ellipse for setosa
#> Computing 3 -ellipse for versicolor
#> Computing 3 -ellipse for virginica
Similarly for a CVA 3D biplot, dim.biplot = 3
is
specified in the call to CVA()
.
biplot(iris) |> CVA(classes = iris$Species,dim.biplot = 3) |>
axes(col="black") |> plot()
#> Warning in CVA.biplot(biplot(iris), classes = iris$Species, dim.biplot = 3):
#> The dimension of the canonical space < dim.biplot sample.opt method used for
#> additional dimension(s).
As with PCA()
, three-dimensional CA biplots are obtained
by specifying dim.biplot = 3
in the call to
CA()
. Again, an interactive biplot will be drawn in a
separate rgl
window.
Consider the HairEyeColor
example again as discussed in
CA in biplotEZ
:
biplot(HairEyeColor[,,2], center = FALSE) |>
CA(variant = "Symmetric", dim.biplot = 3) |>
samples(col=c("darkred","forestgreen"), pch=c(15,17), label.col="black") |>
plot()
We also illustrate the three dimensional CA biplot of the
SA Crime
example:
SACrime <- matrix(c(1235,432,1824,1322,573,588,624,169,629,34479,16833,46993,30606,13670,
16849,15861,9898,24915,2160,939,5257,4946,722,1271,881,775,1844,5946,
4418,15117,10258,5401,4273,4987,1956,10639,29508,15705,62703,37203,
11857,18855,14722,4924,42376,604,156,7466,3889,203,664,291,5,923,19875,
19885,57153,29410,11024,12202,10406,5431,32663,7086,4193,22152,9264,3760,
4752,3863,1337,8578,7929,4525,12348,24174,3198,1770,7004,2201,45985,764,
427,1501,1197,215,251,345,213,1850,3515,879,3674,4713,696,835,917,422,2836,
88,59,174,76,31,61,117,32,257,5499,2628,8073,6502,2816,2635,3017,1020,4000,
8939,4501,50970,24290,2447,5907,5528,1175,14555),nrow=9, ncol=14)
dimnames(SACrime) <- list(paste(c("ECpe", "FrSt", "Gaut", "KZN", "Limp", "Mpml", "NWst", "NCpe",
"WCpe")), paste(c("Arsn", "AGBH", "AtMr", "BNRs", "BRs", "CrJk",
"CmAs", "CmRb", "DrgR", "InAs", "Mrd", "PubV",
"Rape", "RAC" )))
names(dimnames(SACrime))[[1]] <- "Provinces"
names(dimnames(SACrime))[[2]] <- "Crimes"
biplot(SACrime, center = FALSE) |> CA(variant = "Symmetric", dim.biplot = 3) |>
samples(col=c("royalblue","darkred"), pch=c(15,17), label.col="black") |> plot()