Statistiques

La Bibliothèque Statistique permet de travailler facilement avec les distributions statistiques de base.

La bibliothèque fournit 5 fonctions pour chaque distribution :

  1. Calcul de la densité de probabilité — fonctions de la forme MathProbabilityDensityX()
  2. Calcul des probabilités — fonctions de la forme MathCumulativeDistributionX()
  3. Calcul des quantiles de la distribution — fonctions de la forme MathQuantileX()
  4. Génération de nombres aléatoires avec la distribution spécifiée — fonctions de la forme MathRandomX()
  5. Calcul des moments théoriques des distributions — fonctions de la forme MathMomentsX()

En complément du calcul des valeurs de chaque variable aléatoire, la bibliothèque implémente également des surcharges des fonctions rpour effedtuer les mêmes calculs pour des tableaux.

 

Exemple :

//+------------------------------------------------------------------+
//|                                    NormalDistributionExample.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- include the functions for calculating the normal distribution
#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| Fonction de lancement du script                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- définit les paramètres de la distribution normale
   double mu=5.0;
   double sigma=1.0;
   PrintFormat("Distribution normale avec les paramètres mu=%G and sigma=%G, exemples de calcul :",mu,sigma);
//--- définit l'intervalle
   double x1=mu-sigma;
   double x2=mu+sigma;
//--- variables pour le calcul de la probabilité
   double cdf1,cdf2,probability;
//--- variables pour les codes d'erreurs
   int error_code1,error_code2;
//--- calcule les valeurs des fonctions de distribution
   cdf1=MathCumulativeDistributionNormal(x1,mu,sigma,error_code1);
   cdf2=MathCumulativeDistributionNormal(x2,mu,sigma,error_code2);
//--- vérifie les codes d'erreur
   if(error_code1==ERR_OK && error_code2==ERR_OK)
     {
      //--- calcule la probabilité d'une variable aléatoire dans l'intervalle
      probability=cdf2-cdf1;
      //--- sort le résultat
      PrintFormat("1. Calcule la probabilité d'une variable aléatoire dans l'intervalle %.5f<x<%.5f",x1,x2);
      PrintFormat("  Réponse : Probabilité = %5.8f",probability);
     }
 
//--- Cherche l'intervalle de valeurs de la variable aléatoire x, correspondant aux 95% du niveau de confiance
   probability=0.95; //  définit la probabilité de confiance
//--- définit les probabilités aux limites de l'intervalle
   double p1=(1.0-probability)*0.5;
   double p2=probability+(1.0-probability)*0.5;
//--- calcule les limites de l'intervalle
   x1=MathQuantileNormal(p1,mu,sigma,error_code1);
   x2=MathQuantileNormal(p2,mu,sigma,error_code2);
//--- vérifie les codes d'erreur
   if(error_code1==ERR_OK && error_code2==ERR_OK)
     {
      //--- affiche le résultat
      PrintFormat("2. Pour l'intervalle de confiance = %.2f, cherche l'intervalle de la variable aléatoire",probability);
      PrintFormat("  Réponse: l'intervalle est %5.8f <= x <=%5.8f",x1,x2);
     }
 
   PrintFormat("3. Calcule les 4 premiers moments théoriques de la distribution");
//--- Génère un tableau de nombres aléatoires, calcule les 4 premiers moments et les compare avec les valeurs théoriques
   int data_count=1000000;  // définit le nombre de valeurs et prépare un tableau
   double data[];
   ArrayResize(data,data_count);
//--- génère des valeurs aléatoires et les stocke dans le tableau
   for(int i=0; i<data_count; i++)
     {
      data[i]=MathRandomNormal(mu,sigma,error_code1);
     }
//--- définit l'indice de la valeur initiale et la quantité de données pour le calcul
   int start=0;
   int count=data_count;
//--- calcule les 4 premiers moments des valeurs générées
   double mean=MathMean(data,start,count);
   double variance=MathVariance(data,start,count);
   double skewness=MathSkewness(data,start,count);
   double kurtosis=MathKurtosis(data,start,count);
//--- variables pour les moments théoriques
   double normal_mean=0;
   double normal_variance=0;
   double normal_skewness=0;
   double normal_kurtosis=0;
//--- affiche les valeurs des moments calculés
   PrintFormat("            Moyenne         Variance          Coef Dissymetrie     Kurtosis");
   PrintFormat("Calculés  %.10f   %.10f      %.10f      %.10f",mean,variance,skewness,kurtosis);
//--- calcule les valeurs théoriques des moments et les compare avec les valeurs obtenues
   if(MathMomentsNormal(mu,sigma,normal_mean,normal_variance,normal_skewness,normal_kurtosis,error_code1))
     {
      PrintFormat("Théoriques %.10f   %.10f      %.10f       %.10f",normal_mean,normal_variance,normal_skewness,normal_kurtosis);
      PrintFormat("Différence  %.10f   %.10f      %.10f       %.10f",mean-normal_mean,variance-normal_variance,skewness-normal_skewness,kurtosis-normal_kurtosis);
     }
  }