All examples · Example 8 of 34
2D Histogram: Flow Cytometry FSC vs SSC
Forward (FSC-A) vs side scatter (SSC-A) density for 20,000 events, showing two cell populations and low-scatter debris.

Key findings
- FSC and SSC are strongly associated: Spearman ρ = 0.846, Pearson r = 0.833, Kendall τ = 0.653 (n = 20,000).
- The mixture model finds 3 components in FSC and 3 in SSC — the populations a gate would separate.
- SSC is strongly skewed (skewness 0.669; mean 294.5 vs median 202.2).
Descriptive statistics
Location, spread and shape for every group — the first thing to read before choosing a test. Skewness near 0 and excess kurtosis near 0 are what a normal distribution looks like.
| Group | n | Mean | SD | SEM | Median | Q1 – Q3 | Min – Max | Skewness | Excess kurtosis |
|---|---|---|---|---|---|---|---|---|---|
| FSC-A | 20,000 | 471.4 | 155.8 | 1.101 | 451.1 | 390.8 – 606.3 | 20.2 – 899.2 | -0.42 | 0.153 |
| SSC-A | 20,000 | 294.5 | 174.4 | 1.233 | 202.2 | 168 – 481 | 10.2 – 795.8 | 0.669 | -1.1 |
LabTools call
stats.describelabtools stats describe --groups @groups.json
The same method is available as an MCP tool (stats_describe) and from the desktop app's statistics panel.
Normality
At n = 20,000 even trivial departures from normality are 'significant', so read these alongside skewness and kurtosis. Note that LabTools refuses Shapiro–Wilk above n = 5,000 and says so — it is not calibrated there.
| Group | n | Shapiro–Wilk W | p | Anderson–Darling A² | p | K–S D | p | Verdict |
|---|---|---|---|---|---|---|---|---|
| FSC-A | 20,000 | n/a | — | 236.3 | 3.7 × 10⁻²⁴ | 0.07676 | 5.7 × 10⁻³¹⁹ | Normality rejected |
| SSC-A | 20,000 | n/a | — | 1,572 | 3.7 × 10⁻²⁴ | 0.2592 | < 10⁻³⁰⁰ | Normality rejected |
LabTools calls (3)
stats.normalitylabtools stats normality --groups @groups.json --method shapiro-wilk
LabTools declined: stats.normality: Invalid argument: Shapiro-Wilk not recommended for n > 5000 (use Anderson-Darling instead)
stats.normalitylabtools stats normality --groups @groups.json --method anderson-darling
stats.normalitylabtools stats normality --groups @groups.json --method kolmogorov-smirnov
The same method is available as an MCP tool (stats_normality) and from the desktop app's statistics panel.
LabTools notes
- LabTools declined one test — stats.normality (shapiro-wilk): stats.normality: Invalid argument: Shapiro-Wilk not recommended for n > 5000 (use Anderson-Darling instead)
- Group 'FSC-A' rejects normality (p = 0.0000); prefer a rank-based test.
- Group 'FSC-A' has n = 20000; at this size a normality test flags departures far too small to affect a t-test. Judge by the skewness/kurtosis and a QQ plot instead.
- Group 'SSC-A' rejects normality (p = 0.0000); prefer a rank-based test.
- Group 'SSC-A' has n = 20000; at this size a normality test flags departures far too small to affect a t-test. Judge by the skewness/kurtosis and a QQ plot instead.
Scatter populations per channel (Gaussian mixture)
Fits 1, 2 … k Gaussian components by EM (10 restarts, fixed seed, so the numbers are reproducible) and compares them by BIC, which is consistent for the number of components. best k = 1 is positive evidence for a single population.
FSC-A (n = 20,000) — best k by BIC = 3, by AIC = 3
| k | log-likelihood | AIC | BIC | Converged | Components (weight, mean, SD) |
|---|---|---|---|---|---|
| 1 | -129,344 | 258,691 | 258,707 | yes | 100.0% at μ = 471.4 (σ = 155.7) |
| 2 | -128,967 | 257,945 | 257,984 | no | 11.0% at μ = 228.7 (σ = 144.2); 89.0% at μ = 501.4 (σ = 128.5) |
| 3 ★ | -125,953 | 251,922 | 251,985 | yes | 10.8% at μ = 174.5 (σ = 91.47); 54.0% at μ = 421.7 (σ = 49.08); 35.2% at μ = 639.2 (σ = 59.95) |
LabTools call
stats.gmmlabtools stats gmm --groups @groups.json --k-max 3
The same method is available as an MCP tool (stats_gmm) and from the desktop app's statistics panel.
SSC-A (n = 20,000) — best k by BIC = 3, by AIC = 3
| k | log-likelihood | AIC | BIC | Converged | Components (weight, mean, SD) |
|---|---|---|---|---|---|
| 1 | -131,601 | 263,206 | 263,222 | yes | 100.0% at μ = 294.5 (σ = 174.4) |
| 2 | -119,876 | 239,762 | 239,802 | yes | 65.1% at μ = 172.9 (σ = 42.97); 34.9% at μ = 520.8 (σ = 69.61) |
| 3 ★ | -118,503 | 237,022 | 237,085 | no | 3.8% at μ = 57.08 (σ = 29.47); 61.2% at μ = 179.9 (σ = 31.83); 35.0% at μ = 520.4 (σ = 70.11) |
LabTools call
stats.gmmlabtools stats gmm --groups @groups.json --k-max 3
The same method is available as an MCP tool (stats_gmm) and from the desktop app's statistics panel.
LabTools notes
- 'FSC-A': BIC prefers 3 components over 1 — the column looks like a mixture, not a single population.
- 'SSC-A': BIC prefers 3 components over 1 — the column looks like a mixture, not a single population.
- 'SSC-A': the selected k=3 fit did not converge; raise n_init or lower k_max before trusting its components.
FSC–SSC association
Forward scatter tracks cell size and side scatter tracks granularity. Three correlation coefficients on all 20,000 events: Pearson for linear association, Spearman and Kendall for any monotonic trend. Kendall's τ on 20,000 pairs runs in a fraction of a second.
| Coefficient | Estimate | r² | n | p |
|---|---|---|---|---|
| Pearson r (linear) | 0.8326 | 0.6932 | 20,000 | < 10⁻³⁰⁰ |
| Spearman ρ (monotonic, rank) | 0.846 | — | 20,000 | < 10⁻³⁰⁰ |
| Kendall τ (rank, tie-robust; normal-approximation p) | 0.6531 | — | 20,000 | < 10⁻³⁰⁰ |
LabTools calls (3)
stats.correlationlabtools stats correlation --a @FSC-A.json --b @SSC-A.json --method pearson
stats.correlationlabtools stats correlation --a @FSC-A.json --b @SSC-A.json --method spearman
stats.correlationlabtools stats correlation --a @FSC-A.json --b @SSC-A.json --method kendall
The same method is available as an MCP tool (stats_correlation) and from the desktop app's statistics panel.
LabTools notes
- Pearson's r measures LINEAR association only, and is sensitive to outliers. A scatter plot (plot.create kind='scatter') is worth a look before reporting it; use method='spearman' if the relationship is monotonic but curved.
Methods paragraph
Written to go straight into a manuscript.
Event density was binned on a 70 × 70 grid. FSC-A and SSC-A were strongly correlated (Spearman ρ = 0.85, n = 20,000).
Every number on this page was computed by the LabTools statistics engine (version 0.14.3) from the example's CSV on 2026-09-23. Where a value was derived before the data reached LabTools (replicate means, paired differences, log odds ratios), the text says so. The data are simulated from a fixed random seed.
Get started
Run the same analysis on your data
Every test on this page is built into LabTools — from the statistics panel, the command line, or an AI assistant through MCP.