Changelog
Source:NEWS.md
colleyRstats 0.2.1
NEW FEATURES
-
reportggstatsplotPostHoc()names the post-hoc test it is reporting, and the multiplicity correction that produced the p-value: “A Games-Howell post-hoc test (Holm-adjusted) found that …”. Both are read from the pairwise table ‘ggstatsplot’ attaches to the plot rather than assumed, because which test ran is not something a reader can infer from the call:typeand the between/within distinction select between Games-Howell, Dunn, Durbin-Conover, Student’s t and Yuen’s trimmed means, and ‘ggstatsplot’ may change its defaults between releases. A sentence that says only “A post-hoc test found that …” is therefore not reproducible, and the methods section it lands in cannot be written from it (#31). - The same naming reaches the branch where nothing is significant, which previously reported “A post-hoc test found no significant differences” whatever had been run.
- Where the plot reports
p.adjust.method = "None", the p-values are uncorrected and are now emitted with\p{}/\pminor{}instead of\padj{}/\padjminor{}. Labelling a raw p-value claims a correction that was never applied. Both macros are already part oflatex_preamble()and the shippedcolleyRstats.sty, so no preamble changes are needed. A plot whose table carries nop.adjust.methodcolumn says nothing either way and keeps the\padj{}macros it has always used.
BUG FIXES
-
reportggstatsplot()opened a Welch ANOVA sentence with “An One-way analysis of means …”. The article was chosen from the first letter of the method name, and “One” is a vowel letter read as a consonant (“wun”). It is now chosen from how the name is spoken, which also covers the “yoo” openings (“a unique …”, “a European …”). The “un-” prefix is deliberately untouched, so “an unpaired Wilcoxon rank sum test” is unchanged.
colleyRstats 0.2.0
NEW FEATURES
Questionnaire scoring
- New
score_questionnaire()applies a published instrument’s own scoring key to raw item columns: reverse-coding, the recoding it prescribes (centring a semantic differential to -3..+3, zero-basing the SUS), its subscale structure, and its published weights or multipliers. Ten instruments ship: NASA-TLX (raw/RTLX), SUS with the Lewis & Sauro usability/learnability subscales, UEQ-S, the full 26-item UEQ, TiA (Körber), AttrakDiff 2, IPQ, SSQ (with the Kennedy et al. weights and its overlapping subscales), FMS and MISC. The scoring is checked against published reference values in the test suite: the SUS anchors (100/0/50), the SSQ weighting (21 raw on each subscale gives 200.34/159.18/292.32, total 235.62), the TLX rescale from any sheet onto 0-100, and the UEQ’s balanced polarity, where answering the positive pole of all 26 pairs must give +3 on all six scales. -
scale =declares the response range a survey actually used, so a 21-point TLX sheet, a 20-point slider and a 0-100 slider all score onto the conventional 0-100. Responses outside the declared range are an error, not a silent rescale. -
min_valid =governs incomplete responses. The default scores only complete subscales and returnsNAotherwise – no silent imputation. Relaxing it scales a sum-scored instrument up proportionally so it stays on its published range. - A standing caution prints in the console, not only in the help pages: item numbers, order and polarity depend on how a questionnaire was administered, this package applies the published key, and a mismatch produces plausible numbers rather than an error – so any figure must be double-checked before it goes into a paper. It appears from
score_questionnaire()(once per distinct mapping per session, alongside the mapping itself), and fromcheck_questionnaire(),questionnaire_items()andscore_reliability()every time. The wording lives in one place, so the console text and the help pages cannot drift apart. Silence the repeated note in a pipeline withoptions(colleyRstats.quiet_questionnaires = TRUE); that quiets the note, not the errors. - New
check_questionnaire()prints the mapping that will be used – which column supplies which item, its subscale, whether it is reverse-coded, and the observed range of each column – along with the instrument’s scoring notes. This is the guard against the failure mode that motivates the whole feature: item order and polarity belong to the sheet a study actually administered, so a shifted or re-ordered survey export scores silently, plausibly, and wrongly.score_questionnaire()also attaches the mapping as an attribute and announces it once per session. - New
score_reliability()gives Cronbach’s alpha (and McDonald’s omega where ‘psych’ is installed) per subscale, computed on the same recoded matrix that is aggregated – so a negative alpha means a real problem rather than a forgotten reversal, and it warns when one appears. - New
define_questionnaire()registers a lab-specific, translated or shortened instrument, which then behaves exactly like a built-in one. Put it in a project’s setup script and every analysis in that project scores it identically. - New
reverse_code(x, min, max)flips a response scale using the possible range rather than the observed one, and warns about out-of-range values. Taking the endpoints from the data is the classic reverse-coding bug: if nobody picked the lowest option, every flipped response is off by a point. - New
summarize_sickness()reduces a repeated single-item sickness rating (FMS, MISC) to the measures those studies actually analyse: peak, mean, final value, trapezoidal area under the curve, the time-weighted mean, and time to a threshold. - New
list_questionnaires()andquestionnaire_items()describe the registry and one instrument’s items.
Fitting the recommended model
- New
fit_recommended()carriesrecommend_test()through to a fitted model. It coerces the outcome and predictors into the classes the model family needs (announcing each coercion, since turning a numeric rating into an ordered factor changes what is estimated), builds the random-effect term for a clustered design, fits, computes pairwise post-hoc contrasts with the machinery that matches the fit, and produces the manuscript sentence via this package’s reporter for that family. It covers cumulative link models with and without random effects, linear and generalized linear mixed models, GLMs, the aligned rank transform, nparLD, multinomial regression, and the classical ANOVA / Welch / Kruskal-Wallis / Wilcoxon tests. - The point is that the test justified in the methods section and the model actually run come from one call on one data frame, so they cannot drift apart – the failure mode of a workflow where
recommend_test()prints advice that is then re-typed by hand. -
outcome_type =overrides the automatic classification. This matters more than it sounds: an outcome whose scores stay whole numbers is taken for a count and fitted with a Poisson model. That catches the six raw NASA-TLX subscales, a single MISC rating, and item-level ratings; SUS and RTLX escape it only because their multipliers and means make them fractional.
Pareto fronts in the direction you actually optimise
-
add_pareto_moocore_column()andadd_pareto_emoa_column()gainmaximise. Both minimised unconditionally:moocore::is_nondominated()was called with itsmaximise = FALSEdefault andemoa::is_dominated()has no direction argument at all. Since trust, acceptance, perceived safety and most other rating-scale objectives are maximised, using them meant passing negated copies of your own columns and remembering to negate them everywhere else too. Passmaximise = TRUE, or a logical vector with one entry per objective for a mixed problem (c(TRUE, TRUE, FALSE)to maximise two and minimise a workload score). The default staysFALSE, so existing results are unchanged. - The length of
maximiseis validated.moocore::is_nondominated()accepts three flags for two objectives and quietly uses the first two, which would produce a plausible, wrong front; passing the wrong number here is an error naming the objectives instead. - A test asserts the two backends agree on the same front under every direction setting, and that
maximise = TRUEmatches the negate-your-columns workaround it replaces.
Starting a study
- New
use_study_project()scaffolds a study analysis as a reproducible pipeline: a ‘targets’ pipeline that recomputes only what changed, R scripts split along the stages every user study goes through (read, clean, score, model, plot), a Quarto report, a directory the generated LaTeX lands in so a manuscript\input{}s the numbers instead of having them re-typed,renvfor version pinning, and a.gitignorethat keeps generated output out of the repository. - It ships synthetic example data with a column per item of every instrument named, so a freshly scaffolded project runs end to end before any real data exists. The generated
OUTCOMESandOUTCOME_TYPESvectors are derived by scoring a dummy row through the real code path, so the scaffold cannot name a column thatscore_questionnaire()does not produce. - It never overwrites an existing file unless asked, so it can be re-run on a live project to pick up new pieces.
BUG FIXES
reportggstatsplot()named every effect sizer. Each branch pasted a literal, r=, but only the rank-based tests actually produce an r: a t-test yields Hedges’ g, an ANOVA Omega2, a Friedman test Kendall’s W, a Kruskal-Wallis Epsilon2 (rank). The sentence therefore put a wrong statistic name in the manuscript, and for the standardised mean differences an impossible one – a paired t-test on 16 pairs emittedr=-1.38, a correlation outside the range r can take. The reporter now reads the effect-size name that statsExpressions supplies in theeffectsizecolumn ofextract_stats()and renders the matching symbol (, , , , , , ), keeping the existing\rankbiserial{}macro where the effect size really is a rank-biserial correlation, so this reporter andreportArtCon()stay consistent and no LaTeX preamble changes. Names it does not recognise – the robust tests return long descriptive ones – are printed verbatim rather than guessed at. Any .tex generated by this function before 0.2.0 needs its effect-size label checked.The same values were formatted with the internal bounded-statistic formatter, which drops the leading zero under
options(colleyRstats.leading_zero = FALSE). That is APA-correct only for statistics bounded within [-1, 1]. Hedges’ g and Cohen’s d are unbounded and now keep their leading zero.save_paper_figure()resized only the last panel of a multi-panel figure. It applied the type size withplot + .resize_theme(base_size), and on a patchwork object+modifies the last plot only – so a seven-panel grid came out with six panels at whatever size they were built with and one at the figure size, which reads as a single oversized panel. Resizing now dispatches on the object:&for a patchwork, so it reaches every panel,+for a single plot as before. A test asserts every panel of a grid ends up at one size. ## DOCUMENTATIONNew
vignette("scoring-questionnaires")covers the scoring key, verifying a mapping before trusting it, incomplete responses, reliability, registering your own instrument, and the sickness time course.The
pkgdownreference index gains Questionnaires and Starting a study sections.
colleyRstats 0.1.6
CRAN release: 2026-08-25
BUG FIXES
-
reportNparLD()announced “no significant effects” for every model fitted with ‘nparLD’ 2.3.0, however strong the effect actually was. That release rewrote the objectnparLD::nparLD()returns: it now has classnparld_fitand carries the ANOVA-type statistic in$ATS, where earlier versions used$ANOVA.test. Asking for the old name yieldedNULL, andas.data.frame(NULL)is a table with no rows – which the code that followed could not tell apart from a table in which nothing crossed p < .05. A toy fit with ATS = 92.8 and p < 1e-10 was reported as effect-free. Both layouts are now recognised, and an object carrying neither raises an error instead of silently reporting nothing. - The example on
?reportNparLDpasseddescription = FALSEtonparLD::nparLD(). ‘nparLD’ 2.3.0 dropped that argument, soR CMD check --run-donttestfailed on CRAN withunused argument (description = FALSE). The call now uses only arguments both versions accept, and the toy data carries a trend over time so the example demonstrates a reported sentence rather than the no-effect message.
NEW FEATURES
- New
animate_mobo2(), the video counterpart ofgenerateMoboPlot2(). It draws one frame per iteration and encodes them withav, so an optimisation run can be shown building up rather than only in its finished state; the file extension picks the container (.mp4,.gif,.mov, …). The plot is built once from the complete data and each frame only hides rows, which is what keeps the axes, the sampling/optimisation guides and the legend still while the points, intervals, fitted line and its equation move. It is also the only way the early frames can be drawn:generateMoboPlot2()requires both phases to be present, and the first iterations are all sampling.avis aSuggests, so nothing changes for installations that do not want it.
colleyRstats 0.1.5
CRAN release: 2026-08-19
BUG FIXES
colleyRstats_setup()made it impossible to attach a meta-package afterwards.library(colleyRstats),colleyRstats_setup(),library(easystats)died on the third line with.onAttach failed in attachNamespace() for 'easystats': object 'quietly' not found, which broke every downstream analysis script that opens that way. The cause was theset_conflicts = TRUEdefault:conflicted::conflict_prefer()does not merely record a preference, it activatesconflicted, which attaches a.conflictsenvironment carrying its ownlibrary()andrequire()shims. Every later attach in the session then went through those shims, which forwardquietlyandverboseintobase::library()as unevaluated symbols; a package whose.onAttachinspects the callinglibrary()frame – meta-packages do this to decide whether to print their banner – evaluated those symbols in a frame that does not bind them, and the attach failed outright.set_conflictsnow defaults toFALSE, so nothing takes overlibrary()unless it is asked to. The preference list is unchanged and still takes effect when you opt in.Preferences that fail to register are no longer discarded silently. The
try()around the loop existed so that one unsettable preference could not abort the rest, but it also swallowed the fact that it had failed; withverbose = TRUEthe failures are now named.Figures saved at the column presets came out unreadable.
colleyRstats_setup()set text sizes in absolute points (axis text 17 pt, axis titles 20 pt, plot titles 28 pt, strip text 22 pt) whilesave_paper_figure(columns = 1)writes a 3.33 x 2.22 in PDF. Points do not shrink with the canvas, so on a single-column figure the type came out about three times what fits: axis titles ran off the page entirely, and three-level factor labels such asdemonstration/language/rewardoverprinted into an unreadable smear. Type size is now derived from the width the figure is actually written at.generateEffectPlot()fixed its legend title at 14 pt, and the fourggstatsplotwrappers fixedtextat 16 pt andplot.subtitleat 17 pt. These absolute values overrode whatever theme the caller had chosen, so they survived any attempt to scale a figure down. They are now relative to the theme.Significance-bracket labels were fixed at 4 mm (about 11 pt).
ggsignifmeasures text in millimetres while themes measure it in points, so the label kept its physical size no matter how small the figure was drawn and ended up larger than the axis text beside it. Bracket text now follows the active theme; at the historical 17 pt base it is still 4 mm, so existing figures do not shift.
NEW FEATURES
- New
colley_theme(base_size, base_family), the package theme as a function. Every text element is a multiple ofbase_sizerather than an absolute point size, so one theme serves a journal column, a full-width figure and a slide – only the number changes. The multipliers are axis titles 1.15, axis text 1.0, plot title 1.65, subtitle 1.0, caption 0.8, legend text 0.9, strip text 1.3. - New
figure_base_size(width), the rule that turns a figure width into a type size: 3.33 in gives 7 pt and 7 in gives 9 pt, interpolated between and clamped outside. Exported so the choice is inspectable rather than buried. -
save_paper_figure()gainsbase_size. The defaultNULLderives it from the width, which is the fix above; pass a number to choose it, orNAto leave the plot’s own text sizes untouched. The confirmation message now names the size used. -
colleyRstats_setup()gainsbase_size(default 17), passed through tocolley_theme(). - A
pkgdownsite (_pkgdown.ymlplus a deploy workflow) puts the 56 help topics into a grouped reference index – session setup, pipelines, test selection, assumptions, plots, reporting, effect sizes, LaTeX output, data preparation – instead of one alphabetical wall.
DOCUMENTATION
- The README and
vignette("getting-started")now show the session-setup pattern, including wherecolleyRstats_setup()belongs relative to yourlibrary()calls and what happens if it goes first. Neither had covered this, which is how theconflicteddefect above reached three downstream analysis repositories. - The
snake_casespellings (report_art(),plot_effect(),check_assumptions_anova(), …) are now stated to be the canonical ones, and the documentation uses them throughout: README, vignettes, and thepkgdownreference index. Every affected help page gained a Naming section saying which spelling to prefer and that the other is not going away. Previously the aliases file describedsnake_caseas the discoverable API while the README taughtcamelCaseexclusively, and nothing told a reader which to use.
BACKWARD COMPATIBILITY
- The
camelCasefunction names (reportART(),generateEffectPlot(), and the rest) are now marked superseded. Nothing changes at runtime: they are the same function objects, they emit no warnings, and they are not scheduled for removal. Only the documentation’s recommendation has changed. -
colleyRstats_setup(set_options = TRUE)now emits a deprecation warning instead of an easily missed message, and the warning is no longer suppressed byverbose = FALSE. The argument has had no effect since globaloptions()handling was removed for CRAN compliance;set_options = FALSEis unaffected. -
colleyRstats_setup()no longer setsconflictedpreferences by default. Passset_conflicts = TRUEfor them, and place that call after everylibrary()call in the script rather than before. That ordering is a requirement – onceconflictedis active, attaching a meta-package fails – and it is also where the preferences do most good, sinceconflictedresolves only those names that are ambiguous among the packages attached at the time. -
colleyRstats_setup()with no arguments produces the same text sizes as before: the defaultbase_size = 17reproduces the previous absolute values exactly (17 / 19.55 / 28.05 / 15.3 / 22.1 pt), and there is a regression test pinning them. - Figures written through
save_paper_figure()do change, which is the point of the fix – they become legible at the size they are placed at. To keep a figure exactly as it was, passbase_size = NA. - Because the theme is now built as
see::theme_lucid(base_size = ...)rather thantheme_lucid()with sizes overridden on top, margins and spacing scale with the text instead of staying at the 11 pt defaults. This is part of why elements used to collide.
colleyRstats 0.1.4
CRAN release: 2026-07-25
BUG FIXES
-
reportART()reported no F statistic and no effect size for mixed ART models.stats::anova()names the F columnF valuefor a between-only (lm) fit but plainFfor a mixed (lmer) one, and only the former was read – so every model containing a random term (+ (1 | participant), i.e. any within-subjects design) produced\F{3}{108}{}with the statistic missing, silently dropped the partial eta-squared, and left the opening parenthesis unclosed. The F column is now resolved by whichever name it carries. -
reportART()now always closes the statistics parenthesis. It was appended only when an effect size could be computed, so sentences without one shipped unbalanced parentheses into LaTeX. -
reportggstatsplotPostHoc()emitted a stray)after the p-value:... (\m{3.8}, \sd{1.6}); \padj{0.001}).The mean/SD parenthetical closed too early, leaving the p-value outside the parentheses it belongs to and the sentence unbalanced. It now reads... (\m{3.8}, \sd{1.6}; \padj{0.001})., matchingreportArtCon(). - Degrees of freedom are formatted for display. Greenhouse-Geisser corrected, Kenward-Roger and Welch dfs are fractional and were pasted at full double precision, e.g.
\F{1.80875305770353}{66.9238631350305}{0.11}andF(2, 180.000000000002). Whole dfs stay whole; fractional ones are rounded to two decimals. -
reportggstatsplot()chooses the indefinite article from the method name, so it reads “An ANOVA …” rather than “A ANOVA …”.
DOCUMENTATION
- Updated the Datanovia ANOVA-assumptions link, which had moved (README and the
check_assumptions_anova()guidance message).
colleyRstats 0.1.3
CRAN release: 2026-07-16
NEW FEATURES
- New vignette “Analyzing a typical user study” (
vignette("analyzing-a-user-study")): a complete walkthrough from raw within-subjects data to manuscript-ready figures and LaTeX text. - Friendlier errors everywhere a column name is passed: plotting and reporting functions now validate
x/y/iv/dv/factors/objectivesup front and report which column is missing plus the available columns, instead of failing later with a cryptic dplyr/rlang error. - The plot wrappers warn when
xlabelsdoes not match the number of observed groups (previously the axis labels silently misaligned). -
not_empty()now names the offending argument in its default error message. -
remove_outliers_REI()acceptsvariablesas a character vector (e.g.c("var1", "var2")) in addition to the comma-separated string. -
add_pareto_emoa_column()/add_pareto_moocore_column()verify that the objective columns exist and are numeric.
BUG FIXES
-
?replace_valuesworks again: a malformed roxygen@nametag had redirected its documentation to a straydata-the-data-framehelp page. -
reportArtCon()now escapes the dependent variable and condition names for LaTeX and renders the IV via the same name-macro policy asreportDunnTest(); previously names with underscores produced uncompilable LaTeX. - The
reshape_data()example was not runnable (requireNamespace()was called with a vector and a misspelled package name). -
latex_preamble()no longer documents itspathargument twice;rFromNPAV()’s documentation block is no longer split by a stray comment line. -
reportNPAV()no longer refers to the non-existentreportNPAVChi()when the input lacks aPr(>F)column. - README: removed the section documenting the non-existent
reportNPAVChi(), refreshed the stalereportNPAV()deprecation date, fixed the doubleanova()call in thereportART()example, and documented the newer API (recommend_test, pipelines, Overleaf output) and all vignettes.
PERFORMANCE
-
ggwithinstatsWithPriorNormalityCheck()no longer runs an unused Levene test (the asterisk variant was already fixed in 0.1.0).
colleyRstats 0.1.2
CRAN release: 2026-07-06
NEW FEATURES
- Principled model selection:
classify_outcome()determines a variable’s measurement scale (continuous, ordinal, binary, count, nominal) andrecommend_test()turns scale x clustering x assumption checks into a concrete recommendation – including mixed models – with the matching reporter, a ready-to-edit fit call, a rationale, and an APA-style methods sentence. - Mixed-model reporters:
reportGLMM()(lme4 / glmmTMB / lm / glm; odds and incidence-rate ratios are chosen automatically from the family) andreportCLMM()(ordinal::clmm / clm). - Overleaf-oriented output layer:
use_colleyrstats_sty()ships the macro package,emit_name_macros()/define_result_macro()generate\newcommandstubs and single-source-of-truth result macros,expand_latex_macros()– withoptions(colleyRstats.macros = FALSE)– expands everything to plain math, andemit_overleaf()bundles a whole analysis into a compilable Overleaf project. -
latex_escape()escapes LaTeX special characters in user-supplied names. - New vignettes: “Choosing the right test (and mixed models)” and “From R to Overleaf: publication-ready output”.
colleyRstats 0.1.0
CRAN release: 2026-06-11
NEW FEATURES
-
analyze_and_report(): one-call pipeline per dependent variable – assumption checks with a ready-made methods sentence, the matching ggstatsplot figure (automatic parametric/non-parametric selection), the omnibus result, and post-hoc comparisons. -
report_all(): runsanalyze_and_report()over many dependent variables (e.g., all questionnaire scales of a study), returns a summary table with Holm-adjusted omnibus p-values across the DVs, and a combined figure whenpatchworkis installed. -
latex_preamble(): prints (or writes to a file) the complete set of LaTeX\newcommanddefinitions required by the report functions – no more hunting through individual help pages. - All report functions accept
sink_toto write their output to a.texfile, so manuscripts can\input{}the results and stay up to date when the analysis is re-run. They all also invisibly return their text for programmatic use (e.g., inline in Quarto/R Markdown). -
save_paper_figure(): saves plots with publication presets (ACM-style single-column 3.33 in / full-width 7 in). PDFs use Cairo for embedded fonts on Windows/Linux; on macOS the default pdf device is used because R’s cairo there can crash the session (observed as segfaults on GitHub Actions macOS runners). Adeviceargument allows overriding. -
assumption_methods_text(): turns the Shapiro-Wilk (and optionally Levene) checks into the methods-section justification sentence reviewers expect, including the test statistics.check_normality_by_group()andcheck_homogeneity_by_group()now attach their test statistics as attributes. -
cite_methods(): prints methods boilerplate plus the BibTeX entries for the packages behind the analyses (ART, Dunn, nparLD, ggstatsplot, effectsize). - Consistent snake_case aliases with discoverable prefixes for the whole API (e.g.,
report_art(),report_dunn_test(),plot_between_stats(),check_assumptions_anova()). The original names remain fully supported. - New option
options(colleyRstats.leading_zero = FALSE)for APA-style p-values and effect sizes without the leading zero (e.g.,p=.033). - Significance brackets in the asterisk plot helpers are now stacked relative to the data range, so the layout works for any dependent-variable scale (1-7 Likert and 0-100 TLX alike).
BUG FIXES
-
reportggstatsplot()now recognizes the unpaired non-parametric test (“Wilcoxon rank sum test”, reported with its W statistic); previously such results fell through to a generic fallback format. The signed-rank (paired) variant keeps the V statistic. The p-value is also compared before rounding, so e.g. p = 0.0009 is reported as “p < 0.001” again. -
reportNPAV(),reportART(), andreportNparLD()withwrite_to_clipboard = TRUEnow write all significant effects to the clipboard at once; previously each effect overwrote the previous one and only the last sentence survived. These functions now also invisibly return the reported sentences. - The asterisk plot helpers (
ggbetweenstatsWithPriorNormalityCheckAsterisk(),ggwithinstatsWithPriorNormalityCheckAsterisk()) no longer drop significant comparisons whose adjusted p-value is exactly 0.01 or 0.001. -
replace_values()no longer round-trips untouched numeric columns throughas.character(), which silently truncated values to 15 significant digits. -
reportggstatsplotPostHoc()handles missing values in the dependent variable (na.rm = TRUE) and falls back to the raw level name when alabel_mappingsentry is missing instead of producing malformed text. -
reportNparLD()output now correctly says “nparLD analysis” instead of “NPAV”, and the required\dfLaTeX command is documented. -
reportDunnTestTable()andreportArtConTable():orderByP = TRUEnow takes precedence over the default alphabetical ordering instead of being silently undone by it. - Partial eta squared in
reportART()/reportNPAV()is now computed from the unrounded F statistic. -
rFromWilcoxAdjusted()caps the adjusted p-value at 1, avoidingNaNresults. -
generateMoboPlot2()stops with a clear error when the phase column lacks “sampling”/“optimization” rows instead of producing-Infpositions. -
normalize()rejects a zero-width input range instead of returningInf/NaN. -
remove_outliers_REI()now actually uses itsrangeargument (validation plus an out-of-range warning) and ignoresNAresponses when tallying instead of poisoning row counts. -
reshape_data()reports a clear error when marker-delimited sections have unequal column counts. -
checkAssumptionsForAnova()distinguishes “normality could not be assessed” from “normality violated” and uses a consistent p < 0.05 boundary. - Effect-size failures in the Dunn/ART post-hoc reporters now emit a warning instead of being silently swallowed.
- The four
gg*WithPriorNormalityCheck*()wrappers now pass the palette in the"pals::glasbey"format required by current ggstatsplot; the deprecatedpackage=/palette=pair was being ignored with a warning, so plots silently used the default palette instead of glasbey.
PERFORMANCE
-
add_pareto_emoa_column()usesemoa::is_dominated()directly instead of matching rows against the Pareto front with floating-point equality (was O(front size x rows)). - The mobo plots draw their annotation segments once via
annotate()instead of once per data row. -
ggwithinstatsWithPriorNormalityCheckAsterisk()no longer runs an unused Levene test.
DEPENDENCIES
- Reduced hard dependencies: ARTool, car, clipr, conflicted, FSA, ggtext, readxl, report, rstatix, writexl, and xtable moved from Imports to Suggests (functions that need them check at runtime and degrade gracefully or stop with an informative message).
caris no longer used by the package code at all. - ggplot2 moved from Imports to Depends: the ggproto stats of ggpmisc 0.7.0/ggpp 0.6.0 resolve their parent classes via the search path, so
generateMoboPlot()/generateMoboPlot2()fail with “object ‘Stat’ not found” whenever ggplot2 is not attached. Attaching colleyRstats now attaches ggplot2 as well.
colleyRstats 0.0.5
MINOR CHANGES
- new function
add_pareto_moocore_column(). Should be less buggy than the one fromemoa
colleyRstats 0.0.4
CRAN release: 2026-05-03
MINOR CHANGES
- exposed new parameters for
generateMoboPlot2().
colleyRstats 0.0.3
CRAN release: 2026-04-24
MINOR CHANGES
- Fixed documentation defaults for
colleyRstats_setup()andgenerateMoboPlot2(). - Made
generateMoboPlot2()default tofillColourGroup = "ConditionID"so the documented default works out of the box. - Simplified the GitHub Actions test workflow to install dependencies from package metadata.
- Expanded tests for plotting and reporting behavior.
- Added a getting-started vignette and linked it from the README.