use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalAnalysisConfig {
pub confidence_level: f64,
pub alpha_level: f64,
pub min_effect_size: f64,
pub outlier_sensitivity: f64,
pub bootstrap_samples: u32,
pub multiple_comparison_correction: bool,
}
impl Default for StatisticalAnalysisConfig {
fn default() -> Self {
Self {
confidence_level: 0.95,
alpha_level: 0.05,
min_effect_size: 0.2,
outlier_sensitivity: 1.5,
bootstrap_samples: 1000,
multiple_comparison_correction: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalAnalysisResult {
pub descriptive_stats: HashMap<String, DescriptiveStatistics>,
pub pairwise_comparisons: Vec<super::statistical_tests::PairwiseComparison>,
pub anova_result: Option<super::statistical_tests::AnovaResult>,
pub outlier_analysis: super::outlier_normality::OutlierAnalysis,
pub normality_tests: HashMap<String, super::outlier_normality::NormalityTest>,
pub correlation_matrix: CorrelationMatrix,
pub effect_sizes: HashMap<String, super::effect_analysis::EffectSize>,
pub bootstrap_intervals: HashMap<String, super::effect_analysis::BootstrapInterval>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DescriptiveStatistics {
pub name: String,
pub n: usize,
pub mean: f64,
pub median: f64,
pub std_dev: f64,
pub variance: f64,
pub min: f64,
pub max: f64,
pub range: f64,
pub iqr: f64,
pub percentiles: HashMap<u8, f64>,
pub skewness: f64,
pub kurtosis: f64,
pub coefficient_of_variation: f64,
pub standard_error: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CorrelationMatrix {
pub variables: Vec<String>,
pub pearson: Vec<Vec<f64>>,
pub spearman: Vec<Vec<f64>>,
pub kendall: Vec<Vec<f64>>,
pub p_values: Vec<Vec<f64>>,
pub strong_correlations: Vec<CorrelationPair>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CorrelationPair {
pub var_a: String,
pub var_b: String,
pub correlation: f64,
pub correlation_type: CorrelationType,
pub p_value: f64,
pub strength: CorrelationStrength,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CorrelationType {
Pearson,
Spearman,
Kendall,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CorrelationStrength {
Negligible,
Weak,
Moderate,
Strong,
VeryStrong,
}