public void CanCreateStudentT(double location, double scale, double dof)
 {
     var n = new StudentT(location, scale, dof);
     Assert.AreEqual(location, n.Location);
     Assert.AreEqual(scale, n.Scale);
     Assert.AreEqual(dof, n.DegreesOfFreedom);
 }
 public void CanCreateStandardStudentT()
 {
     var n = new StudentT();
     Assert.AreEqual(0.0, n.Location);
     Assert.AreEqual(1.0, n.Scale);
     Assert.AreEqual(1.0, n.DegreesOfFreedom);
 }
 public void ValidateMode(double location, double scale, double dof)
 {
     var n = new StudentT(location, scale, dof);
     Assert.AreEqual(location, n.Mode);
 }
 public void ValidateMinimum()
 {
     var n = new StudentT();
     Assert.AreEqual(Double.NegativeInfinity, n.Minimum);
 }
 public static CorrelData ComputeCorrelation(IEnumerable<double> d1, IEnumerable<double> d2)
 {
     CorrelData oRet = null;
     if ((d1 == null) || (d2 == null))
     {
         return null;
     }
     double[] dd1 = d1.ToArray();
     double[] dd2 = d2.ToArray();
     int n = (dd1.Length < dd2.Length) ? dd1.Length : dd2.Length;
     if (n < 3)
     {
         return null;
     }
     oRet = new CorrelData();
     oRet.Count = n;
     double corr = myconvert10000(Correlation.Pearson(dd1.Take(n), dd2.Take(n)));
     if (corr < -1.0)
     {
         corr = -1.0;
     }
     if (corr > 1.0)
     {
         corr = 1.0;
     }
     oRet.Value = corr;
     double xn = (double)n;
     double rr = (corr < 0.0) ? -corr : corr;
     double crit = rr * Math.Sqrt(xn - 2.0) / Math.Sqrt(1.0 - rr * rr);
     StudentT st = new StudentT(0.0, 1.0, xn - 2);
     double pb = st.CumulativeDistribution(crit);
     oRet.Probability = myconvert10000(1.0 - pb);
     double s1 = 0.5 * Math.Log((1.0 + corr) / (1.0 - corr));
     double s2 = 1.96 / Math.Sqrt(xn - 3.0);
     double s3 = corr / Math.Sqrt(xn - 1.0);
     double z1 = s1 - s2 - s3;
     double z2 = s1 + s2 - s3;
     oRet.Minimum = myconvert10000(Math.Tanh(z1));
     oRet.Maximum = myconvert10000(Math.Tanh(z2));
     return oRet;
 }
Example #6
0
 /// <summary>
 /// Density function for a Student's T distribution for a specified number
 /// of degrees of freedom.
 /// </summary>
 public static double DT(double value, double df, double location = 0, double scale = 1)
 {
     var tdist = new StudentT(location, scale, df);
     return tdist.Density(value);
 }
 public void CanSampleSequence()
 {
     var n = new StudentT();
     var ied = n.Samples();
     ied.Take(5).ToArray();
 }
 public void ValidateVariance(double location, double scale, double dof, double var)
 {
     var n = new StudentT(location, scale, dof);
     Assert.AreEqual(var, n.Variance);
 }
 public void SetDofFailsWithNonPositiveDoF(double dof)
 {
     var n = new StudentT();
     Assert.Throws<ArgumentOutOfRangeException>(() => n.DegreesOfFreedom = dof);
 }
Example #10
0
 public void ValidateInverseCumulativeDistribution(double location, double scale, double dof, double x, double p)
 {
     var dist = new StudentT(location, scale, dof);
     Assert.That(dist.InverseCumulativeDistribution(p), Is.EqualTo(x).Within(1e-6));
     Assert.That(StudentT.InvCDF(location, scale, dof, p), Is.EqualTo(x).Within(1e-6));
 }
Example #11
0
 public void ValidateCumulativeDistribution(double location, double scale, double dof, double x, double p)
 {
     var dist = new StudentT(location, scale, dof);
     Assert.That(dist.CumulativeDistribution(x), Is.EqualTo(p).Within(1e-13));
     Assert.That(StudentT.CDF(location, scale, dof, x), Is.EqualTo(p).Within(1e-13));
 }
