Computational Provenance & Reproducibility Record

RAISINS - R and AI Solutions for INferential Statistics · Online Statistical Analysis Platform for Agricultural Research

Computational Provenance & Reproducibility Record Split-Split Plot Design · 1.0.0 · DOI 10.5281/zenodo.22224337

Computational Provenance & Reproducibility Record

RAISINS · Split-Split Plot Design Module

This Computational Provenance Record documents the statistical computing environment, software dependencies, computational provenance, and bibliographic references associated with the RAISINS Split-Split Plot Design module. It is intended to support computational reproducibility and software transparency. Detailed statistical methodology, mathematical derivations, and user guidance are provided separately in the official module documentation.

Any issues or updates required please comment here

Go to the App from here

1 Module Metadata

Parameter Specification
Module Split-Split Plot Design
Module Version 2.0.0
DOI 10.5281/zenodo.22224337
Document Type Computational workflow
Statistical Engine R
R Version 4.5.2
Reproducibility Execution Environment: GCP · renv-locked

2 Statistical Dependency Manifest

Package Version Repository Core Statistical Functions
stats 4.5.2 Base R lm(), manova(), prcomp(), residuals(), shapiro.test(), ks.test(), qt(), qtukey(), sd(), var()
agricolae 1.3-7 CRAN ssp.plot(), LSD.test(), HSD.test(), duncan.test()
effectsize 1.0.3 CRAN eta_squared()
broom 1.0.13 CRAN tidy()
factoextra 2.2.0 CRAN get_eigenvalue()
nortest 1.0-4 CRAN ad.test()
phia 0.3-2 CRAN interactionMeans()
GGally 2.4.0 CRAN ggpairs()
gtools 3.9.5 CRAN mixedsort(), mixedorder()
dplyr 1.2.1 CRAN group_by(), summarise(), across()
tidyr 1.3.2 CRAN pivot_longer(), pivot_wider()

3 Statistical Function Registry

Analytical Role Primary Function(s)
Split-split-plot ANOVA agricolae::ssp.plot(Block, A, B, C, y)
Post-hoc mean separation agricolae::LSD.test() (default), agricolae::HSD.test(), agricolae::duncan.test()
Grouping-letter ordering gtools::mixedsort(), gtools::mixedorder()
Multivariate analysis of variance stats::manova() on the matrix of responses
MANOVA effect size effectsize::eta_squared()
Principal component analysis stats::prcomp(center = TRUE, scale = TRUE)
Normality diagnostics (residuals) stats::shapiro.test(), nortest::ad.test(), stats::ks.test()
Interaction means phia::interactionMeans()
Treatment means & summaries dplyr::group_by(), dplyr::summarise(), tidyr::pivot_longer()

4 Default Methods & Parameters

Analysis Step / Parameter Default Method / Value
Split-split-plot ANOVA
(agricolae::ssp.plot())
Model y ~ Block + A + Ea + B + A:B + Eb + C + A:C + B:C + A:B:C + Ec - three separate error strata, one per plot size
Precision ordering The main-plot factor is tested least precisely and the sub-sub-plot factor most precisely, since EaEbEc in degrees of freedom
Standard errors & CV SEM sqrt(E / r), where E is that source's error stratum (Ea, Eb or Ec) and r the number of observations per level
SED sqrt(2 × E / r)
Coefficient of variation Reported separately per stratum - cv(a), cv(b) and cv(c) - as sqrt(E) × 100 / mean(y)
Design validation
(before any analysis runs)
Balance requirement Every A×B×C combination must appear the same number of times in every replication, with no empty cells; an unbalanced or incomplete design is rejected rather than analysed
Replication requirement Each treatment combination needs ≥ 2 observations; response columns must be numeric
MANOVA
(stats::manova(), optional)
Test statistic Pillai's trace (R's default), with its F-approximation and p-value; tidied via broom::tidy()
Effect size η2 from effectsize::eta_squared(), reported per source alongside the MANOVA table
Principal component analysis
(stats::prcomp(), optional)
Scaling center = TRUE, scale = TRUE - the correlation-matrix PCA
Component retention Eigenvalues from factoextra::get_eigenvalue(); components with eigenvalue > 1 are highlighted (Kaiser criterion)
Normality diagnostics
(on model residuals)
Default test Shapiro–Wilk shapiro.test() (3 ≤ n ≤ 5000); Anderson–Darling nortest::ad.test() and Kolmogorov–Smirnov ks.test() also available. Residuals are taken from lm(y ~ A + B + C + A:B + A:C + B:C + A:B:C)
Data transformations
(optional, per variable)
Logarithmic log10(x); if any value ≤ 0, log10(x - min(x) + 1)
Square-root sqrt(x); if any value = 0, sqrt(x + 0.5)
Arcsine asin(sqrt(x)) on proportions in [0, 1]; 0 and 1 replaced by 1/(4n) and 1 - 1/(4n); blocked outside [0, 1]

