File indexing completed on 2025-01-18 09:28:22
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_SKEWNESS_HPP_EAN_28_10_2005
0009 #define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_SKEWNESS_HPP_EAN_28_10_2005
0010
0011 #include <limits>
0012 #include <boost/mpl/placeholders.hpp>
0013 #include <boost/accumulators/framework/accumulator_base.hpp>
0014 #include <boost/accumulators/framework/extractor.hpp>
0015 #include <boost/accumulators/framework/parameters/sample.hpp>
0016 #include <boost/accumulators/numeric/functional.hpp>
0017 #include <boost/accumulators/framework/depends_on.hpp>
0018 #include <boost/accumulators/statistics_fwd.hpp>
0019 #include <boost/accumulators/statistics/weighted_moment.hpp>
0020 #include <boost/accumulators/statistics/weighted_mean.hpp>
0021
0022 namespace boost { namespace accumulators
0023 {
0024
0025 namespace impl
0026 {
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 template<typename Sample, typename Weight>
0049 struct weighted_skewness_impl
0050 : accumulator_base
0051 {
0052 typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
0053
0054 typedef typename numeric::functional::fdiv<weighted_sample, weighted_sample>::result_type result_type;
0055
0056 weighted_skewness_impl(dont_care) {}
0057
0058 template<typename Args>
0059 result_type result(Args const &args) const
0060 {
0061 return numeric::fdiv(
0062 accumulators::weighted_moment<3>(args)
0063 - 3. * accumulators::weighted_moment<2>(args) * weighted_mean(args)
0064 + 2. * weighted_mean(args) * weighted_mean(args) * weighted_mean(args)
0065 , ( accumulators::weighted_moment<2>(args) - weighted_mean(args) * weighted_mean(args) )
0066 * std::sqrt( accumulators::weighted_moment<2>(args) - weighted_mean(args) * weighted_mean(args) )
0067 );
0068 }
0069 };
0070
0071 }
0072
0073
0074
0075
0076 namespace tag
0077 {
0078 struct weighted_skewness
0079 : depends_on<weighted_mean, weighted_moment<2>, weighted_moment<3> >
0080 {
0081
0082
0083 typedef accumulators::impl::weighted_skewness_impl<mpl::_1, mpl::_2> impl;
0084 };
0085 }
0086
0087
0088
0089
0090 namespace extract
0091 {
0092 extractor<tag::weighted_skewness> const weighted_skewness = {};
0093
0094 BOOST_ACCUMULATORS_IGNORE_GLOBAL(weighted_skewness)
0095 }
0096
0097 using extract::weighted_skewness;
0098
0099 }}
0100
0101 #endif