2011-04-06 20 views
10

A juzgar por el aumento de documentación, parece ofrecer funciones cuantiles (funciones inversas de cdf) para distribuciones normal y gamma, pero no está claro para mí cómo puedo usarlas. ¿Podría alguien pegar un ejemplo, por favor?Funciones de Quantile en boost (C++)

+0

[Esta página] (http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/normal_example/normal_misc.html) contiene un ejemplo para calcular cuantiles de la distribución normal. Parece bastante sencillo. ¿Esto funciona para tí? –

Respuesta

8

El cálculo de cuantiles se implementa como una función gratuita. He aquí un ejemplo:

#include <boost/math/distributions/normal.hpp> 

boost::math::normal dist(0.0, 1.0); 

// 95% of distribution is below q: 
double q = quantile(dist, 0.95); 

También puede obtener el complemento (cuantil de la derecha) usando:

// 95% of distribution is above qc: 
double qc = quantile(complement(dist, 0.05)); 

Hay algunos ejemplos desarrollados similares aquí:

http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg.html

Editar: no necesita espacios de nombres en las funciones gratuitas gracias a ADL

+0

¿Alguna idea de por qué existen las clases 'normal' y' normal_distribution'? Esto es lo que me confundió. – Grzenio

+0

Creo que 'normal' es solo un tipo de' normal_distribution ' – Inverse

3

Hay un ejemplo viable en QuantCorner.

// Édouard Tallent @ TaGoMa.Tech 
// September 2012 

#include<boost/math/distributions.hpp> 
#include<iostream> 
using std::cout; 
using std::endl; 

double inverseNormal(double prob, double mean, double sd){ 
     boost::math::normal_distribution<>myNormal (mean, sd); 
     return quantile(myNormal, prob); 
} 

int main (int, char*[]) 
{ 
     try 
     {     
       double myProb = 0.1; // the 10% quantile 
       double myMean = 0.07; // a 7% mean 
       double myVol = 0.14; // a 14% volatility 

     cout << inverseNormal(myProb, myMean, myVol) << endl; 
     } 

       catch(std::exception& e) 
     { 
       cout << "Error message: " << e.what() << endl; 
     } 
return 0; 
}