5 R Code for Key Analytical Steps

The code blocks below demonstrate the exact computation behind each reported result using ssp.csv, the split-split-plot field trial shipped with agricolae (Gomez & Gomez 1984, p. 143): grain yields of 3 rice varieties under 3 management practices and 5 nitrogen levels, in 3 replications - 5 × 3 × 3 × 3 = 135 plots, the fully balanced layout the module requires.

5.1 Split-Split-Plot ANOVA and its Three Error Strata

library(agricolae)
f   <- system.file("external/ssp.csv", package = "agricolae")
ssp <- read.csv(f)

Block <- factor(ssp$block)                            # replications
A     <- factor(ssp$nitrogen)                         # main-plot factor
B     <- factor(ssp$management)                       # sub-plot factor
C     <- factor(ssp$variety)                          # sub-sub-plot factor
y     <- ssp$yield                                    # response variable

# Combined factors, used for the interaction mean tables
AB  <- factor(paste(A, B, sep = ":"))
AC  <- factor(paste(A, C, sep = ":"))
BC  <- factor(paste(B, C, sep = ":"))
ABC <- factor(paste(A, B, C, sep = ":"))

# Split-split-plot ANOVA: agricolae builds the three error strata (Ea, Eb, Ec)
rcbd_anovaTable <- with(ssp, ssp.plot(block, nitrogen, management, variety, yield))
rcbd_result     <- as.data.frame(rcbd_anovaTable$ANOVA)
rcbd_result

5.2 Post-hoc Mean Comparison (LSD default; Tukey / DMRT alternatives)

rcbd_alpha <- 0.05                                    # default significance level

# Each source is compared against its OWN stratum - this is what distinguishes a
# split-split plot from an ordinary three-factor factorial:
rcbd_out    <- LSD.test(y, A,   rcbd_anovaTable$gl.a, rcbd_anovaTable$Ea, alpha = rcbd_alpha)
rcbd_outB   <- LSD.test(y, B,   rcbd_anovaTable$gl.b, rcbd_anovaTable$Eb, alpha = rcbd_alpha)
rcbd_outC   <- LSD.test(y, C,   rcbd_anovaTable$gl.c, rcbd_anovaTable$Ec, alpha = rcbd_alpha)
rcbd_outAB  <- LSD.test(y, AB,  rcbd_anovaTable$gl.b, rcbd_anovaTable$Eb, alpha = rcbd_alpha)
rcbd_outAC  <- LSD.test(y, AC,  rcbd_anovaTable$gl.c, rcbd_anovaTable$Ec, alpha = rcbd_alpha)
rcbd_outBC  <- LSD.test(y, BC,  rcbd_anovaTable$gl.c, rcbd_anovaTable$Ec, alpha = rcbd_alpha)
rcbd_outABC <- LSD.test(y, ABC, rcbd_anovaTable$gl.c, rcbd_anovaTable$Ec, alpha = rcbd_alpha)