Example #12
0
        public IList<LinearFitResult> Fit(double[] observations)
        {
            if (observations.Length != DesignMatrix.RowCount)
            {
                throw new ArgumentException("Wrong number of rows"); // Not L10N
            }
            var coefficients = QrFactorization.Solve(observations);
            var fittedValues = new double[observations.Length];
            var residuals = new double[observations.Length];
            for (int iRow = 0; iRow < observations.Length; iRow++)
            {
                var designRow = Enumerable.Range(0, DesignMatrix.ColumnCount).Select(index => DesignMatrix[iRow, index]).ToArray();
                fittedValues[iRow] = DotProduct(designRow, coefficients);
                residuals[iRow] = observations[iRow] - fittedValues[iRow];
            }
            double rss = DotProduct(residuals, residuals);

            int degreesOfFreedom = observations.Length - QrFactorization.NumberIndependentColumns;
            double resVar = rss / degreesOfFreedom;
            double sigma = Math.Sqrt(resVar);
            var covarianceUnscaled = MatrixCrossproductInverse;
            var scaledCovariance = covarianceUnscaled.Multiply(sigma * sigma);
            var indepColIndexes = QrFactorization.IndependentColumnIndexes.ToArray();
            var result = new List<LinearFitResult>();
            foreach (var contrastRow in ContrastValues.EnumerateRows())
            {
                double standardError = 0;
                for (int iRow = 0; iRow < indepColIndexes.Length; iRow++)
                {
                    for (int iCol = 0; iCol < indepColIndexes.Length; iCol++)
                    {
                        standardError += contrastRow[indepColIndexes[iRow]] * scaledCovariance[iRow, iCol] * contrastRow[indepColIndexes[iCol]];
                    }
                }
                standardError = Math.Sqrt(standardError);
                double foldChange = DotProduct(coefficients, contrastRow);
                double tValue = foldChange / standardError;
                double pValue;
                if (0 != degreesOfFreedom)
                {
                    var studentT = new StudentT(0, 1.0, degreesOfFreedom);
                    pValue = (1 - studentT.CumulativeDistribution(Math.Abs(tValue))) * 2;
                }
                else
                {
                    pValue = 1;
                }
                result.Add(new LinearFitResult(foldChange)
                    .SetDegreesOfFreedom(degreesOfFreedom)
                    .SetTValue(tValue)
                    .SetStandardError(standardError)
                    .SetPValue(pValue));
            }
            return result;
        }
Example #13
0
 public void SetScaleFailsWithNonPositiveScale(double scale)
 {
     var n = new StudentT();
     Assert.That(() => n.Scale = scale, Throws.ArgumentException);
 }
