Module 3: Descriptive Statistics: Central Tendency, Dispersion & Environmental Summaries
Tested Stacks:
GATK 4.6.1
Samtools 1.21
Nextflow 24.10
Seurat v5.1
Python 3.12
Prerequisites: Basic Linux CLI & Sequencing Formats
Module 03 • Descriptive Stats
Track 19 • Applied Environmental Statistics
Hands-On R & RStudio Included
Module 3: Descriptive Statistics: Central Tendency, Dispersion & Environmental Summaries
Computing and interpreting mean, median, range, interquartile range (IQR), sample variance, standard deviation (s), standard error of the mean (SEM), and coefficient of variation (CV) across monitoring sites.
3. Descriptive Statistics: Central Tendency, Dispersion & Variation
Before performing formal hypothesis testing, scientists must summarize the distribution of their data. Descriptive statistics reduce large environmental monitoring series into two essential dimensions: Location (Central Tendency) and Spread (Dispersion).
Measures of Central Tendency
- Arithmetic Mean ($\bar{x}$): The center of mass: $\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i$. Highly sensitive to extreme pollution spikes or sensor artifacts.
- Median: The 50th percentile value. Robust to extreme outliers and asymmetric skewness.
- Mode: The most frequent observation. Used for discrete categories or multi-modal contaminant clusters.
Measures of Dispersion & Precision
- Sample Variance ($s^2$): Mean squared deviation: $s^2 = \frac{\sum (x_i - \bar{x})^2}{n - 1}$.
- Standard Deviation ($s$): Natural spread in original measurement units: $s = \sqrt{s^2}$.
- Standard Error of Mean (SEM): Uncertainty of sample mean estimating true population mean: $ ext{SEM} = \frac{s}{\sqrt{n}}$.
- Coefficient of Variation (CV%): Normalized unitless dispersion: $ ext{CV} = \frac{s}{\bar{x}} imes 100\%$.
Hands-On R Script: Building Group-Wise Environmental Summary Tables with dplyr
library(tidyverse)
# Sample Environmental Dataset: Particulate Matter (PM2.5 ug/m3) across 3 urban zones
set.seed(123)
air_quality <- tibble(
zone = rep(c("Residential", "Commercial", "Industrial"), each = 20),
pm25 = c(rnorm(20, mean = 18, sd = 4),
rnorm(20, mean = 35, sd = 7),
c(rnorm(18, mean = 65, sd = 12), 145, 160)) # Industrial has 2 extreme spike outliers
)
# Compute Complete Descriptive Statistics by Zone
summary_table <- air_quality %>%
group_by(zone) %>%
summarise(
N = n(),
Mean = mean(pm25),
SD = sd(pm25),
SEM = sd(pm25) / sqrt(n()),
Median = median(pm25),
IQR = IQR(pm25),
Min = min(pm25),
Max = max(pm25),
CV_pct = (sd(pm25) / mean(pm25)) * 100
)
print(as.data.frame(summary_table))
# Notice in Industrial how Mean (73.2) is pulled higher than Median (66.5) by the extreme spikes!
⚠️
Common Pitfalls & Troubleshooting Checklist
- Java Heap Exhaustion (GATK / Picard): If processes terminate with
java.lang.OutOfMemoryError, set your environment variable explicitly:export _JAVA_OPTIONS="-Xmx16g -Djava.io.tmpdir=/tmp". - Index Timestamp Mismatch: If tools complain that a BAM index is missing or out of date, regenerate with
samtools index -@ 4 sample.bam. - Conda Channel Conflicts: Avoid ABI incompatibilities between bioconda and conda-forge by setting strict priority:
conda config --set channel_priority strict. - Chromosome Naming Contamination: Always verify whether reference FASTA headers use
chr1or1; divergent naming causes silent alignment drops.
Was this guide helpful to your research?
Help us maintain 100% accurate, peer-reviewed bioinformatics standards.