# Grouping letters, ordered naturally
rcbd_out$groups[gtools::mixedsort(rownames(rcbd_out$groups)), ]

# statistics: MSerror, Df, Mean, CV, t.value, LSD -> CV is column 4, CD is column 6
rcbd_stat <- rcbd_out$statistics
rcbd_stat

# Alternatives selectable in the app (same DFerror / MSerror / alpha arguments):
#   Tukey HSD -> HSD.test(y, A, rcbd_anovaTable$gl.a, rcbd_anovaTable$Ea,
#                         alpha = rcbd_alpha)          # MSD is column 5
#   DMRT      -> duncan.test(y, A, rcbd_anovaTable$gl.a, rcbd_anovaTable$Ea,
#                            alpha = rcbd_alpha)$duncan

# Standard errors from that source's error stratum (r = observations per level)
rcbd_r   <- rcbd_out$means[1, 3]
rcbd_SEM <- sqrt(rcbd_stat[1, 1] / rcbd_r)
rcbd_SED <- sqrt((2 * rcbd_stat[1, 1]) / rcbd_r)

Explore the entire Split-Split Plot Design module in preview mode using our demo datasets. To submit suggestions or report a workflow issue, please use the discussion section below, or visit the official RAISINS website.

6 RAISINS Native Statistical Framework

RAISINS uses R for all its statistical computations. Every package used to generate major results is listed and demonstrated with examples, so results can be reproduced independently. These results are then organized and formatted on the RAISINS website along with visualisation to make them easier to use and interpret. RAISINS also has its own custom-built statistical tools for managing workflows, validating results, and generating reports. Details of these are not fully covered here, they’re shared with outside researchers only on request, and are subject to licensing terms.

7 Package References

R Core Team. (2025). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/

de Mendiburu, F. (2023). agricolae: Statistical Procedures for Agricultural Research (R package version 1.3-7). https://doi.org/10.32614/CRAN.package.agricolae

Ben-Shachar, M. S., Lüdecke, D., & Makowski, D. (2020). effectsize: Estimation of Effect Size Indices and Standardized Parameters (R package version 1.0.3). https://doi.org/10.32614/CRAN.package.effectsize

Robinson, D., Hayes, A., & Couch, S. (2025). broom: Convert Statistical Objects into Tidy Tibbles (R package version 1.0.13). https://doi.org/10.32614/CRAN.package.broom

Kassambara, A., & Mundt, F. (2020). factoextra: Extract and Visualize the Results of Multivariate Data Analyses (R package version 2.2.0). https://doi.org/10.32614/CRAN.package.factoextra

Gross, J., & Ligges, U. (2015). nortest: Tests for Normality (R package version 1.0-4). https://doi.org/10.32614/CRAN.package.nortest

De Rosario-Martinez, H. (2015). phia: Post-Hoc Interaction Analysis (R package version 0.3-2). https://doi.org/10.32614/CRAN.package.phia

Schloerke, B., Cook, D., Larmarange, J., Briatte, F., Marbach, M., Thoen, E., Elberg, A., & Crowley, J. (2025). GGally: Extension to ‘ggplot2’ (R package version 2.4.0). https://doi.org/10.32614/CRAN.package.GGally

Warnes, G. R., Bolker, B., & Lumley, T. (2023). gtools: Various R Programming Tools (R package version 3.9.5). https://doi.org/10.32614/CRAN.package.gtools

Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2025). dplyr: A Grammar of Data Manipulation (R package version 1.2.1). https://doi.org/10.32614/CRAN.package.dplyr

Wickham, H., Vaughan, D., & Girlich, M. (2025). tidyr: Tidy Messy Data (R package version 1.3.2). https://doi.org/10.32614/CRAN.package.tidyr

Gomez, K. A., & Gomez, A. A. (1984). Statistical procedures for agricultural research (2nd ed.). John Wiley & Sons, New York.

Feedback & Discussion