İstatistik

İstatistik kütüphanesi temel istatistiksel dağılımlarla çalışmak için tasarlanmış yöntemler içerir.

Kütüphanede her dağılım için beş adet fonksiyon bulunur:

  1. Olasılık yoğunluğunun hesaplanması – MathProbabilityDensityX() biçimindeki fonksiyonlar
  2. Olasılık hesabı – MathCumulativeDistributionX() biçimindeki fonksiyonlar
  3. Kuantillerin hesaplanması – MathQuantileX() biçimindeki fonksiyonlar
  4. Belirtilen dağılıma uygun rassal değişkenlerin oluşturulması – MathRandomX() biçimindeki fonksiyonlar
  5. Dağılımların teorik momentlerinin hesaplanması – MathMomentsX() biçimindeki fonksiyonlar

Kütüphane, rassal sayıları ayrı ayrı hesaplamanın yanında, rassal sayı dizileriyle çalışmaya da olanak sağlar.

 

Örnek:

//+------------------------------------------------------------------+
//|                                    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"
//--- normal dağılımı hesaplayan fonksiyonları dahil et
#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- normal dağılım için parametreleri ayarla
   double mu=5.0;
   double sigma=1.0;
   PrintFormat("mu=%G ve sigma=%G parametrelerine sahip normal dağılım, hesaplama örnekleri:",mu,sigma);
//--- aralığı ayarla
   double x1=mu-sigma;
   double x2=mu+sigma;
//--- olasılık hesabı için kullanılacak değişkenler
   double cdf1,cdf2,probability;
//--- hata kodu değişkenleri
   int error_code1,error_code2;
//--- dağılım fonksiyonlarının değerlerini hesapla
   cdf1=MathCumulativeDistributionNormal(x1,mu,sigma,error_code1);
   cdf2=MathCumulativeDistributionNormal(x2,mu,sigma,error_code2);
//--- hata kodlarını kontrol et
   if(error_code1==ERR_OK && error_code2==ERR_OK)
     {
      //--- belli aralıktaki rassal değişkenin olasılığını hesapla
      probability=cdf2-cdf1;
      //--- sonucu çıktıla
      PrintFormat("1. %.5f<x<%.5f aralığında, rassal değişkenin olasılığını hesapla",x1,x2);
      PrintFormat("  Cevap: Olasılık = %5.8f",probability);
     }
 
//--- 95% güven aralığı için, rassal x değişkeninin yer aldığı aralığı hesapla
   probability=0.95; //  güven olasılığını hesapla
//--- aralık sınırlarındaki olasılıkları ayarla
   double p1=(1.0-probability)*0.5;
   double p2=probability+(1.0-probability)*0.5;
//--- aralık sınırlarını hesapla
   x1=MathQuantileNormal(p1,mu,sigma,error_code1);
   x2=MathQuantileNormal(p2,mu,sigma,error_code2);
//--- hata kodlarını kontrol et
   if(error_code1==ERR_OK && error_code2==ERR_OK)
     {
      //--- sonucu çıktıla 
      PrintFormat("2. Güven düzeyi = %.2f için, rassal değişkenin aralığını hesapla",probability);
      PrintFormat("  Cevap: aralık  %5.8f <= x <=%5.8f",x1,x2);
     }
 
   PrintFormat("3. Dağılımın ilk dört momentinin teorik sayısal değerlerini hesapla");
//--- Bir rassal değişken dizisi oluştur, ilk dört momenti hesapla ve teorik değerlerle karşılaştır
   int data_count=1000000;  // değerlerin sayısını ayarla ve diziyi hazırla
   double data[];
   ArrayResize(data,data_count);
//--- rassal değerler oluştur ve diziye doldur
   for(int i=0; i<data_count; i++)
     {
      data[i]=MathRandomNormal(mu,sigma,error_code1);
     }
//--- hesaplama için başlangıç indisini ve veri miktarını ayarla
   int start=0;
   int count=data_count;
//--- oluşturulan değerlerin ilk dört momentini hesapla
   double mean=MathMean(data,start,count);
   double variance=MathVariance(data,start,count);
   double skewness=MathSkewness(data,start,count);
   double kurtosis=MathKurtosis(data,start,count);
//--- teorik momentler için kullanılacak değişkenler
   double normal_mean=0;
   double normal_variance=0;
   double normal_skewness=0;
   double normal_kurtosis=0;
//--- hesaplanan momentlerin değerlerini göster
   PrintFormat("            Ortalama           Varyans          Çarpıklık           Basıklık");
   PrintFormat("Hesaplanan  %.10f   %.10f      %.10f      %.10f",mean,variance,skewness,kurtosis);
//--- ilk dört momentin teorik değerlerini hesapla ve elde edilen değerlerle karşılaştır
   if(MathMomentsNormal(mu,sigma,normal_mean,normal_variance,normal_skewness,normal_kurtosis,error_code1))
     {
      PrintFormat("Teorik %.10f   %.10f      %.10f       %.10f",normal_mean,normal_variance,normal_skewness,normal_kurtosis);
      PrintFormat("Fark  %.10f   %.10f      %.10f       %.10f",mean-normal_mean,variance-normal_variance,skewness-normal_skewness,kurtosis-normal_kurtosis);
     }
  }