Latent Variable Plot for QO models
lvplot.qrrvglm.RdProduces an ordination diagram (latent variable plot) for quadratic ordination (QO) models. For rank-1 models, the x-axis is the first ordination/constrained/canonical axis. For rank-2 models, the x- and y-axis are the first and second ordination axes respectively.
Usage
lvplot.qrrvglm(object, varI.latvar = FALSE, refResponse = NULL,
add = FALSE, show.plot = TRUE,
rug = TRUE, y = FALSE, type = c("fitted.values", "predictors"),
xlab = paste0("Latent Variable", if (Rank == 1) "" else " 1"),
ylab = if (Rank == 1) switch(type, predictors = "Predictors",
fitted.values = "Fitted values") else "Latent Variable 2",
pcex = par()$cex, pcol = par()$col, pch = par()$pch,
llty = par()$lty, lcol = par()$col, llwd = par()$lwd,
label.arg = FALSE, adj.arg = -0.1,
ellipse = 0.95, Absolute = FALSE, elty = par()$lty,
ecol = par()$col, elwd = par()$lwd, egrid = 200,
chull.arg = FALSE, clty = 2, ccol = par()$col, clwd = par()$lwd,
cpch = " ",
C = FALSE, OriginC = c("origin", "mean"),
Clty = par()$lty, Ccol = par()$col, Clwd = par()$lwd,
Ccex = par()$cex, Cadj.arg = -0.1, stretchC = 1,
sites = FALSE, spch = NULL, scol = par()$col, scex = par()$cex,
sfont = par()$font, check.ok = TRUE, jitter.y = FALSE, ...)Arguments
- object
A CQO object.
- varI.latvar
Logical that is fed into
Coef.qrrvglm.- refResponse
Integer or character that is fed into
Coef.qrrvglm.- add
Logical. Add to an existing plot? If
FALSE, a new plot is made.- show.plot
Logical. Plot it?
- rug
Logical. If
TRUE, a rug plot is plotted at the foot of the plot (applies to rank-1 models only). These values are jittered to expose ties.- y
Logical. If
TRUE, the responses will be plotted (applies only to rank-1 models and iftype = "fitted.values".)- type
Either
"fitted.values"or"predictors", specifies whether the y-axis is on the response or eta-scales respectively.- xlab
Caption for the x-axis. See
par.- ylab
Caption for the y-axis. See
par.- pcex
Character expansion of the points. Here, for rank-1 models, points are the response y data. For rank-2 models, points are the optimums. See the
cexargument inpar.- pcol
Color of the points. See the
colargument inpar.- pch
Either an integer specifying a symbol or a single character to be used as the default in plotting points. See
par. Thepchargument can be of length \(M\), the number of species.- llty
Line type. Rank-1 models only. See the
ltyargument ofpar.- lcol
Line color. Rank-1 models only. See the
colargument ofpar.- llwd
Line width. Rank-1 models only. See the
lwdargument ofpar.- label.arg
Logical. Label the optimums and C? (applies only to rank-2 models only).
- adj.arg
Justification of text strings for labelling the optimums (applies only to rank-2 models only). See the
adjargument ofpar.- ellipse
Numerical, of length 0 or 1 (applies only to rank-2 models only). If
AbsoluteisTRUEthenellipseshould be assigned a value that is used for the elliptical contouring. IfAbsoluteisFALSEthenellipseshould be assigned a value between 0 and 1, for example, settingellipse = 0.9means an ellipse with contour = 90% of the maximum will be plotted about each optimum. Ifellipseis a negative value, then the function checks that the model is an equal-tolerances model andvarI.latvar = FALSE, and if so, plots circles with radius-ellipse. For example, settingellipse = -1will result in circular contours that have unit radius (in latent variable units). IfellipseisNULLorFALSEthen no ellipse is drawn around the optimums.- Absolute
Logical. If
TRUE, the contours corresponding toellipseare on an absolute scale. IfFALSE, the contours corresponding toellipseare on a relative scale.- elty
Line type of the ellipses. See the
ltyargument ofpar.- ecol
Line color of the ellipses. See the
colargument ofpar.- elwd
Line width of the ellipses. See the
lwdargument ofpar.- egrid
Numerical. Line resolution of the ellipses. Choosing a larger value will result in smoother ellipses. Useful when ellipses are large.
- chull.arg
Logical. Add a convex hull around the site scores?
- clty
Line type of the convex hull. See the
ltyargument ofpar.- ccol
Line color of the convex hull. See the
colargument ofpar.- clwd
Line width of the convex hull. See the
lwdargument ofpar.- cpch
Character to be plotted at the intersection points of the convex hull. Having white spaces means that site labels are not obscured there. See the
pchargument ofpar.- C
Logical. Add C (represented by arrows emanating from
OriginC) to the plot?- OriginC
Character or numeric. Where the arrows representing C emanate from. If character, it must be one of the choices given. By default the first is chosen. The value
"origin"meansc(0,0). The value"mean"means the sample mean of the latent variables (centroid). Alternatively, the user may specify a numerical vector of length 2.- Clty
Line type of the arrows representing C. See the
ltyargument ofpar.- Ccol
Line color of the arrows representing C. See the
colargument ofpar.- Clwd
Line width of the arrows representing C. See the
lwdargument ofpar.- Ccex
Numeric. Character expansion of the labelling of C. See the
cexargument ofpar.- Cadj.arg
Justification of text strings when labelling C. See the
adjargument ofpar.- stretchC
Numerical. Stretching factor for C. Instead of using C,
stretchC *C is used.- sites
Logical. Add the site scores (aka latent variable values, nu's) to the plot? (applies only to rank-2 models only).
- spch
Plotting character of the site scores. The default value of
NULLmeans the row labels of the data frame are used. They often are the site numbers. See thepchargument ofpar.- scol
Color of the site scores. See the
colargument ofpar.- scex
Character expansion of the site scores. See the
cexargument ofpar.- sfont
Font used for the site scores. See the
fontargument ofpar.
- check.ok
Logical. Whether a check is performed to see that
noRRR = ~ 1was used. It doesn't make sense to have a latent variable plot unless this is so.- jitter.y
Logical. If
yis plotted, jitter it first? This may be useful for counts and proportions.- ...
Arguments passed into the
plotfunction when setting up the entire plot. Useful arguments here includexlimandylim.
Details
This function only works for rank-1 and rank-2 QRR-VGLMs with
argument noRRR = ~ 1.
For unequal-tolerances models, the latent variable axes can
be rotated so that at least one of the tolerance matrices is
diagonal; see Coef.qrrvglm for details.
Arguments beginning with “p” correspond to the points
e.g., pcex and pcol correspond to the size and
color of the points. Such “p” arguments should be
vectors of length 1, or \(n\), the number of sites. For the
rank-2 model, arguments beginning with “p” correspond
to the optimums.
Value
Returns a matrix of latent variables (site scores) regardless of whether a plot was produced or not.
References
Yee, T. W. (2004). A new technique for maximum-likelihood canonical Gaussian ordination. Ecological Monographs, 74, 685–701.
Note
A species which does not have an optimum will not have an ellipse drawn even if requested, i.e., if its tolerance matrix is not positive-definite.
Plotting C gives a visual display of the weights (loadings) of each of the variables used in the linear combination defining each latent variable.
The arguments elty, ecol and elwd,
may be replaced in the future by llty, lcol
and llwd, respectively.
For rank-1 models, a similar function to this one is
perspqrrvglm. It plots the fitted values on
a more fine grid rather than at the actual site scores here.
The result is a collection of smooth bell-shaped curves. However,
it has the weakness that the plot is more divorced from the data;
the user thinks it is the truth without an appreciation of the
statistical variability in the estimates.
In the example below, the data comes from an equal-tolerances model. The species' tolerance matrices are all the identity matrix, and the optimums are at (0,0), (1,1) and (-2,0) for species 1, 2, 3 respectively.
Warning
Interpretation of a latent variable plot (CQO diagram) is potentially very misleading in terms of distances if (i) the tolerance matrices of the species are unequal and (ii) the contours of these tolerance matrices are not included in the ordination diagram.
See also
lvplot,
perspqrrvglm,
Coef.qrrvglm,
par,
cqo.
Examples
set.seed(123); nn <- 200
cdata <- data.frame(x2 = rnorm(nn), # Mean 0 (needed when I.tol=TRUE)
x3 = rnorm(nn), # Mean 0 (needed when I.tol=TRUE)
x4 = rnorm(nn)) # Mean 0 (needed when I.tol=TRUE)
cdata <- transform(cdata, latvar1 = x2 + x3 - 2*x4,
latvar2 = -x2 + x3 + 0*x4)
# Nb. latvar2 is weakly correlated with latvar1
cdata <- transform(cdata,
lambda1 = exp(6 - 0.5 * (latvar1-0)^2 - 0.5 * (latvar2-0)^2),
lambda2 = exp(5 - 0.5 * (latvar1-1)^2 - 0.5 * (latvar2-1)^2),
lambda3 = exp(5 - 0.5 * (latvar1+2)^2 - 0.5 * (latvar2-0)^2))
cdata <- transform(cdata,
spp1 = rpois(nn, lambda1),
spp2 = rpois(nn, lambda2),
spp3 = rpois(nn, lambda3))
set.seed(111)
if (FALSE) { # \dontrun{
p2 <- cqo(cbind(spp1, spp2, spp3) ~ x2 + x3 + x4, poissonff,
data = cdata, Rank = 2, I.tolerances = TRUE,
Crow1positive = c(TRUE, FALSE)) # deviance = 505.81
if (deviance(p2) > 506) stop("suboptimal fit obtained")
sort(deviance(p2, history = TRUE)) # A history of the iterations
Coef(p2)
} # }
if (FALSE) { # \dontrun{
lvplot(p2, sites = TRUE, spch = "*", scol = "darkgreen", scex = 1.5,
chull = TRUE, label = TRUE, Absolute = TRUE, ellipse = 140,
adj = -0.5, pcol = "blue", pcex = 1.3, las = 1, Ccol = "orange",
C = TRUE, Cadj = c(-0.3, -0.3, 1), Clwd = 2, Ccex = 1.4,
main = paste("Contours at Abundance = 140 with",
"convex hull of the site scores")) } # }
if (FALSE) { # \dontrun{
var(latvar(p2)) # A diagonal matrix, i.e., uncorrelated latent vars
var(latvar(p2, varI.latvar = TRUE)) # Identity matrix
Tol(p2)[, , 1:2] # Identity matrix
Tol(p2, varI.latvar = TRUE)[, , 1:2] # A diagonal matrix
} # }