Accord.Statistics.Distributions.Multivariate.DirichletDistribution.ProbabilityDensityFunction C# (CSharp) Method

ProbabilityDensityFunction() public method

Gets the probability density function (pdf) for this distribution evaluated at point x.
The Probability Density Function (PDF) describes the probability that a given value x will occur.
public ProbabilityDensityFunction ( ) : double
return double
        public override double ProbabilityDensityFunction(params double[] x)
        {
            double product = 1;

            for (int i = 0; i < x.Length; i++)
                product *= Math.Pow(x[i], alphas[i] - 1);

            return constant * product;
        }

Usage Example

        public void ConstructorTest4()
        {
            // Create a Dirichlet with the following concentrations
            var dirich = new DirichletDistribution(0.42, 0.57, 1.2);

            // Common measures
            double[] mean = dirich.Mean;     // { 0.19, 0.26, 0.54 }
            double[] median = dirich.Median; // { 0.19, 0.26, 0.54 }
            double[] var = dirich.Variance;  // { 0.048, 0.060, 0.077 }
            double[,] cov = dirich.Covariance; // see below


            //       0.0115297440926238 0.0156475098399895 0.0329421259789253 
            // cov = 0.0156475098399895 0.0212359062114143 0.0447071709713986 
            //       0.0329421259789253 0.0447071709713986 0.0941203599397865

            // (the above matrix representation has been transcribed to text using)
            string str = cov.ToString(DefaultMatrixFormatProvider.InvariantCulture);
            

            // Probability mass functions
            double pdf1 = dirich.ProbabilityDensityFunction(new double[] { 2, 5 }); // 0.12121671541846207
            double pdf2 = dirich.ProbabilityDensityFunction(new double[] { 4, 2 }); // 0.12024840322466089
            double pdf3 = dirich.ProbabilityDensityFunction(new double[] { 3, 7 }); // 0.082907634905068528
            double lpdf = dirich.LogProbabilityDensityFunction(new double[] { 3, 7 }); // -2.4900281233124044


            Assert.AreEqual(0.19178082191780821, mean[0]);
            Assert.AreEqual(0.26027397260273971, mean[1]);
            Assert.AreEqual(0.547945205479452, median[2]);
            Assert.AreEqual(0.19178082191780821, median[0]);
            Assert.AreEqual(0.26027397260273971, median[1]);
            Assert.AreEqual(0.547945205479452, median[2]);
            Assert.AreEqual(0.048589635818914775, var[0]);
            Assert.AreEqual(0.060354680811388089, var[1]);
            Assert.AreEqual(0.077649296950323854, var[2]);
            Assert.AreEqual(0.011529744092623844, cov[0, 0]);
            Assert.AreEqual(0.015647509839989502, cov[0, 1]);
            Assert.AreEqual(0.015647509839989502, cov[1, 0]);
            Assert.AreEqual(0.021235906211414326, cov[1, 1]);
            Assert.AreEqual(0.12121671541846207, pdf1);
            Assert.AreEqual(0.12024840322466089, pdf2);
            Assert.AreEqual(0.082907634905068528, pdf3);
            Assert.AreEqual(-2.4900281233124044, lpdf);
        }