Added a two-page cheatsheet, heplots-cheatsheet.pdf, linked from the README and the
pkgdown navbar, to provide a visual overview of the package.
Added a robmlm.mlm() method so robmlm() can be called directly on an existing
classical mlm fit (e.g., robmlm(mod)) instead of restating the formula and data.
The result records its call as robmlm(formula = , data = , ...), just as if it had been
fit from the formula, so update() works on it. Arguments that would change the model
frame (subset, weights, data, ...) now signal an error rather than being silently
ignored; set them in the lm() call, or use update() on the result. Other arguments
must be named (e.g., robmlm(mod, P = 0.01)), since an unnamed one would be taken as P.
Doc fix: Clarified the significance interpretation of HE plots in heplot(), heplot3d(), the
README and the HE_manova vignette: H protrudes outside E somewhere in the
full response space iff the term is significant by Roy's test, but in a 2D (or 3D) view
the rule works one way only. H outside E means significant; H inside E
does not mean "not significant". The alpha argument of heplot1d() is now correctly
described as referring to the univariate F test for the response shown.
Fixed termMeans(): when the data were not sorted in factor-level order, the row
labels were attached to the wrong means (e.g., peng species, or the Plastic
rate:additive cells in the HE_manova vignette). This also affected the mean labels
in heplot1d(). Rows are now in factor-level order (first factor varying fastest), and
empty cells are dropped instead of causing an error.
Fixed eigstatCI(): the "pooled" statistic was computed from the total covariance
matrix cov(Y), ignoring groups, so it included the between-group variation. It now
uses the pooled within-group covariance matrix, as in boxM()$pooled, and bootstraps it
by resampling within groups. This changes the "pooled" point and CI in
plot_boxM_boot(). This achieves a long-standing goal to make the plot methods related
to boxM() more general, using bootstrap methods instead of asymptotic theory.
Fixed label.ellipse(): the diagonal positions label.pos = "SE" and "NW" were
swapped. The documentation for a fractional label.pos now says correctly that it is
measured counterclockwise from East (0 = right, 0.25 = top).
Fixed covEllipses(): label.pos = NULL, documented as giving automatic label
positions, failed with "cannot replicate NULL". It now works. The documentation also
wrongly said NULL was the default; the default is 0 (the ellipse center), and is
unchanged.
Fixed pvPlot() for tibbles (e.g., peng): it failed with "invalid type (list)",
because selecting one column of a tibble does not give a vector. X is now converted
with as.data.frame().
Added the LearnDis dataset (Tabachnick & Fidell, 2013, Table 7.1): a small
3 (Disability: Mild/Moderate/Severe) x 2 (Treatment/Control) factorial giving
reading (WRAT_R) and arithmetic (WRAT_A) achievement scores and IQ, for
worked MANOVA/MANCOVA examples and, in particular, a citable, hand-checkable
example for the Roy-Bargmann stepdown analysis under development. Its
Disability factor is ordered (Mild < Moderate < Severe).
Added the ReadingDisability dataset: 571 children classified into four
reading-achievement groups (Severe/Mild/Average/Superior, an ordered
factor) on six cognitive/achievement measures (PPVT, RD, EF, VF,
VMI, SIM). Reconstructed by simulation from the group means, SDs, and
pooled within-cells correlations in Bray & Maxwell (1985, Multivariate
Analysis of Variance, Table 2.3).
Added traceCI(): analytic (Bai & Silverstein, 2004) confidence intervals
for the trace (sum of eigenvalues) of one or more covariance matrices,
complementing logdetCI() and eigstatCI().
Added stdmodel() and stdcoef() for standardized ("beta") coefficients on
lm/mlm objects: responses and numeric predictors are standardized, factor
predictors are left raw. coefplot.mlm() gains a std = TRUE argument using
this to plot standardized-coefficient confidence ellipses.
Added a live heplot3d() example to the HE_manova vignette's MockJury
section (ratings on phyattr, independent, and sophisticated), shown as
a rotatable, zoomable 3D widget.
Clarified the coefplot.mlm() documentation to explain how it differs from
car::confidenceEllipse()'s mlm method: coefplot() fixes a pair of
responses as plot axes and overlays one ellipse per predictor, while
confidenceEllipse() fixes a pair of coefficients and shows their joint
confidence region.
Added an explicit rgl::rglwidget() call to heplot3d()'s example, so its
pkgdown reference page shows an interactive 3D plot instead of nothing.
rgl's automatic pkgdown widget support only fires for a visibly-returned
object of class rglId/rglOpen3d; heplot3d() returns a different class
invisibly, so nothing triggered it without this explicit call.
Calling rgl::rglwidget() directly in a bookdown-based, as_is vignette
(like HE_manova's new example above) renders fine in a standalone vignette
build but shows as a blank box on the pkgdown site: pkgdown replaces the
<head> of the article page when assembling it, silently dropping the
<script> tags the widget needs. The fix -- pre-rendering the widget to a
self-contained file and embedding it with an <iframe> instead -- is
documented in heplot3d()'s @details for reuse in other vignettes.
Fixed math rendering on the pkgdown site for all four as_is vignettes
(HE_manova, HE_mmra, Robust, datasets): _pkgdown.yml never
configured a math renderer, so $...$ expressions showed as literal text
instead of typeset equations. Configured KaTeX (matching the working setup
already used in the matlib package) after finding that MathJax's CDN
bundle doesn't support \boldsymbol, needed for bold Greek letters like
\boldsymbol{\beta} (\mathbf{} only covers Roman symbols, not Greek).
Bare/dollar-math H/E references to the hypothesis and error matrices (in
heplot(), heplot1d(), heplot3d(), pairs.mlm(), etasq(), and the
package overview) are now \eqn{\mathbf{H}}{H}/\eqn{\mathbf{E}}{E} -- the
earlier $\mathbf{H}$ form isn't valid Rd and rendered as mangled literal
text in plain ?fun help.
Modernized roxygen documentation across R/: legacy Rd macros (\code{},
\link{}/\link[pkg]{}, \pkg{}, \emph{}) converted to markdown syntax
in 44 files, fixing two pre-existing broken links (missing-backslash typos)
and two stale rgl link targets found along the way.
Reorganized vignette assets: images and figures moved from vignettes/fig/
to vignettes/images/, and four orphaned, unreferenced 2017-era images
removed.
Dropped the hard Depends: broom for glance.mlm(); now Imports: generics
(the lightweight package defining the glance generic, which broom itself
depends on) instead, with broom moved to Suggests. glance() still works
the same as before with just library(heplots).
CRAN resubmission of v1.8.3, addressing two URL findings from the win-builder
CRAN-incoming-feasibility check.
Fixed the NeuroCog documentation to cite the Nuechterlein et al. (2008) reference by
DOI instead of a PubMed URL that CRAN flagged as needing an update. A win-builder dry
run then flagged the replacement itself: CRAN wants bare doi.org links written with
the \doi{} macro, not \url{}. Fixed that in NeuroCog, and found (and fixed the
same way) two more pre-existing bare doi.org references in Iwasaki_Big_Five and
TIPI's documentation that hadn't yet been flagged.
Withdrew vignettes/repeated-JSS.pdf (a static reprint of the published Journal of
Statistical Software article, included via the R.rsp::asis engine) to vignettes-old/,
rather than continue explaining its embedded non-canonical URLs to CRAN on every
submission. Dropped the now-unused R.rsp from Suggests/VignetteBuilder.
Added a second, shorter worked example to the Robust.Rmd vignette using the
robustbase::pulpfiber data (Rousseeuw et al. 2004): a multivariate multiple regression
contrasted with the earlier Pottery MANOVA example, using the weight plot and an
MCD-based distancePlot() to distinguish vertical outliers, a bad leverage point, and
two good leverage points.
distancePlot() documentation now cross-links robmlm(), car::influencePlot(), and
mvinfluence's influencePlot.mlm() method; fixed verbose argument not actually
gating the cutoff cat() line.
This is a modest cumulative release of several versions since the last CRAN release (v 1.8.1)
NLSY's documentation.pvPlot() for partial variable plots: visualizes the partial correlation between two
variables after controlling for all others, as a scatterplot of the residuals from regressing
each on the rest, enhanced with a data ellipse, regression line, and point labels for unusual
cases. Similar in spirit to car::avPlots(), but works directly on a data frame rather than a
fitted model.pkgdown.release_checks.R script in the repo (but .Rbuildignored)eigstatsCI() to calculate bootstrapped confidence intervals for eigenvalue statistics, as used in plot.boxM()plot_boxM_boot() to plot these with bootstrapped CIstraceCI() for use in plot.boxM()This is a large cumulative release of several versions since the last CRAN release.
label.ellipse() now returns invisibly the coordinates where the label was placed.heplot() adds a label.cex argument to control the size of labels on H/E ellipses. The label.pos argument is vectorized, so that the changes to label.ellipse() now apply.boxM() & plot.boxM() now correctly handle the situation where one or more groups have singular covariance matrices because !n>pcovEllipses.boxM() method. boxM() now returns ngroups and means among it's components.text_usr() to add text in normalized device coordinateslabel.ellipse() re-written to allow a fully general way to specify label positions [Thx: Claude]groups arg to vary point color and pchgroup.axis arg to draw an axis identifying the groups at the top of the plot.Several small maintenance fixes, plus a new diagnostic plot and a new vignette
o Added distancePlot() for plots of Mahalanobis distances of X vs Y. For an MLM, diagnoses high leverage and large residuals
o Added a vignette on robust MLMs using robmlm() and diagnostic plots
o Added rel_diff() to calculate relative difference between two arrays or data frames
o Fixed buglet in plot.robmlm()
o Fixed some non-canonical URLs
o Fixed cex buglet in distancePlot()
gplabel in plots.plot.boxm()Fix bugs and add some args for better control
coefplot(), cqplot()robmlm()plot.robmlm()coefplot.mlm() in selecting terms with parm.coefplot.mlm() gains a cex.lab argumentThis is largely a maintenance release, but adds a function to identify "noteworthy" points in 2D scatterplots.
schoolsites dataset, providing additional variables related to the schooldata dataset.cqplot() now prints a warning if there are missing cases and also returns the upper tail p-values corresponding to Mahalanobis $D^2$.method.id in cqplot() changed to "r", to identify points with the largest $D^2$.noteworthy(x, y) as a utility to select "noteworthy" observations in a 2D plot, extending the ideas in car::showLabels()This is a moderate update, adding new functionality
leveneTests() gains formula and lm methodsbartlettTests() gains formula and lm methodscolDevs() gains a group.var argument; examples extendeduniStats() for an anova version of glance.mlm()covEllipses() to more accurately describe recycling of arguments.size="significance" now allowed as a synonym for size="evidence" in heplot functions.ellipse.axes() re center/centreellipse.axes() gains a type argument to draw lines or arrowsellipse.axes() gains a extend argument to extend/shrink the axesThis is a modest update, adding two new datasets for simple examples and a PDF vignette
dogfood and oral datasets, both simple MANOVA examples.This is a semi-major release, primarily documenting all datasets in the package with @concept tags.
It also adds new datasets and fixes bugs and documentation errors since the last CRAN release (v 1.6.2)
AddHealth data) to the HE_manova vignetteOverdose data, a simple MMRA example.@concept tags in documentation, giving the primary methods ("MANOVA", "MMRA", "repeated", ...) that they illustrate. These supplement @keyword tags and appear in the index of the package documentation.datasets) lists the datasets in the package, classified by these @concept tags.cqplot()cqplot() now returns DSQ values for identified pointsheplot()peng dataset, a version of palmerpenguins::penguinscoefplot.mlm()ellipse.axes() to draw axes of a covariance ellipseellipse.box() to draw conjugate axes of a covariance ellipsecovEllipses() gains a formula methodellipsoid() used in heplot3d() becomes an (experimental) exported function, Ellipsoid()broom::glance()cex.label arg to heplot3d()glance.mlm() as an extension of broom::glance.lm()etasq.lm() per #1 [thx: Phil Chalmers]plot.robmlm(), a plot method for "robmlm" objects. Currently, it plots the weights given
to observations in the last iteration as an index plot.coefplot.mlm(), now pass label.pos to label.ellipse()Mahalanobis() for classical and robust squared distances; handles
missing data gracefully and provides a confidence envelopecqplot() of Mahalanobis distances as a plot method for an mlm and for
multivariate datacovEllipses() extended to more than two variables, giving a scatterplot matrix plotbartlettTests() for a collection of univariate Bartlett testsleveneTests() for a collection of univariate Levene testslabel.pos argument for positioning the
text labels used in heplot() and friends.boxM() with formula, lm, plot and summary methodscovEllipses() methods for plotting (possibly robust) covariance ellipseso Added trans.colors() to make colors transparent o Modifications to heplot() for filled ellipses: added fill= and fill.alpha= arguments; replaced lines() with polygon() for H and E ellipses; calculate H.rank to distinguish degenerate ellipses o added last() to utility.R o Modified some examples to show fill=TRUE and use wire=FALSE in heplot3d() o Modified pairs.mlm() to pass fill= and fill.alpha= to heplot() o Updated reference URLs to point to datavis.ca o Fixed buglet in gsorth when matrix has no row/col names [Thx: mekki@mektek.ca] o Fixed buglet in etasq.lm with partial=FALSE [Thx: i.e.holliday@aston.ac.uk]
Version 0.9-6 (2010-11-2) o added CITATION to JSS article and references to .Rd files o modified repeated vignette to [nojss]
Version 0.9-5 (2010-10-01) o Added repeated vignette
Version 0.9-4 (2010-07-29) o Minor documentation changes o Added etasq.lm() method o Added data/MockJury - 1-way and 2-way MANOVA, step-down tests, ANCOVA o Generalized termMeans() and exported it o Added HE-examples vignette
Version 0.9-3 (2010-07-27) o Added gsorth() for Gram-Schmidt orthogonalization of a matrix or data frame, preserving column means and standard deviations o Avoid Deprecated warnings (linear.hypothesis) with car2 o Fixed documentation warnings with car2 (linear.hypothesis, data.ellipse)
Version 0.9-2 (2010-02-12) o Added demo/Big5.R - Analysis of scores on the 'Big 5' personality traits for three groups o fixed buglet with text3d causing rgl to crash (thx: Duncan Murdoch) o switched inst/CHANGES to NEWS o Added data/RatWeight and examples - repeated measures on Weight Gain in Rats o Added data/Headache and examples - repeated measures on treatment for headaches o Fixed buglets in heplot, heplot1d, heplot3d regarding number of variables o Added etasq.mlm methods for multivariate measures of association (\eta^2) o Return ellipse radius from heplot, heplot3d
o heplot.mlm, pairs.mlm, heplot3d.mlm now work for repeated measure designs with only covariates on the rhs. o Implemented heplot1d() for repeated measures designs (untested) o Revised documentation for repeated measures o Added center.cex to heplot.mlm() o Revised mark.H0() to handle 3D plots also o Added Adoption data -- MMreg with repeated measures o Added ReactTime data -- 2 within-S, no between-S factors o Fixed bug with icontrasts o Added markH0 argument to heplot o Added label argument to mark.H0() o Added arrow3d() o Fixed buglet in pairs.mlm (type)
o Implemented 2D HE plots in heplot.mlm for repeated measures designs by adding
idata=, idesign=, icontrasts= arguments.
o imatrix= argument for doubly-multivariate designs implemented, but depends on car 2.0+
o Updated example(OBK)
o Updated example(WeightLoss)
o Implemented 3D HE plots in heplot3d.mlm for repeated measures designs (OK)
o Implemented pairs() for repeated measures designs (OK)
o Minor fixes to heplot1d o Added contrasts example to RootStock.Rd o Added WeightLoss data -- doubly multivariate o Added mark.H0
o Fixes to cross-references in .Rd files.
o Added data(RootStock) o heplot.mlm, heplot3d.mlm now include center in the returned object
o Added data(FootHead) o Extended example(FootHead)
Version 0.8-7 (2009-04-17) o Initial version of heplot1d o Added data(Bees), demo(bees.contrasts) o Now suggest: effects package
o Added VocabGrowth data, with an example of heplot() for a repeated measures design o Fixed label.ellipse in heplot.mlm.R to center the label horizontally o Added demo(OBK) o Added axes= to heplot.mlm to fix warnings arising from axes=FALSE in pairs.mlm
o Minor documentation changes for Rdoc 2 o Michael Friendly as maintainer
o Documentation additions o added CITATION file
Package changes o added suggests: candisc o added utility.R, cross3d.R
Changes to heplot.mlm: o moved lambda.crit to utility.R o added he.rep to handle common task of repeating HE argument values
Changes to heplot3d.mlm: o added shade=, shade.alpha=, wire= parameters o fixed: grand.mean=FALSE not respected o replaced sphere at grand.mean with cross3d() o color means according to the color of the term o return bounding boxes of the ellipsoids o replaced rgl.texts with texts3d
Changes to utility.R: o Generalized lambda.crit to provide Roy.crit and HLT.crit; only Roy.crit is used
o heplot now passes ... not only to plot() but to calls to text() and points().