public static IArtaProcess CreateArtaProcess(RealDistribution distribution, double[] artaCorrelationCoefficients, RandomGenerator random) //throws NonFeasibleCorrelationException, NotStationaryException { AbstractArtaProcess arta = null; if (artaCorrelationCoefficients == null || artaCorrelationCoefficients.Length == 0) { double[] noCorrelation = { 0.0 }; artaCorrelationCoefficients = noCorrelation; } // check feasibility FeasibilityTest ft = new FeasibilityTest(distribution); ft.CheckFeasibility(artaCorrelationCoefficients); // check if correlation matrix is positive definite, if not CholeskyDecomposition throws Error new CholeskyDecomposition(AutoCorrelation.GetCorrelationMatrix(artaCorrelationCoefficients)); if (distribution is NormalDistribution) { arta = CreateArtaProcessN((NormalDistribution)distribution, artaCorrelationCoefficients, random); } else if (distribution is UniformRealDistribution) { arta = createArtaProcessU((UniformRealDistribution)distribution, artaCorrelationCoefficients, random); } else { arta = CreateArtaProcessG(distribution, artaCorrelationCoefficients, random); } return(arta); }
private static ArtaProcessGeneral CreateArtaProcessG(RealDistribution distribution, double[] artaCorrelationCoefficients, RandomGenerator random) //throws NotStationaryException { ArtaProcessGeneral arta = null; AutocorrelationFitter fitter = new AutocorrelationFitter(distribution); double[] arCorrelationCoefficients = fitter.FitArAutocorrelations(artaCorrelationCoefficients, DEFAULT_ERROR); ArProcess ar = ArProcessFactory.CreateArProcess(arCorrelationCoefficients, random); arta = new ArtaProcessGeneral(ar, distribution); return(arta); }
private double CalculateMinimumFeasibleBivariateCorrelation(RealDistribution distribution) { double minFBC = 0.0; // consider special cases, final else is general approach if (distribution is NormalDistribution || distribution is UniformRealDistribution || distribution is TDistribution) { minFBC = -1.0; } else if (distribution is ExponentialDistribution) { minFBC = 1.0 - Math.PI * Math.PI / 6.0; } else { double mean = distribution.getNumericalMean(); double variance = distribution.getNumericalVariance(); double integral = integrator.integrate(IterativeLegendreGaussIntegrator.DEFAULT_MAX_ITERATIONS_COUNT, new UnivariatDistributionFunction(distribution), 0.0, 1.0); minFBC = (integral - mean * mean) / variance; } return(minFBC); }
private UnivariatDistributionFunction(RealDistribution distribution) { this.distribution = distribution; }
public FeasibilityTest(RealDistribution distribution) : this(new IterativeLegendreGaussIntegrator(5, IterativeLegendreGaussIntegrator.DEFAULT_RELATIVE_ACCURACY, IterativeLegendreGaussIntegrator.DEFAULT_ABSOLUTE_ACCURACY), distribution) { }
public FeasibilityTest(UnivariateIntegrator integrator, RealDistribution distribution) { this.integrator = integrator; this.minimumFeasibleBivariateCorrelation = CalculateMinimumFeasibleBivariateCorrelation(distribution); }
public ArtaCorrelationEstimator(RealDistribution dist) { this.distribution = dist; }
public double nextInversionDeviate(RealDistribution distribution) { return(distribution.inverseCumulativeProbability(nextUniform(0, 1))); }
public static IArtaProcess CreateArtaProcess(RealDistribution distribution, double[] artaCorrelationCoefficients)// throws NonFeasibleCorrelationException, NotStationaryException { return(CreateArtaProcess(distribution, artaCorrelationCoefficients, new RandomAdaptor(new MersenneTwister()))); }
public ArtaProcessGeneral(ArProcess ar, RealDistribution distribution) : base(ar) { this.distribution = distribution; // TODO Auto-generated constructor stub }
public AutocorrelationFitter(RealDistribution dist) { this.artaCorrelationEstimator = new ArtaCorrelationEstimator(dist); }