Extras/Future Directions

| Home | Libraries | People | FAQ | More

### Extras/Future Directions

##### Adding Additional Location and Scale Parameters

In some modelling applications we require a distribution with a specific location and scale: often this equates to a specific mean and standard deviation, although for many distributions the relationship between these properties and the location and scale parameters are non-trivial. See http://www.itl.nist.gov/div898/handbook/eda/section3/eda364.htm for more information.

The obvious way to handle this is via an adapter template:

    template <class Dist>
    class scaled_distribution
    {
       scaled_distribution(
         const Dist dist,
         typename Dist::value_type location,
         typename Dist::value_type scale = 0);
    };

Which would then have its own set of overloads for the non-member accessor functions.

##### An "any_distribution" class

It would be fairly trivial to add a distribution object that virtualises the actual type of the distribution, and can therefore hold "any" object that conforms to the conceptual requirements of a distribution:

    template <class RealType>
    class any_distribution
    {
    public:
       template <class Distribution>
       any_distribution(const Distribution& d);
    };

    // Get the cdf of the underlying distribution:
    template <class RealType>
    RealType cdf(const any_distribution<RealType>& d, RealType x);
    // etc....

Such a class would facilitate the writing of non-template code that can function with any distribution type. It's not clear yet whether there is a compelling use case though. Possibly tests for goodness of fit might provide such a use case: this needs more investigation.

##### Higher Level Hypothesis Tests

Higher-level tests roughly corresponding to the Mathematica Hypothesis Tests package could be added reasonably easily, for example:

    template <class InputIterator>
    typename std::iterator_traits<InputIterator>::value_type
       test_equal_mean(
         InputIterator a,
         InputIterator b,
         typename std::iterator_traits<InputIterator>::value_type expected_mean);

Returns the probability that the data in the sequence [a,b) has the mean expected_mean.

##### Integration With Statistical Accumulators

Eric Niebler's accumulator framework - also work in progress - provides the means to calculate various statistical properties from experimental data. There is an opportunity to integrate the statistical tests with this framework at some later date:

    // Define an accumulator, all required statistics to calculate the test
    // are calculated automatically:
    accumulator_set<double, features<tag::test_expected_mean> > acc(expected_mean=4);
    // Pass our data to the accumulator:
    acc = std::for_each(mydata.begin(), mydata.end(), acc);
    // Extract the result:
    double p = probability(acc);