Statistics¶
The statistics feature provides statistical analysis and visualization of user health data. It processes information from multiple sources (mood entries, medications, bloodwork, etc.) and uses the HealthAnalyticsService
to generate insights, identify patterns, detect correlations, and predict trends.
Architecture¶
lib/src/features/stats/
├── charts/ # Chart widgets for data visualization
├── models/ # Data models for statistical analysis
├── providers/ # Riverpod providers for state management
├── screens/ # UI screens for displaying analytics
├── tabs/ # Tab components for the main stats screen
├── utils/ # Utility functions for analysis and formatting
└── widgets/ # Reusable UI components
Components¶
Models¶
The analytics feature uses a large set of models to represent different types of statistical insights:
ComprehensiveAnalysis
: Container for all types of analytics dataStatisticalInsight
: Basic statistical findingsFactorRelationship
: Relationships between different health factorsHealthPattern
: Detected patterns in health dataHealthPrediction
: Forecasts of future health metricsHealthAnomaly
: Unusual data pointsFactorImpactRanking
: Impacts of factors on a target variableWeekdayAnalysis
: Metrics across days of the weekHealthStreak
: Consistent periods for health metricsHormoneAnalysis
: Hormone level analysisMedicationImpact
: Effects of medications on health metrics
Providers¶
// Basic statistical insights
final statisticsInsightsProvider = FutureProvider.autoDispose
.family<List<StatisticalInsight>, String>((ref, timeframe) async { ... });
// Comprehensive analysis (More detailed/resource extensive)
final comprehensiveAnalysisProvider = FutureProvider.autoDispose
.family<ComprehensiveAnalysis, String>((ref, timeframe) async { ... });
// Factor-specific analysis
final factorAnalysisProvider = FutureProvider.autoDispose
.family<Map<String, dynamic>, FactorAnalysisParams>((ref, params) async { ... });
Services¶
The analytics functionality relies on the HealthAnalyticsService
Charts¶
CorrelationsChart
: Displays relationships between factorsImpactChart
: Shows impact ranking of factorsWeekdayChart
: Visualizes metrics by day of week- And other specialized charts
UI Organization¶
The main Stats screen is organized into tabs:
- Overview
: Summary of health insights and key metrics
- Correlations
: Relationships between different health factors
- Patterns
: Detected trends and cyclical patterns
- Factors
: Analysis of what factors affect health metrics
- Predictions
: Forecasts of future health values
Factor Analysis¶
The feature supports detailed analysis of specific factors with the FactorAnalysisScreen
, which provides:
- Basic statistics (mean, median, min, max)
- Related factors and correlations
- Detected patterns
- Historical timeline
- Health impacts
Data Sources¶
The Health Analytics feature consumes data from multiple sources: - Mood Tracker: Emotional state, energy levels, sleep quality, etc. - Medication Tracker: Medication adherence and effects - Bloodwork Tracker: Lab results and hormone levels
Usage Examples¶
To access the comprehensive analysis:
// Watch for analysis data with a specific timeframe
final analysisAsync = ref.watch(comprehensiveAnalysisProvider('Last Month'));
// Use the data when available
analysisAsync.when(
data: (analysis) {
// Access insights, relationships, patterns, etc.
final relationships = analysis.relationships;
final patterns = analysis.patterns;
final predictions = analysis.predictions;
// Build UI with the data
return ListView(
children: [
// Display insights
],
);
},
loading: () => const LoadingView(),
error: (error, stack) => ErrorView(error: error),
);
To analyze a specific factor:
// Watch for factor-specific analysis
final factorAsync = ref.watch(
factorAnalysisProvider(
FactorAnalysisParams(
factorName: 'Mood',
timeframe: 'All Time',
),
),
);
// Use the data when available
factorAsync.when(
data: (factorAnalysis) {
// Access factor-specific data
final relationships = factorAnalysis['relationships'];
final patterns = factorAnalysis['patterns'];
// Build UI with the data
},
loading: () => const LoadingView(),
error: (error, stack) => ErrorView(error: error),
);
Implementation Details¶
Correlation Analysis¶
The service calculates Pearson correlation coefficients between different health factors to identify relationships. For example, it can detect correlations between:
- Sleep quality and mood
- Energy levels and exercise
- Hormone levels and emotions
Pattern Detection¶
Patterns are identified through statistical analysis of time series data, including:
- Trends: Directional changes over time
- Cyclical Patterns: Repeating patterns (e.g., weekly sleep cycles)
- Clusters: Groupings of related factors
- Thresholds: Significant crossover points
Anomaly Detection¶
The service identifies unusual data points using z-score analysis, which detects values that deviate significantly from normal patterns.
Prediction Algorithm¶
Predictions are generated using a combination of:
- Linear trend extrapolation
- Moving averages
- Pattern-based forecasting