MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ create_analysis_result()

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = Eigen::VectorXd>
StatisticalAnalysis MayaFlux::Yantra::StatisticalAnalyzer< InputType, OutputType >::create_analysis_result ( const std::vector< std::vector< double > > &  stat_values,
std::vector< std::span< const double > >  original_data,
const auto &   
) const
inlineprivate

Create comprehensive analysis result.

Definition at line 558 of file StatisticalAnalyzer.hpp.

560 {
561 namespace D = MayaFlux::Kinesis::Discrete;
562
563 StatisticalAnalysis result;
564 result.method_used = m_method;
565 result.window_size = m_window_size;
566 result.hop_size = m_hop_size;
567
568 if (stat_values.empty()) {
569 return result;
570 }
571
572 result.channel_statistics.resize(stat_values.size());
573
574 for (size_t ch = 0; ch < stat_values.size(); ++ch) {
575 auto& channel_result = result.channel_statistics[ch];
576 const auto& ch_stats = stat_values[ch];
577
578 channel_result.statistical_values = ch_stats;
579
580 if (ch_stats.empty())
581 continue;
582
583 const auto [min_it, max_it] = std::ranges::minmax_element(ch_stats);
584 channel_result.min_stat = *min_it;
585 channel_result.max_stat = *max_it;
586
587 const std::span<const double> sp(ch_stats);
588 const auto sz = static_cast<uint32_t>(ch_stats.size());
589
590 const auto single = [&](auto fn) { return fn(sp, 1, 0, sz)[0]; };
591
592 channel_result.mean_stat = single([](auto&&... a) { return D::mean(a...); });
593 channel_result.stat_variance = single([&](auto&&... a) { return D::variance(a..., m_sample_variance); });
594 channel_result.stat_std_dev = std::sqrt(channel_result.stat_variance);
595 channel_result.skewness = single([](auto&&... a) { return D::skewness(a...); });
596 channel_result.kurtosis = single([](auto&&... a) { return D::kurtosis(a...); });
597 channel_result.median = single([](auto&&... a) { return D::median(a...); });
598
599 channel_result.percentiles = {
600 D::percentile(sp, 1, 0, sz, 25.0)[0],
601 channel_result.median,
602 D::percentile(sp, 1, 0, sz, 75.0)[0]
603 };
604
605 const size_t data_size = (ch < original_data.size()) ? original_data[ch].size() : 0;
606 channel_result.window_positions.reserve(ch_stats.size());
607 for (size_t i = 0; i < ch_stats.size(); ++i) {
608 const size_t start = i * m_hop_size;
609 const size_t end = std::min(start + m_window_size, data_size);
610 channel_result.window_positions.emplace_back(start, end);
611 }
612
614 channel_result.stat_classifications.reserve(ch_stats.size());
615 channel_result.level_counts.fill(0);
616
617 for (double value : ch_stats) {
618 const StatisticalLevel level = classify_statistical_level(value);
619 channel_result.stat_classifications.push_back(level);
620 channel_result.level_counts[static_cast<size_t>(level)]++;
621 }
622 }
623 }
624
625 return result;
626 }
size_t a
Range size
StatisticalLevel classify_statistical_level(double value) const
Classify statistical value qualitatively.
std::vector< double > mean(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Arithmetic mean per window.
Definition Analysis.cpp:200
std::vector< double > median(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Median per window via nth_element partial sort.
Definition Analysis.cpp:325
std::vector< double > variance(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, bool sample_variance)
Variance per window.
Definition Analysis.cpp:219
std::vector< double > skewness(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Skewness (standardised third central moment) per window.
Definition Analysis.cpp:259
std::vector< double > kurtosis(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Excess kurtosis (fourth central moment - 3) per window.
Definition Analysis.cpp:292
std::vector< double > percentile(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size, double percentile_value)
Arbitrary percentile per window via linear interpolation.
Definition Analysis.cpp:350
StatisticalLevel
Qualitative classification of statistical values.

References a, MayaFlux::Yantra::StatisticalAnalysis::channel_statistics, MayaFlux::Yantra::StatisticalAnalysis::hop_size, MayaFlux::Yantra::StatisticalAnalysis::method_used, size, and MayaFlux::Yantra::StatisticalAnalysis::window_size.