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));
        }
示例#2
0
        private void CalculaICTStudent(double media, double variancia, int n, ref IntervaloConfianca ic)
        {
            StudentT ts        = new StudentT(0, 1, n - 1);
            var      percentil = ts.InverseCumulativeDistribution(0.975);

            ic.U = media + percentil * Math.Sqrt(variancia / n);
            ic.L = media - percentil * Math.Sqrt(variancia / n);
        }
示例#3
0
        public double GetMeanErrorAt(double confidence)
        {
            if (GetN() <= 2)
            {
                return(Double.NaN);
            }
            var    distribution = new StudentT(0, 1, GetN() - 1);
            double a            = distribution.InverseCumulativeDistribution(1 - (1 - confidence) / 2);

            return(a * GetStandardDeviation() / Math.Sqrt(GetN()));
        }
        private IReadOnlyList <DataRepository> calculateConfidenceIntervalFor(ParameterIdentification parameterIdentification, ParameterIdentificationRunResult runResult, string confidenceIntervalName, Func <Scalings, double, double, double, double> intervalCalculation, bool requiresActiveOutput)
        {
            var dataRepositories = new List <DataRepository>();

            if (runResult.JacobianMatrix == null)
            {
                return(dataRepositories);
            }

            var residualsResult = runResult.BestResult.ResidualsResult;
            var allResiduals    = residualsResult.AllResidualsWithWeightsStrictBiggerZero;
            var nr = allResiduals.Count;
            var np = parameterIdentification.AllVariableIdentificationParameters.Count();
            var df = nr - np;

            if (df <= 0)
            {
                return(dataRepositories);
            }

            var Q = residualsResult.SumResidual2;

            try
            {
                _sigma     = Math.Sqrt(Q / df);
                _runResult = runResult;
                var covariance = _matrixCalculator.CovarianceMatrixFrom(runResult.JacobianMatrix, residualsResult);
                _covP = Matrix <double> .Build.DenseOfRowArrays(covariance.Rows);

                var qt = new StudentT(0.0, 1, df);
                _dt = qt.InverseCumulativeDistribution(1 - Constants.CONFIDENCE_INTERVAL_ALPHA / 2);

                parameterIdentification.AllOutputMappings.GroupBy(x => x.FullOutputPath).Each(x =>
                {
                    var outputMapping  = x.ElementAt(0);
                    var dataRepository = _dataRepositoryCreator.CreateFor(confidenceIntervalName, confidanceIntervalFor(outputMapping, intervalCalculation, requiresActiveOutput), outputMapping, runResult.BestResult);
                    if (!dataRepository.IsNull())
                    {
                        dataRepositories.Add(dataRepository);
                    }
                });

                return(dataRepositories);
            }
            finally
            {
                _covP      = null;
                _sigma     = double.NaN;
                _dt        = double.NaN;
                _runResult = null;
            }
        }
        public ICache <string, double> ConfidenceIntervalFrom(JacobianMatrix jacobianMatrix, ResidualsResult residualsResult)
        {
            var    confidenceInterval = new Cache <string, double>(x => double.NaN);
            Matrix covarianceMatrix;

            try
            {
                covarianceMatrix = _matrixCalculator.CovarianceMatrixFrom(jacobianMatrix, residualsResult);
            }
            catch (MatrixCalculationException)
            {
                return(confidenceInterval);
            }

            if (covarianceMatrix == null)
            {
                return(confidenceInterval);
            }

            var numberOfParameters = jacobianMatrix.ColumnCount;
            var numberOfData       = jacobianMatrix.RowCount;
            var df = numberOfData - numberOfParameters;

            if (df <= 0)
            {
                return(confidenceInterval);
            }

            var t  = new StudentT(0.0, 1, df);
            var dt = t.InverseCumulativeDistribution(1 - Constants.CONFIDENCE_INTERVAL_ALPHA / 2);

            jacobianMatrix.ParameterNames.Each((path, index) =>
            {
                var value = Math.Sqrt(covarianceMatrix[index][index]);
                confidenceInterval.Add(path, dt * value);
            });

            return(confidenceInterval);
        }