// Demo for Bio.Statistics module
///|
fn main {
println("=== Bio.Statistics Module Demo ===\n")
// Descriptive statistics
let data = [2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0]
println("Data: \{Repr(data)}")
println("Mean: \{@bio.stat_mean(data)}")
println("Variance: \{@bio.stat_variance(data)}")
println("Std Dev: \{@bio.stat_std(data)}")
println("Median: \{@bio.stat_median(data)}")
println("Min: \{@bio.stat_min(data)}")
println("Max: \{@bio.stat_max(data)}")
println("Sum: \{@bio.stat_sum(data)}")
// Correlation analysis
let x = [1.0, 2.0, 3.0, 4.0, 5.0]
let y_pos = [2.0, 4.0, 6.0, 8.0, 10.0]
let y_neg = [10.0, 8.0, 6.0, 4.0, 2.0]
println("\n=== Correlation Analysis ===")
println("Positive correlation (x vs 2x):")
println(" Pearson: \{@bio.stat_pearson_correlation(x, y_pos)}")
println(" Spearman: \{@bio.stat_spearman_correlation(x, y_pos)}")
println("Negative correlation (x vs 20-2x):")
println(" Pearson: \{@bio.stat_pearson_correlation(x, y_neg)}")
println(" Spearman: \{@bio.stat_spearman_correlation(x, y_neg)}")
// Hypothesis testing
let sample = [2.0, 3.0, 4.0, 5.0, 6.0]
println("\n=== Hypothesis Testing ===")
println("Sample: \{Repr(sample)}")
println("One-sample t-test (mu0=3.0):")
let t_stat = @bio.stat_t_statistic(sample, 3.0)
println(" t-statistic: \{t_stat}")
// Confidence interval
println("95% Confidence Interval:")
let ci = @bio.stat_confidence_interval(sample)
println(" [\{ci[0]}, \{ci[1]}]")
// Z-scores
println("\n=== Z-Scores ===")
let zscores = @bio.stat_zscores([1.0, 2.0, 3.0, 4.0, 5.0])
println("Z-scores of [1,2,3,4,5] (mean=3, std=~1.58):")
let mut i = 0
while i < zscores.length() {
println(" z[\{i}] = \{zscores[i]}")
i = i + 1
}
// Non-parametric tests
println("\n=== Non-parametric Tests ===")
let x1 = [1.0, 2.0, 3.0, 4.0, 5.0]
let y1 = [2.0, 4.0, 6.0, 8.0, 10.0]
println("Mann-Whitney U test (x vs y):")
let mw_result = @bio.stat_mann_whitney(x1, y1)
println(" Statistic: \{mw_result.0}, p-value: \{mw_result.1}")
println("Wilcoxon signed-rank test (x vs y):")
let wx_result = @bio.stat_wilcoxon_signed_rank(x1, y1)
println(" Statistic: \{wx_result.0}, p-value: \{wx_result.1}")
// KS test
println("\n=== Kolmogorov-Smirnov Test ===")
let sample1 = [1.0, 2.0, 3.0, 4.0, 5.0]
let sample2 = [2.0, 4.0, 6.0, 8.0, 10.0]
println("KS test comparing two samples:")
let ks_result = @bio.stat_ks_test(sample1, sample2)
println(" Statistic: \{ks_result.0}, p-value: \{ks_result.1}")
// Fisher exact test
println("\n=== Fisher Exact Test ===")
let table = [[10, 2], [3, 5]]
println("Contingency table: \{Repr(table)}")
let fisher_result = @bio.stat_fisher_exact(table)
println(" Odds ratio: \{fisher_result.0}, p-value: \{fisher_result.1}")
// Multiple test correction
println("\n=== Multiple Test Correction ===")
let p_values = [0.01, 0.04, 0.03, 0.005, 0.2]
println("Original p-values: \{Repr(p_values)}")
let bonf = @bio.stat_bonferroni(p_values)
println("Bonferroni corrected: \{Repr(bonf)}")
let holm = @bio.stat_holm(p_values)
println("Holm corrected: \{Repr(holm)}")
let by = @bio.stat_by(p_values)
println("Benjamini-Yekutieli corrected: \{Repr(by)}")
// Distribution functions
println("\n=== Distribution Functions ===")
println("Chi-square CDF(3.84, df=1): \{@bio.stat_chi2_cdf(3.84, 1)}")
println(
"Chi-square quantile(0.95, df=2): \{@bio.stat_chi2_quantile(0.95, 2)}",
)
println("t-CDF(0, df=10): \{@bio.stat_t_cdf(0.0, 10.0)}")
println("t-quantile(0.975, df=10): \{@bio.stat_t_quantile(0.975, 10.0)}")
println("Normal quantile(0.975): \{@bio.stat_normal_quantile(0.975)}")
// Hypothesis testing (updated)
println("\n=== Hypothesis Testing (Updated) ===")
println("One-sample t-test (mu0=3.0):")
let t1_result = @bio.stat_t_test_one_sample(sample, 3.0)
println(" t-statistic: \{t1_result.0}, p-value: \{t1_result.1}")
println("Two-sample t-test (x vs y):")
let t2_result = @bio.stat_t_test_two_sample([2.1, 2.3, 2.2, 2.4, 2.0], [
3.1, 3.3, 3.2, 3.4, 3.0,
])
println(" t-statistic: \{t2_result.0}, p-value: \{t2_result.1}")
// BH correction
println("\n=== Benjamini-Hochberg Correction ===")
let bh = @bio.stat_bh(p_values)
println("BH corrected p-values: \{Repr(bh)}")
// ANOVA
println("\n=== One-way ANOVA ===")
let anova_samples = [[1.0, 2.0, 3.0], [2.0, 3.0, 4.0], [8.0, 9.0, 10.0]]
let anova_result = @bio.stat_anova(anova_samples)
println(" F-statistic: \{anova_result.0}, p-value: \{anova_result.1}")
// MAD
println("\n=== Robust Statistics ===")
let mad_data = [1.0, 2.0, 3.0, 4.0, 5.0]
println("MAD of [1,2,3,4,5]: \{@bio.stat_mad(mad_data)}")
// Log-rank test
println("\n=== Survival Analysis ===")
let lr_time = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
let lr_event = [true, true, true, false, true, false]
let lr_group = [0, 0, 0, 1, 1, 1]
let lr_result = @bio.stat_logrank_test(lr_time, lr_event, lr_group)
println("Log-rank test: chi2=\{lr_result.0}, p-value=\{lr_result.1}")
println("\nDemo completed successfully!")
}