Example #14
0
 public void SetDofFailsWithNonPositiveDoF(double dof)
 {
     var n = new StudentT();
     Assert.That(() => n.DegreesOfFreedom = dof, Throws.ArgumentException);
 }
 public void ValidateStdDev(double location, double scale, double dof, double sdev)
 {
     var n = new StudentT(location, scale, dof);
     Assert.AreEqual(sdev, n.StdDev);
 }
 public void ValidateToString()
 {
     var n = new StudentT(1.0, 2.0, 1.0);
     Assert.AreEqual("StudentT(μ = 1, σ = 2, ν = 1)", n.ToString());
 }
 public void SetScaleFailsWithNonPositiveScale(double scale)
 {
     var n = new StudentT();
     Assert.Throws<ArgumentOutOfRangeException>(() => n.Scale = scale);
 }
 public void ValidateCumulativeDistribution(double location, double scale, double dof, double x, double c)
 {
     var n = new StudentT(location, scale, dof);
     AssertHelpers.AlmostEqualRelative(c, n.CumulativeDistribution(x), 13);
 }
 public void ValidateDensityLn(double location, double scale, double dof, double x, double p)
 {
     var n = new StudentT(location, scale, dof);
     AssertHelpers.AlmostEqualRelative(p, n.DensityLn(x), 13);
 }
 public void CanSample()
 {
     var n = new StudentT();
     n.Sample();
 }
 public void ValidateMaximum()
 {
     var n = new StudentT();
     Assert.AreEqual(Double.PositiveInfinity, n.Maximum);
 }
        /// <summary>
        /// Run example
        /// </summary>
        /// <a href="http://en.wikipedia.org/wiki/StudentT_distribution">StudentT distribution</a>
        public void Run()
        {
            // 1. Initialize the new instance of the StudentT distribution class with parameters Location = 0, Scale = 1, DegreesOfFreedom = 1
            var studentT = new StudentT();
            Console.WriteLine(@"1. Initialize the new instance of the StudentT distribution class with parameters Location = {0}, Scale = {1}, DegreesOfFreedom = {2}", studentT.Location, studentT.Scale, studentT.DegreesOfFreedom);
            Console.WriteLine();

            // 2. Distributuion properties:
            Console.WriteLine(@"2. {0} distributuion properties:", studentT);

            // Cumulative distribution function
            Console.WriteLine(@"{0} - Сumulative distribution at location '0.3'", studentT.CumulativeDistribution(0.3).ToString(" #0.00000;-#0.00000"));

            // Probability density
            Console.WriteLine(@"{0} - Probability density at location '0.3'", studentT.Density(0.3).ToString(" #0.00000;-#0.00000"));

            // Log probability density
            Console.WriteLine(@"{0} - Log probability density at location '0.3'", studentT.DensityLn(0.3).ToString(" #0.00000;-#0.00000"));

            // Entropy
            Console.WriteLine(@"{0} - Entropy", studentT.Entropy.ToString(" #0.00000;-#0.00000"));

            // Largest element in the domain
            Console.WriteLine(@"{0} - Largest element in the domain", studentT.Maximum.ToString(" #0.00000;-#0.00000"));

            // Smallest element in the domain
            Console.WriteLine(@"{0} - Smallest element in the domain", studentT.Minimum.ToString(" #0.00000;-#0.00000"));

            // Mean
            Console.WriteLine(@"{0} - Mean", studentT.Mean.ToString(" #0.00000;-#0.00000"));

            // Median
            Console.WriteLine(@"{0} - Median", studentT.Median.ToString(" #0.00000;-#0.00000"));

            // Mode
            Console.WriteLine(@"{0} - Mode", studentT.Mode.ToString(" #0.00000;-#0.00000"));

            // Variance
            Console.WriteLine(@"{0} - Variance", studentT.Variance.ToString(" #0.00000;-#0.00000"));

            // Standard deviation
            Console.WriteLine(@"{0} - Standard deviation", studentT.StdDev.ToString(" #0.00000;-#0.00000"));

            // 3. Generate 10 samples of the StudentT distribution
            Console.WriteLine(@"3. Generate 10 samples of the StudentT distribution");
            for (var i = 0; i < 10; i++)
            {
                Console.Write(studentT.Sample().ToString("N05") + @" ");
            }

            Console.WriteLine();
            Console.WriteLine();

            // 4. Generate 100000 samples of the StudentT(0, 1, 1) distribution and display histogram
            Console.WriteLine(@"4. Generate 100000 samples of the StudentT(0, 1, 1) distribution and display histogram");
            var data = new double[100000];
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = studentT.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);

            // 5. Generate 100000 samples of the StudentT(0, 1, 5) distribution and display histogram
            Console.WriteLine(@"5. Generate 100000 samples of the StudentT(0, 1, 5) distribution and display histogram");
            studentT.DegreesOfFreedom = 5;
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = studentT.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
            Console.WriteLine();

            // 6. Generate 100000 samples of the StudentT(0, 1, 10) distribution and display histogram
            Console.WriteLine(@"6. Generate 100000 samples of the StudentT(0, 1, 10) distribution and display histogram");
            studentT.DegreesOfFreedom = 10;
            for (var i = 0; i < data.Length; i++)
            {
                data[i] = studentT.Sample();
            }

            ConsoleHelper.DisplayHistogram(data);
        }
 public void ValidateMean(double location, double scale, double dof, double mean)
 {
     var n = new StudentT(location, scale, dof);
     Assert.AreEqual(mean, n.Mean);
 }
Example #24
0
 /// <summary>
 /// Distribution function for Student's T distribution for a specified z-score
 /// and a number of degrees of freedom.
 /// </summary>
 public static double PT(double z, double df)
 {
     var tdist = new StudentT(0, 1, df);
     return tdist.CumulativeDistribution(z);
 }
 public static double TDIST(double x, int degrees_freedom, int tails)
 {
     var dist = new StudentT(0.0, 1.0, degrees_freedom);
     switch (tails)
     {
         case 1:
             return 1d - dist.CumulativeDistribution(x);
         case 2:
             return 1d - dist.CumulativeDistribution(x) + dist.CumulativeDistribution(-x);
         default:
             throw new ArgumentOutOfRangeException("tails");
     }
 }