Accord.Statistics.Distributions.Univariate.LogLogisticDistribution.ComplementaryDistributionFunction C# (CSharp) Method

ComplementaryDistributionFunction() public method

Gets the complementary cumulative distribution function (ccdf) for this distribution evaluated at point x. This function is also known as the Survival function.
The Complementary Cumulative Distribution Function (CCDF) is the complement of the Cumulative Distribution Function, or 1 minus the CDF.
public ComplementaryDistributionFunction ( double x ) : double
x double A single point in the distribution range.
return double
        public override double ComplementaryDistributionFunction(double x)
        {
            if (x < 0)
                return 1;

            double xa = x / alpha;
            double den = 1 + Math.Pow(xa, beta);

            double icdf = 1 / den;

            Accord.Diagnostics.Debug.Assert(icdf.IsEqual(base.ComplementaryDistributionFunction(x), 1e-10));

            return icdf;
        }

Usage Example

        public void ConstructorTest1()
        {
            var log = new LogLogisticDistribution(alpha: 0.42, beta: 2.2);

            double mean = log.Mean;     // 0.60592605102976937
            double median = log.Median; // 0.42
            double mode = log.Mode;     // 0.26892249963239817
            double var = log.Variance;  // 1.4357858982592435

            double cdf = log.DistributionFunction(x: 1.4); // 0.93393329906725353
            double pdf = log.ProbabilityDensityFunction(x: 1.4); // 0.096960115938100763
            double lpdf = log.LogProbabilityDensityFunction(x: 1.4); // -2.3334555609306102

            double ccdf = log.ComplementaryDistributionFunction(x: 1.4); // 0.066066700932746525
            double icdf = log.InverseDistributionFunction(p: cdf); // 1.4000000000000006

            double hf = log.HazardFunction(x: 1.4); // 1.4676094699628273
            double chf = log.CumulativeHazardFunction(x: 1.4); // 2.7170904270953637

            string str = log.ToString(CultureInfo.InvariantCulture); // LogLogistic(x; α = 0.42, β = 2.2)

            // Tested against R's package VGAM:
            // http://www.inside-r.org/packages/cran/VGAM/docs/Fisk

            // dfisk(x=1.4, shape = 2.2, scale = 0.42)
            // [1] 0.096960115938100735478

            // pfisk(1.4, shape = 2.2, scale = 0.42)
            // [1] 0.93393329906725353062

            Assert.AreEqual(0.60592605102976937, mean);
            Assert.AreEqual(0.41999999999999998, median);
            Assert.AreEqual(0.26892249963239817, mode);
            Assert.AreEqual(1.4210644953907947, var, 1e-14);
            Assert.AreEqual(2.7170904270953637, chf);
            Assert.AreEqual(0.93393329906725353062, cdf);
            Assert.AreEqual(0.096960115938100735478, pdf, 1e-15);
            Assert.AreEqual(-2.3334555609306102, lpdf);
            Assert.AreEqual(1.4676094699628273, hf);
            Assert.AreEqual(0.066066700932746525, ccdf);
            Assert.AreEqual(1.4000000000000006, icdf);
            Assert.AreEqual("LogLogistic(x; α = 0.42, β = 2.2)", str);

            var range1 = log.GetRange(0.95);
            var range2 = log.GetRange(0.99);
            var range3 = log.GetRange(0.01);

            Assert.AreEqual(0.11015333581796467, range1.Min);
            Assert.AreEqual(1.6014040672496028, range1.Max);
            Assert.AreEqual(0.052016650554947114, range2.Min);
            Assert.AreEqual(3.3912218129781762, range2.Max);
            Assert.AreEqual(0.0520166505549471, range3.Min);
            Assert.AreEqual(3.3912218129781762, range3.Max);
        }