Пример #1
0
        public void ConstructorTest()
        {
            var t = new TDistribution(degreesOfFreedom: 4.2);

            double mean   = t.Mean;     // 0.0
            double median = t.Median;   // 0.0
            double var    = t.Variance; // 1.9090909090909089
            double mode   = t.Mode;

            double cdf  = t.DistributionFunction(x: 1.4);              // 0.88456136730659074
            double pdf  = t.ProbabilityDensityFunction(x: 1.4);        // 0.13894002185341031
            double lpdf = t.LogProbabilityDensityFunction(x: 1.4);     // -1.9737129364307417

            double ccdf = t.ComplementaryDistributionFunction(x: 1.4); // 0.11543863269340926
            double icdf = t.InverseDistributionFunction(p: cdf);       // 1.4000000000000012

            double hf  = t.HazardFunction(x: 1.4);                     // 1.2035833984833988
            double chf = t.CumulativeHazardFunction(x: 1.4);           // 2.1590162088918525

            string str = t.ToString(CultureInfo.InvariantCulture);     // T(x; df = 4.2)

            Assert.AreEqual(double.NegativeInfinity, t.Support.Min);
            Assert.AreEqual(double.PositiveInfinity, t.Support.Max);

            double icdf0 = t.InverseDistributionFunction(0);
            double icdf1 = t.InverseDistributionFunction(1);

            Assert.AreEqual(icdf0, t.Support.Min);
            Assert.AreEqual(icdf1, t.Support.Max);

            Assert.AreEqual(0.0, mean);
            Assert.AreEqual(0.0, median);
            Assert.AreEqual(0.0, mode);
            Assert.AreEqual(1.9090909090909089, var);
            Assert.AreEqual(2.1590162088918525, chf);
            Assert.AreEqual(0.88456136730659074, cdf);
            Assert.AreEqual(0.13894002185341031, pdf);
            Assert.AreEqual(-1.9737129364307417, lpdf);
            Assert.AreEqual(1.2035833984833988, hf);
            Assert.AreEqual(0.11543863269340926, ccdf);
            Assert.AreEqual(1.4000000000000012, icdf);
            Assert.AreEqual("T(x; df = 4.2)", str);

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

            Assert.AreEqual(-2.1030107450099362, range1.Min);
            Assert.AreEqual(2.1030107450099362, range1.Max);
            Assert.AreEqual(-3.6502571302187774, range2.Min);
            Assert.AreEqual(3.6502571302187774, range2.Max);
            Assert.AreEqual(-3.6502571302187792, range3.Min);
            Assert.AreEqual(3.6502571302187774, range3.Max);
        }
Пример #2
0
        public void InverseDistributionFunctionTest()
        {
            TDistribution target;

            double[] expected;

            target   = new TDistribution(1);
            expected = new double[] { 6.3138, 3.0777, 1.9626, 1.3764, 1, 0.7265, 0.5095, 0.3249, 0.1584, 0 };

            for (int i = 1; i <= 10; i++)
            {
                double percent = i / 10.0;
                double actual  = target.InverseDistributionFunction(1.0 - percent / 2);
                Assert.AreEqual(expected[i - 1], actual, 1e-4);
                Assert.IsFalse(Double.IsNaN(actual));
            }

            target   = new TDistribution(4.2);
            expected = new double[] { 2.103, 1.5192, 1.1814, 0.9358, 0.7373, 0.5664, 0.4127, 0.2699, 0.1334, 0 };

            for (int i = 1; i <= 10; i++)
            {
                double percent = i / 10.0;
                double actual  = target.InverseDistributionFunction(1.0 - percent / 2);
                Assert.AreEqual(expected[i - 1], actual, 1e-4);
                Assert.IsFalse(Double.IsNaN(actual));
            }
        }
