The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.
Try it now — no installation: https://doepro.pages.dev
A free, open, single-file R Shiny application for the analysis of designed agricultural experiments. It brings the standard analyses used in field and horticultural research — ANOVA for the common designs, mean comparisons, data transformations and clear reporting — together in one accessible interface, and serves as a free, self-contained option for the kind of analysis researchers carry out in tools such as OPSTAT.
Paste your data straight out of Excel, choose the design, press Run analysis. You get the ANOVA, publication-format tables of means with SE(m)±, SE(d), C.D. (P≤0.05) and C.V. at the foot, automatic advice on data transformation, post-hoc comparisons, plots, a plain-English interpretation, and a report you can download as HTML or PDF.
Developed by
Suggestions and feedback are welcome — write to the maintainer (uzairkhan11w@gmail.com) or open an issue in the repository.
install.packages(c("shiny", "DT", "ggplot2")) # that is the whole dependency list
install.packages("pagedown") # optional: server-side PDF exportshiny::runApp("app.R")Or open app.R in RStudio and press Run
App.
MASS, car or
agricolae. Levene’s test, the Box-Cox profile
likelihood and all six post-hoc procedures are implemented directly. The
app depends only on shiny, DT and
ggplot2 — which is what makes free WebAssembly hosting
possible (see DEPLOYMENT.md).One factor, several parameters — one row per
treatment, one column per measured character, each cell
mean ± SE with the grouping letter as a superscript:
| TREATMENT | Yield | Plant height | Fruits per plant |
|---|---|---|---|
| T1 | 42.30 ± 1.26 ᶜ | 78.4 ± 2.1 ᵇ | 31.2 ± 1.4 ᵇ |
| T2 | 47.10 ± 1.26 ᵃ | 84.9 ± 2.1 ᵃ | 38.7 ± 1.4 ᵃ |
| SE(m) ± | 1.26 | 2.1 | 1.4 |
| SE(d) ± | 1.78 | 2.97 | 1.98 |
| C.D. (P≤0.05) Treatment | 3.81 | 6.34 | NS |
| C.V. (%) | 7.60 | 5.31 | 9.02 |
Two factors — the familiar grid with marginal means, and the three critical differences spelled out underneath:
| Factor 1 Factor 2 | I1 | I2 | I3 | Mean |
|---|---|---|---|---|
| T1 | 30.70 ᵈ | 36.12 ᶜ | 41.06 ᵇ | 35.96 |
| T2 | 36.56 ᶜ | 38.92 ᵇᶜ | 46.62 ᵃ | 40.70 |
| Mean | 33.63 | 37.52 | 43.84 | 38.33 |
SE(m) ± 0.86 / 0.70 / 1.22 SE(d) ± 1.22 / 0.99 / 1.72 C.D. (P≤0.05) Factor 1: 2.71 Factor 2: 2.21 Factor 1 × Factor 2: NS C.V. (%) 5.49
C.D. is printed only when the F-test for that source is significant;
otherwise the cell reads NS. When a response has been
transformed, each cell shows the back-transformed mean with the
transformed value in parentheses, and SE, C.D. and C.V. refer
to the transformed scale — because that is the scale on which the tests
were done.
| Design | Columns needed | Error term(s) |
|---|---|---|
| Completely randomised (CRD) | treatment, response(s) | single pooled error |
| Randomised complete block (RCBD) | block, treatment, response(s) | single pooled error |
| Latin square (LSD) | row, column, treatment, response(s) | single pooled error |
| Factorial CRD (2–4 factors) | factors A–D, response(s) | single pooled error |
| Factorial RCBD (2–4 factors) | block, factors A–D, response(s) | single pooled error |
| Split plot | replication, main plot, sub plot, response(s) | Error(a), Error(b) |
| Strip plot | replication, factor A, factor B, response(s) | Error(a), Error(b), Error(c) |
| Pooled analysis over environments (RCBD base) | environment, replication, treatment, response(s) | R(env), pooled error |
| Pooled analysis over environments (CRD base) | environment, treatment, response(s) | pooled error |
| Pooled factorial over environments (RCBD base, 2-4 factors) | environment, replication, factors A-D, response(s) | each effect vs its environment interaction; pooled error |
| Pooled factorial over environments (CRD base, 2-4 factors) | environment, factors A-D, response(s) | each effect vs its environment interaction; pooled error |
Data go in long format: one row per plot, one column per variable.
A split plot needs four different SE(d), and the app prints all four:
A strip plot needs three error strata and the analogous mixed comparisons. The cell-means table therefore carries two letter columns — one for each legitimate comparison.
| Signature | Suggestion |
|---|---|
| proportion in [0, 1], non-integer | arcsine √p |
| integer counts, Taylor slope b ≈ 1 | √y, or √(y + 0.5) with zeros |
| named as a percentage and bounded 0–100 | arcsine √(y/100) |
| b ≈ 2 | log y, or log(y + 1) with zeros |
| b > 2.5 | 1/y |
| otherwise | Box-Cox λ |
A 0–100 range on its own is not treated as evidence of percentage data — most yields and plant heights live there too. The adviser uses the column name and the mean–variance signature, and you can override it with the Nature of the response selector.
When the diagnostics are satisfied but the data are plainly counts or percentages, the app still names the conventional transformation and marks it optional, leaving the default at None. It tells you what convention expects; it does not transform behind your back.
Fisher’s protected LSD, Bonferroni-adjusted LSD, Tukey’s HSD, Duncan’s DMRT, Student–Newman–Keuls, and Scheffé. Each is computed from the error mean square and degrees of freedom of the effect you select, so in a split or strip plot they automatically use the right error stratum. Duncan and SNK report the full table of critical ranges Rₚ.
Download report (HTML) always works.
Download report (PDF) appears when the machine has a
rendering engine — pagedown (needs Chrome or Chromium),
weasyprint, or wkhtmltopdf. On a hosted server
without one, download the HTML and print to PDF from the browser; the
page footer carries the credit line either way.
Every page of the PDF carries, in the bottom-right corner:
DOEpro · Shah, Khan & Jeelani · SKUAST-Kashmir — page n
Executed under R 4.3.3 on generated data for all seven designs, with two response variables each. Checked by hand or against a reference implementation:
−n/2·log(RSS/n) + (λ−1)·Σ log y —
identical to the last decimal on six test cases.qtukey’s own numerical precision (≈2 × 10⁻⁸).save_pdf fallback chain, exercised against a stub
renderer.Not executed in the build environment: the Shiny UI layer, the
ggplot2 plots, and a real PDF render. Those are
desk-checked. If something misbehaves on first run, that is where to
look.
If DOEpro contributes to work you publish, please cite it:
Shah, I. A., Khan, U. J. and Jeelani, M. I. (2026). DOEpro: analysis of designed agricultural experiments. Version 2.0.0. Zenodo. doi:10.5281/zenodo.21399570
@software{doepro2026,
author = {Shah, Immad A. and Khan, Uzair Javid and Jeelani, M. Iqbal},
title = {DOEpro: Analysis of Designed Agricultural Experiments},
year = {2026},
version = {2.0.0},
doi = {10.5281/zenodo.21399570},
url = {https://github.com/Uzairkhan11w/DOEpro}
}The DOI above is the concept DOI: it always resolves to the
most recent release. GitHub’s Cite this repository
button reads CITATION.cff and produces the same
reference.
GPL-3. See CITATION.cff and DEPLOYMENT.md
for citation, DOI and publishing.
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.