Example #1
0
        public override double LogLikelihood(Vector <double> parameter, double penaltyFactor, bool fillOutputs)
        {
            //var sigmaSquared = new Vector(values.Count);
            //double mVar = GetVariance(parameter);
            //var allLLs = new Vector(values.Count);
            //for (int t = 0; t < values.Count; ++t )
            //    allLLs[t] = conditionalLL(t, sigmaSquared, parameter, mVar);

            Vector <double> pbak = Parameters;

            if (values == null)
            {
                return(double.NaN);
            }
            if (parameter != null)
            {
                Parameters = parameter;
            }

            var sigmaSquared = Vector <double> .Build.Dense(values.Count);

            double mVar          = GetVariance(Parameters);
            double logLikelihood = 0;
            var    allLLs        = Vector <double> .Build.Dense(values.Count);

            for (int t = 0; t < values.Count; ++t)
            {
                allLLs[t]      = conditionalLL(t, sigmaSquared, Parameters, mVar);
                logLikelihood += allLLs[t];
            }

            if (fillOutputs)
            {
                var rts = new TimeSeries {
                    Title = values.Title + "[GARCH Res]"
                };
                predictiveStdDevAtAvail = new TimeSeries {
                    Title = values.Title + "Pred.StDev[AA]"
                };
                for (int t = 0; t < values.Count; ++t)
                {
                    double rx = values[t] / Math.Sqrt(sigmaSquared[t]);
                    rts.Add(values.TimeStamp(t), rx, false);
                    if (t > 0)
                    {
                        predictiveStdDevAtAvail.Add(values.TimeStamp(t - 1), Math.Sqrt(sigmaSquared[t]), false);
                    }
                }
                Residuals     = rts;
                GoodnessOfFit = logLikelihood;
            }

            if (parameter != null)
            {
                Parameters = pbak;
            }

            var llp = new LogLikelihoodPenalizer(allLLs);

            return(llp.LogLikelihood - llp.Penalty * penaltyFactor);
        }
Example #2
0
        public override double LogLikelihood(Vector <double> parameter, double penaltyFactor, bool fillOutputs)
        {
            Vector <double> allLLs = null;
            Vector <double> pbak   = Parameters; // save the current one

            if (values == null)
            {
                return(double.NaN);
            }
            if (values.Count == 0)
            {
                return(double.NaN);
            }

            if (parameter != null)
            {
                Parameters = parameter;
            }

            Residuals = null;
            double loglikelihood = 0;

            if (!DataIsLongitudinal())
            {
                double[] rs;
                double[] forecs;
                double[] resids = ComputeSpecialResiduals(values, out rs, 1, out forecs);

                TimeSeries rts;
                TimeSeries unstdrts;

                if (fillOutputs)
                {
                    rts = new TimeSeries {
                        Title = values.Title + "[ARMA Res]"
                    };
                    unstdrts = new TimeSeries {
                        Title = values.Title + "[ARMA Res]"
                    };
                    oneStepPredictors = new TimeSeries {
                        Title = values.Title + "[Predic]"
                    };
                    oneStepPredStd = new TimeSeries {
                        Title = values.Title + "[Pred. Stdev.]"
                    };
                    oneStepPredictorsAtAvailability = new TimeSeries {
                        Title = values.Title + "[Predic. AA]"
                    };

                    for (int t = 0; t < values.Count; ++t)
                    {
                        rts.Add(values.TimeStamp(t), resids[t] / Sigma, false);
                        unstdrts.Add(values.TimeStamp(t), resids[t], false);
                        double stdev = Math.Sqrt(rs[t]);
                        double fx    = values[t] - resids[t] * stdev;
                        oneStepPredictors.Add(values.TimeStamp(t), fx, false);
                        oneStepPredStd.Add(values.TimeStamp(t), stdev * Sigma, false);
                        fx = t < values.Count - 1 ? values[t + 1] - resids[t + 1] * Math.Sqrt(rs[t + 1]) : forecs[0];
                        oneStepPredictorsAtAvailability.Add(values.TimeStamp(t), fx, false);
                    }
                    Residuals = rts;
                    unstandardizedResiduals = unstdrts;
                }

                // now it is easy to compute the likelihood
                // this is a straightforward implementation of eqn (8.7.4) in Brockwell & Davis,
                // Time Series: Theory and Methods (2nd edition)
                allLLs = GetLikelihoodsFromResiduals(resids, rs);
                for (int t = 0; t < values.Count; ++t)
                {
                    loglikelihood += allLLs[t];
                }
            }
            else
            {
                // do nothing for now!
                return(double.NaN);
            }

            if (fillOutputs)
            {
                GoodnessOfFit = loglikelihood;
            }

            if (parameter != null)
            {
                Parameters = pbak;  // then restore original
            }
            var llp = new LogLikelihoodPenalizer(allLLs);

            return(llp.LogLikelihood - llp.Penalty * penaltyFactor);
        }