MQL5 ReferenceStandard LibraryMathematicsStatisticsNegative binomial distribution

# Negative binomial distribution

This section contains functions for working with negative binomial distribution. They allow to calculate density, probability, quantiles and to generate pseudo-random numbers distributed according to the negative binomial law. The negative binomial distribution is defined by the following formula:

where:

• x — value of the random variable
• r — number of successful tests
• p — probability of success

In addition to the calculation of the individual random variables, the library also implements the ability to work with arrays of random variables.

 Function Description MathProbabilityDensityNegativeBinomial Calculates the probability density function of the negative binomial distribution MathCumulativeDistributionNegativeBinomial Calculates the value of the negative binomial probability distribution function MathQuantileNegativeBinomial Calculates the value of the inverse negative binomial distribution function for the specified probability MathRandomNegativeBinomial Generates a pseudorandom variable/array of pseudorandom variables distributed according to the negative binomial law MathMomentsNegativeBinomial Calculates the theoretical numerical values of the first 4 moments of the negative binomial distribution

Example:

 #include  #include  #include  #property script_show_inputs //--- input parameters input double n_par=40;        // the number of tests input double p_par=0.75;      // probability of success for each test //+------------------------------------------------------------------+ //| Script program start function                                    | //+------------------------------------------------------------------+ void OnStart()   { //--- hide the price chart    ChartSetInteger(0,CHART_SHOW,false); //--- initialize the random number generator      MathSrand(GetTickCount()); //--- generate a sample of the random variable    long chart=0;    string name="GraphicNormal";    int n=1000000;       // the number of values in the sample    int ncells=19;       // the number of intervals in the histogram    double x[];          // centers of the histogram intervals    double y[];          // the number of values from the sample falling within the interval    double data[];       // sample of random values    double max,min;      // the maximum and minimum values in the sample //--- obtain a sample from the negative binomial distribution    MathRandomNegativeBinomial(n_par,p_par,n,data); //--- calculate the data to plot the histogram    CalculateHistogramArray(data,x,y,max,min,ncells); //--- obtain the theoretically calculated data at the interval of [min,max]    double x2[];    double y2[];    MathSequence(0,n_par,1,x2);    MathProbabilityDensityNegativeBinomial(x2,n_par,p_par,false,y2); //--- set the scale    double theor_max=y2[ArrayMaximum(y2)];    double sample_max=y[ArrayMaximum(y)];    double k=sample_max/theor_max;    for(int i=0; i=cells) ind=cells-1;       frequency[ind]++;      }    return (true);   }