Пример #3
0
        public void ConstructorTest()
        {
            var t = new TDistribution(degreesOfFreedom: 4.2);

            double mean   = t.Mean;                                    // 0.0
            double median = t.Median;                                  // 0.0
            double var    = t.Variance;                                // 1.9090909090909089

            double cdf  = t.DistributionFunction(x: 1.4);              // 0.88456136730659074
            double pdf  = t.ProbabilityDensityFunction(x: 1.4);        // 0.13894002185341031
            double lpdf = t.LogProbabilityDensityFunction(x: 1.4);     // -1.9737129364307417

            double ccdf = t.ComplementaryDistributionFunction(x: 1.4); // 0.11543863269340926
            double icdf = t.InverseDistributionFunction(p: cdf);       // 1.4000000000000012

            double hf  = t.HazardFunction(x: 1.4);                     // 1.2035833984833988
            double chf = t.CumulativeHazardFunction(x: 1.4);           // 2.1590162088918525

            string str = t.ToString(CultureInfo.InvariantCulture);     // T(x; df = 4.2)

            Assert.AreEqual(0.0, mean);
            Assert.AreEqual(0.0, median);
            Assert.AreEqual(1.9090909090909089, var);
            Assert.AreEqual(2.1590162088918525, chf);
            Assert.AreEqual(0.88456136730659074, cdf);
            Assert.AreEqual(0.13894002185341031, pdf);
            Assert.AreEqual(-1.9737129364307417, lpdf);
            Assert.AreEqual(1.2035833984833988, hf);
            Assert.AreEqual(0.11543863269340926, ccdf);
            Assert.AreEqual(1.4000000000000012, icdf);
            Assert.AreEqual("T(x; df = 4.2)", str);
        }
Пример #4
0
        public void InverseDistributionFunctionTest2()
        {
            TDistribution target = new TDistribution(24);

            double expected = 1.710882023;
            double actual   = target.InverseDistributionFunction(0.95);

            Assert.AreEqual(expected, actual, 1e-06);
        }
Пример #5
0
        public void InverseDistributionFunctionLeftTailTest()
        {
            double[] a = { 0.1, 0.05, 0.025, 0.01, 0.005, 0.001, 0.0005 };

            double[,] expected =
            {
                {   1, 3.078, 6.314, 12.706, 31.821, 63.656, 318.289, 636.578 },
                {   2, 1.886, 2.920,  4.303,  6.965,  9.925,  22.328,  31.600 },
                {   3, 1.638, 2.353,  3.182,  4.541,  5.841,  10.214,  12.924 },
                {   4, 1.533, 2.132,  2.776,  3.747,  4.604,   7.173,   8.610 },
                {   5, 1.476, 2.015,  2.571,  3.365,  4.032,   5.894,   6.869 },
                {   6, 1.440, 1.943,  2.447,  3.143,  3.707,   5.208,   5.959 },
                {   7, 1.415, 1.895,  2.365,  2.998,  3.499,   4.785,   5.408 },
                {   8, 1.397, 1.860,  2.306,  2.896,  3.355,   4.501,   5.041 },
                {   9, 1.383, 1.833,  2.262,  2.821,  3.250,   4.297,   4.781 },
                {  10, 1.372, 1.812,  2.228,  2.764,  3.169,   4.144,   4.587 },
                {  11, 1.363, 1.796,  2.201,  2.718,  3.106,   4.025,   4.437 },
                {  12, 1.356, 1.782,  2.179,  2.681,  3.055,   3.930,   4.318 },
                {  13, 1.350, 1.771,  2.160,  2.650,  3.012,   3.852,   4.221 },
                {  14, 1.345, 1.761,  2.145,  2.624,  2.977,   3.787,   4.140 },
                {  15, 1.341, 1.753,  2.131,  2.602,  2.947,   3.733,   4.073 },
                {  16, 1.337, 1.746,  2.120,  2.583,  2.921,   3.686,   4.015 },
                {  17, 1.333, 1.740,  2.110,  2.567,  2.898,   3.646,   3.965 },
                {  18, 1.330, 1.734,  2.101,  2.552,  2.878,   3.610,   3.922 },
                {  19, 1.328, 1.729,  2.093,  2.539,  2.861,   3.579,   3.883 },
                {  20, 1.325, 1.725,  2.086,  2.528,  2.845,   3.552,   3.850 },
                {  21, 1.323, 1.721,  2.080,  2.518,  2.831,   3.527,   3.819 },
                {  22, 1.321, 1.717,  2.074,  2.508,  2.819,   3.505,   3.792 },
                {  23, 1.319, 1.714,  2.069,  2.500,  2.807,   3.485,   3.768 },
                {  24, 1.318, 1.711,  2.064,  2.492,  2.797,   3.467,   3.745 },
                {  25, 1.316, 1.708,  2.060,  2.485,  2.787,   3.450,   3.725 },
                {  26, 1.315, 1.706,  2.056,  2.479,  2.779,   3.435,   3.707 },
                {  27, 1.314, 1.703,  2.052,  2.473,  2.771,   3.421,   3.689 },
                {  28, 1.313, 1.701,  2.048,  2.467,  2.763,   3.408,   3.674 },
                {  29, 1.311, 1.699,  2.045,  2.462,  2.756,   3.396,   3.660 },
                {  30, 1.310, 1.697,  2.042,  2.457,  2.750,   3.385,   3.646 },
                {  60, 1.296, 1.671,  2.000,  2.390,  2.660,   3.232,   3.460 },
                { 120, 1.289, 1.658,  1.980,  2.358,  2.617,   3.160,   3.373 },
            };

            for (int i = 0; i < expected.GetLength(0); i++)
            {
                int df = (int)expected[i, 0];

                TDistribution target = new TDistribution(df);

                for (int j = 1; j < expected.GetLength(1); j++)
                {
                    double actual = target.InverseDistributionFunction(1.0 - a[j - 1]);
                    Assert.IsTrue(Math.Abs(expected[i, j] / actual - 1) < 1e-3);
                }
            }
        }
