The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
factorH provides a simple, single-call workflow for multifactor nonparametric, rank-based ANOVA and publication-ready outputs:
Why? Popular GUI stats tools do not offer a ready-made, user-friendly multifactor rank-based pipeline that mirrors standard H / SRH analyses in a way that is easy for beginners. factorH aims to fill that gap with clear R-like formula syntax and a one-command report function.
The package is intentionally small: most users will only ever need:
srh.kway.full(...) to compute the full pipelinewrite.srh.kway.full.tsv(...) to export the results into
a single tab-separated fileAdvanced integrations can additionally use:
as_jamovi_srh_full(...) to normalize
srh.kway.full() output into a stable Jamovi/backend
structureAll high-level functions use standard R model formulas:
response ~ factorA + factorB + factorC
+ lists the main effects.A:B or A*B.~) must be numeric (e.g., a
Likert score coded as 1 to 5 and stored as numeric).Examples below use the included dataset mimicry.
library(factorH)
data(mimicry, package = "factorH")
str(mimicry)
Predictors should be factors. If they are not, the functions will coerce them to factors internally.
What is allowed?
# One factor (KW-style):
liking ~ condition
# Two factors (SRH-style):
liking ~ gender + condition
# Three or more factors (k-way):
liking ~ gender + condition + age_cat
You do not need to write gender:condition or
gender*condition. The package constructs the required
interaction terms internally when needed.
The response must be numeric. For Likert-type responses (e.g., 1 = strongly disagree, …, 5 = strongly agree), keep the variable numeric. Rank-based procedures can be used with such ordinal-like data.
If your Likert variable has been imported as a factor or character, coerce it safely:
# if stored as character "1", "2", ...:
mimicry$liking <- as.numeric(mimicry$liking)
# if stored as factor with labels "1", "2", ...:
mimicry$liking <- as.numeric(as.character(mimicry$liking))
Most users can cover assumption checks with a single command:
diag_out <- plan.diagnostics(response ~ factorA + factorB (+ factorC ...), data = your_data)
What it does:
diag_out$results, with
per-type OK percentages in diag_out$summary.For most workflows, this single command is enough to document design diagnostics alongside rank-based analyses.
The main function srh.kway.full() runs:
Dunn; adjusted
P.adj)It also supports: - type = 2 vs type = 3 -
scope = "within" vs scope = "global" for
simple-effects Bonferroni - design diagnostics and warnings stored in
res$meta
For 2 factors:
res2 <- srh.kway.full(liking ~ gender + condition, data = mimicry)
names(res2)
res2$anova
head(res2$summary)
names(res2$posthoc_cells)
names(res2$posthoc_simple)
For 2 factors with Type III SS:
res2_t3 <- srh.kway.full(liking ~ gender + condition, data = mimicry, type = 3)
res2_t3$anova
For 3 factors:
res3 <- srh.kway.full(liking ~ gender + condition + age_cat, data = mimicry)
res3$anova
For global simple-effects Bonferroni:
res3g <- srh.kway.full(
liking ~ gender + condition + age_cat,
data = mimicry,
scope = "global"
)
names(res3g$posthoc_simple)
f <- file.path(tempdir(), "result.tsv")
write.srh.kway.full.tsv(res3, file = f, dec = ".")
file.exists(f)
If you need a decimal comma:
f2 <- file.path(tempdir(), "result_comma.tsv")
write.srh.kway.full.tsv(res3, file = f2, dec = ",")
file.exists(f2)
The TSV contains clearly separated sections:
## SRH: EFFECTS TABLE## SUMMARY STATS## POSTHOC CELLS## SIMPLE EFFECTS## METAand can be easily opened in spreadsheet software such as Excel or Google Sheets.
If you want to map the full pipeline into a Jamovi module or another structured frontend, use:
jam <- as_jamovi_srh_full(res3)
names(jam)
This helper does not build Jamovi result objects directly. Instead,
it normalizes the srh.kway.full() output into a predictable
list of sections and items that can be consumed by a backend.
mimicry is a real study on the chameleon effect
(Trzmielewska et al., 2025) about how movement conditions affect
liking of an interlocutor. Potential moderators include
gender and age (with dichotomized
age_cat and a 3-level age_cat2). This makes it
a natural playground for multifactor rank-based analyses.
table(mimicry$condition)
table(mimicry$gender)
table(mimicry$age_cat)
srh.kway(): rank-based k-way ANOVA table using Type II
SS by default, with an optional switch to Type III SS; p-values are
tie-corrected; H is reported with and without the correction factor;
effect sizes are computed from unadjusted H.srh.effsize(): 2-factor SRH table with effect sizes
(eta2H, eps2H) computed from H.nonpar.datatable(): compact descriptive tables with
global mean ranks, medians, quartiles, IQR, etc., for all main effects
and interactions.srh.posthocs(): Dunn-Bonferroni pairwise matrices
(P.adj) for all effects (main effects and
interactions).srh.simple.posthoc() /
srh.simple.posthocs(): simple-effects pairwise comparisons
within levels of conditioning factors (scope = "within" by
default).srh.kway.full(): orchestrates all of the above.write.srh.kway.full.tsv(): exports everything into one
TSV (with a dot or comma decimal mark).as_jamovi_srh_full(): normalizes full-pipeline results
for Jamovi/backend integration.plan.diagnostics(): one-call diagnostics: raw
normality, residuals cellwise normality, Levene (median), and balance
chi-square; prints an overall summary and returns full tables.That is it. For most users, the intro ends here: use
srh.kway.full() and export with
write.srh.kway.full.tsv().
C:0u34e45b057346-intro.R
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.