This repository contains the complete supplementary materials for the methodology paper "Statistical Optimization of Multi-Factor Adsorption Processes Using Factorial ANOVA: A JASP-Based Methodology Demonstration" (Rababah, 2025).
The study demonstrates a comprehensive statistical framework for optimizing multi-factor adsorption processes using factorial analysis of variance (ANOVA), with emphasis on detecting and interpreting interaction effects that are unattainable through traditional one-factor-at-a-time (OFAT) approaches.
- Complete factorial ANOVA workflow using accessible open-source software (JASP)
- Interaction effects analysis revealing that optimal dosage depends on adsorbent type
- Simple effects decomposition showing differential dosage sensitivity across materials
- Reproducible methodology with all data, code, and analysis files provided
- Educational resource for researchers learning factorial experimental design
| Aspect | Details |
|---|---|
| Dataset | 2,304 synthetic experiments (768 conditions Γ 3 replicates) |
| Adsorbents | Activated Carbon, Biochar, MOF, Zeolite |
| Factors | Adsorbent type, Dosage (4 levels), Contact time (4 levels), Initial concentration (4 levels), pH (3 levels) |
| Models | Langmuir isotherm, Pseudo-second-order kinetics |
| Variability | CV = 6.6β8.7% (realistic laboratory precision) |
| Analysis Software | JASP v0.18.3 (open-source) |
| Data Generation | Python 3.8+ with NumPy, Pandas, SciPy |
| Analysis | F-statistic | p-value | Effect Size (Ξ·Β²) | Interpretation |
|---|---|---|---|---|
| One-way ANOVA (Adsorbent Type) | F(3,2300) = 34.8 | p < .001 | Ξ·Β² = .043 | Significant differences among adsorbents |
| Two-way ANOVA (Adsorbent Γ Dosage) | F(9,2288) = 17.74 | p < .001 | Ξ·Β² = .042 | Critical interaction effect |
| Three-way ANOVA (+ Contact Time) | F(27,2208) = 0.06 | p = 1.000 | Ξ·Β² < .001 | No higher-order interaction |
| Adsorbent | Mean qβ (mg/g) | SD | Min | Max |
|---|---|---|---|---|
| MOF | 47.26 | 59.16 | 0.199 | 300.0 |
| Activated Carbon | 41.87 | 50.63 | 0.153 | 239.0 |
| Biochar | 29.96 | 34.68 | 0.099 | 158.4 |
| Zeolite | 23.48 | 23.27 | 0.124 | 102.8 |
| Adsorbent | F-statistic | Ξ·Β² | 95% CI | Interpretation |
|---|---|---|---|---|
| MOF | F(3,572) = 17.0 | .380 | [.321, .433] | Highest sensitivity |
| Activated Carbon | F(3,572) = 10.2 | .366 | [.306, .420] | High sensitivity |
| Biochar | F(3,572) = 6.46 | .366 | [.275, .391] | Moderate sensitivity |
| Zeolite | F(3,572) = 85.59 | .310 | [.249, .365] | Lower sensitivity |
The non-parallel lines indicate a significant interaction effect: optimal dosage strategy depends on adsorbent type. MOF shows the steepest decline, indicating highest dosage sensitivity.
All adsorbents show large effect sizes (Ξ·Β² > 0.14), but MOF and Activated Carbon demonstrate the highest dosage sensitivity.
Adsorption-Factorial-ANOVA/
β
βββ π README.md # This file
βββ π LICENSE # CC BY 4.0 License
βββ π CITATION.cff # Citation metadata
βββ π .gitignore # Git ignore rules
β
βββ π data/
β βββ adsorption_dataset_full.csv # Complete dataset (2,304 experiments)
β βββ DATA_DICTIONARY.md # Variable descriptions and metadata
β
βββ π code/
β βββ generate_adsorption_dataset.py # Python script for data generation
β βββ create_figures.py # Python script for figure generation
β βββ requirements.txt # Python dependencies
β
βββ π analysis/
β βββ adsorption_JASP_analysis.jasp # JASP analysis file (reproducible)
β βββ JASP_QUICKSTART_GUIDE.md # Step-by-step JASP instructions
β
βββ π results/
β βββ figures/
β βββ Figure1_interaction_plot.png # Adsorbent Γ Dosage interaction
β βββ Figure2_boxplots_by_adsorbent.png
β βββ Figure3_bar_chart_means.png
β βββ Figure4_heatmap_adsorbent_dosage.png
β βββ Figure5_simple_effects_eta_squared.png
β βββ Figure6_removal_efficiency_pH.png
β βββ Figure7_kinetics_by_adsorbent.png
β βββ Figure8_violin_plot.png
β
βββ π docs/
βββ DETAILED_QA_DATASET_GENERATION.md # Q&A about methodology
βββ GITHUB_SETTINGS.md # Repository setup guide
- Download JASP (free): https://jasp-stats.org/download/
- Download the dataset:
data/adsorption_dataset_full.csv - Follow the guide:
analysis/JASP_QUICKSTART_GUIDE.md - Or open:
analysis/adsorption_JASP_analysis.jaspdirectly
# Clone the repository
git clone https://github.com/Anfal-AR/Adsorption-Factorial-ANOVA.git
cd Adsorption-Factorial-ANOVA
# Install dependencies
pip install numpy pandas scipy matplotlib seaborn
# Generate dataset
python code/generate_adsorption_dataset.py
# Generate figures
python code/create_figures.py- Modify adsorbent parameters in
code/generate_adsorption_dataset.py - Adjust experimental conditions (dosages, times, concentrations)
- Generate custom dataset for your specific system
- Follow the same JASP workflow for analysis
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 1: Define Parameters (Literature-Based) β
β β’ Adsorbent properties (qmax, KL, k2) β
β β’ Experimental conditions (dosage, time, conc, pH) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 2: Solve Langmuir + Mass Balance β
β β’ Iterative numerical root-finding (scipy.fsolve) β
β β’ Ensures physical consistency β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 3: Apply Modifying Factors β
β β’ pH effects (0.75β1.0 multiplier) β
β β’ Kinetic limitations (PSO model) β
β β’ Dosage effects (aggregation at high dosages) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 4: Add Experimental Noise β
β β’ Normal distribution with CV = 7β10% β
β β’ Ensures realistic laboratory variability β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Descriptive Statistics β Assumption Checking β One-way ANOVA
β
Two-way ANOVA
β
Significant Interaction?
/ \
Yes No
β β
Simple Effects Report Main
Analysis Effects Only
β
Three-way ANOVA
(if needed)
Where:
- qβ = equilibrium adsorption capacity (mg/g)
- qβββ = maximum adsorption capacity (mg/g)
- Kβ = Langmuir constant (L/mg)
- Cβ = equilibrium concentration (mg/L)
Where:
- qβ = adsorption capacity at time t (mg/g)
- kβ = rate constant (g/(mgΒ·min))
- t = contact time (min)
| Adsorbent | qβββ (mg/g) | Kβ (L/mg) | kβ (g/(mgΒ·min)) | Noise (CV) |
|---|---|---|---|---|
| Activated Carbon | 250 | 0.15 | 0.0003 | 8% |
| Biochar | 180 | 0.10 | 0.0002 | 10% |
| MOF | 300 | 0.20 | 0.00035 | 7% |
| Zeolite | 120 | 0.08 | 0.00025 | 9% |
numpy>=1.20.0
pandas>=1.3.0
scipy>=1.7.0
matplotlib>=3.5.0
seaborn>=0.11.0
- JASP v0.17+ (free, open-source): https://jasp-stats.org/
If you use this dataset, methodology, or code in your research, please cite:
@article{rababah2025factorial,
title={Statistical Optimization of Multi-Factor Adsorption Processes
Using Factorial ANOVA: A JASP-Based Methodology Demonstration},
author={Rababah, Anfal},
journal={Zenodo},
year={2025},
doi={10.5281/zenodo.17563321},
url={https://doi.org/10.5281/zenodo.17563321}
}APA Format:
Rababah, A. (2025). Statistical optimization of multi-factor adsorption processes using factorial ANOVA: A JASP-based methodology demonstration. Zenodo. https://doi.org/10.5281/zenodo.17563321
Contributions are welcome! Please feel free to:
- π Report bugs or issues
- π‘ Suggest improvements to the methodology
- π Improve documentation
- π§ Add new features to the data generation script
- π Translate guides to other languages
This work is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).
You are free to:
- Share β copy and redistribute the material
- Adapt β remix, transform, and build upon the material
Under the following terms:
- Attribution β You must give appropriate credit and indicate if changes were made
Anfal Rababah
- π§ Email: Anfal0Rababah@gmail.com
- π¬ ORCID: 0009-0003-7450-8907
- π Platform: SparkSkyTech Educational Platform
- JASP Team for developing and maintaining the open-source JASP software
- Scientific Community for establishing the theoretical foundations of adsorption models
- Claude (Anthropic) for assistance with literature organization, technical writing refinement, and Python code development
Open Science β’ Reproducible Research β’ Accessible Statistics
Made with β€οΈ for the research community