Пример #6
0
        /// <summary>
        ///  Computes the power for a test with givens values of
        ///  <see cref="IPowerAnalysis.Effect">effect size</see> and <see cref="IPowerAnalysis.Samples">
        ///  number of samples</see> under <see cref="IPowerAnalysis.Size"/>.
        /// </summary>
        ///
        /// <returns>
        ///  The power for the test under the given conditions.
        /// </returns>
        ///
        public override void ComputePower()
        {
            double delta = Effect / Math.Sqrt(1.0 / Samples1 + 1.0 / Samples2);
            double df    = Samples1 + Samples2 - 2;

            TDistribution           td = new TDistribution(df);
            NoncentralTDistribution nt = new NoncentralTDistribution(df, delta);

            switch (Tail)
            {
            case DistributionTail.TwoTail:
            {
                double Ta = td.InverseDistributionFunction(1.0 - Size / 2);
                double pa = nt.ComplementaryDistributionFunction(+Ta);
                double pb = nt.DistributionFunction(-Ta);
                Power = pa + pb;
                break;
            }

            case DistributionTail.OneLower:
            {
                double Ta = td.InverseDistributionFunction(Size);
                Power = nt.DistributionFunction(Ta);
                break;
            }

            case DistributionTail.OneUpper:
            {
                double Ta = td.InverseDistributionFunction(1.0 - Size);
                Power = nt.ComplementaryDistributionFunction(Ta);
                break;
            }

            default:
                throw new InvalidOperationException();
            }
        }
Пример #7
0
        public void MedianTest()
        {
            TDistribution target = new TDistribution(7.6);

            Assert.AreEqual(target.Median, target.InverseDistributionFunction(0.5));
        }
Пример #8
0
        public static double Student(double significance_level, int degrees_of_freedom)
        {
            var td = new TDistribution(degrees_of_freedom);

            return(Math.Abs(td.InverseDistributionFunction(significance_level)));
        }