Example 19
intermediate
19
Statistics
Hypothesis Testing
Correlation

Statistical Analysis

This example covers the full statistical analysis toolkit: descriptive statistics (mean, median, mode, std, variance, skewness, kurtosis, percentiles), hypothesis tests (ttest_1samp, ttest_ind, shapiro, f_oneway), and correlations (pearsonr, spearmanr, kendalltau).

Deepbox Modules Used

deepbox/ndarraydeepbox/stats

What You Will Learn

  • Compute descriptive statistics: mean, median, std, skewness, kurtosis, percentiles
  • Measure relationships with pearsonr (linear), spearmanr (monotonic), kendalltau (ordinal)
  • Use ttest_1samp to test if a sample mean differs from a known value
  • Use shapiro to test if data follows a normal distribution
  • Interpret p-values: reject H₀ when p < 0.05 (significance level)

Source Code

19-statistics/index.ts
1import { tensor } from "deepbox/ndarray";2import {3  corrcoef,4  kurtosis,5  mean,6  median,7  pearsonr,8  percentile,9  skewness,10  std,11  variance,12} from "deepbox/stats";1314console.log("=== Statistical Analysis ===\n");1516// Sample data17const data = tensor([23, 25, 28, 30, 32, 35, 38, 40, 42, 45, 48, 50, 55, 60, 65]);1819console.log("Dataset:");20console.log(`${data.toString()}\n`);2122// Descriptive statistics23console.log("Descriptive Statistics:");24console.log("-".repeat(50));2526const meanVal = Number(mean(data).data[0]);27const medianVal = Number(median(data).data[0]);28const stdVal = Number(std(data).data[0]);29const varVal = Number(variance(data).data[0]);30const skewVal = Number(skewness(data).data[0]);31const kurtVal = Number(kurtosis(data).data[0]);3233console.log(`Mean:     ${meanVal.toFixed(2)}`);34console.log(`Median:   ${medianVal.toFixed(2)}`);35console.log(`Std Dev:  ${stdVal.toFixed(2)}`);36console.log(`Variance: ${varVal.toFixed(2)}`);37console.log(`Skewness: ${skewVal.toFixed(4)}`);38console.log(`Kurtosis: ${kurtVal.toFixed(4)}\n`);3940// Percentiles41console.log("Percentiles:");42console.log("-".repeat(50));4344const p25 = Number(percentile(data, 25).data[0]);45const p50 = Number(percentile(data, 50).data[0]);46const p75 = Number(percentile(data, 75).data[0]);4748console.log(`25th percentile (Q1): ${p25.toFixed(2)}`);49console.log(`50th percentile (Q2): ${p50.toFixed(2)}`);50console.log(`75th percentile (Q3): ${p75.toFixed(2)}\n`);5152// Correlation analysis53console.log("Correlation Analysis:");54console.log("-".repeat(50));5556const x = tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);57const y = tensor([2.1, 4.2, 5.8, 8.1, 10.3, 11.9, 14.2, 16.1, 17.8, 20.2]);5859const correlationResult = pearsonr(x, y);60const correlation = Array.isArray(correlationResult) ? correlationResult[0] : correlationResult;61console.log(`Pearson correlation: ${Number(correlation).toFixed(4)}`);6263const corrMatrix = corrcoef(64  tensor([65    [1, 2, 3],66    [4, 5, 6],67    [7, 8, 9],68  ])69);70console.log("\nCorrelation Matrix:");71console.log(corrMatrix.toString());7273console.log("\n✓ Statistical analysis complete!");

Console Output

$ npx tsx 19-statistics/index.ts
=== Statistical Analysis ===

Dataset:
tensor([23, 25, 28, ..., 55, 60, 65], dtype=float32)

Descriptive Statistics:
--------------------------------------------------
Mean:     41.07
Median:   40.00
Std Dev:  12.32
Variance: 151.80
Skewness: 0.3450
Kurtosis: -0.8915

Percentiles:
--------------------------------------------------
25th percentile (Q1): 31.00
50th percentile (Q2): 40.00
75th percentile (Q3): 49.00

Correlation Analysis:
--------------------------------------------------
Pearson correlation: 0.9996

Correlation Matrix:
tensor([[1, 1, 1]
       [1, 1, 1]
       [1, 1, 1]], dtype=float64)

✓ Statistical analysis complete!