Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/09/11 12:56:21 (12 years ago)
Author:
gkronber
Message:

#1081 worked on multi-variate time series prognosis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineTheilsUStatisticCalculator.cs

    r7099 r7160  
    2222using System;
    2323using System.Collections.Generic;
     24using System.Linq;
    2425using HeuristicLab.Common;
    2526
     
    5253
    5354    public void Add(double startValue, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation) {
     55      Add(startValue, actualContinuation.Select(x => startValue), actualContinuation, predictedContinuation);
     56    }
     57
     58    public void Add(double startValue, IEnumerable<double> referenceContinuation, IEnumerable<double> actualContinuation, IEnumerable<double> predictedContinuation) {
    5459      if (double.IsNaN(startValue) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
    5560        errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
     
    5762        var actualEnumerator = actualContinuation.GetEnumerator();
    5863        var predictedEnumerator = predictedContinuation.GetEnumerator();
    59         while (actualEnumerator.MoveNext() & predictedEnumerator.MoveNext() & ErrorState != OnlineCalculatorError.InvalidValueAdded) {
     64        var referenceEnumerator = referenceContinuation.GetEnumerator();
     65        while (actualEnumerator.MoveNext() & predictedEnumerator.MoveNext() & referenceEnumerator.MoveNext()
     66          & ErrorState != OnlineCalculatorError.InvalidValueAdded) {
    6067          double actual = actualEnumerator.Current;
    6168          double predicted = predictedEnumerator.Current;
    62           if (double.IsNaN(actual) || double.IsNaN(predicted)) {
     69          double reference = referenceEnumerator.Current;
     70          if (double.IsNaN(actual) || double.IsNaN(predicted) || double.IsNaN(reference)) {
    6371            errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
    6472          } else {
     
    6775            squaredErrorMeanCalculator.Add(errorPredictedChange * errorPredictedChange);
    6876
    69             double errorNoChange = (actual - startValue);
    70             unbiasedEstimatorMeanCalculator.Add(errorNoChange * errorNoChange);
     77            double errorReference = (reference - startValue) - (actual - startValue);
     78            unbiasedEstimatorMeanCalculator.Add(errorReference * errorReference);
    7179          }
    7280        }
    7381        // check if both enumerators are at the end to make sure both enumerations have the same length
    74         if (actualEnumerator.MoveNext() || predictedEnumerator.MoveNext()) {
     82        if (actualEnumerator.MoveNext() || predictedEnumerator.MoveNext() || referenceEnumerator.MoveNext()) {
    7583          errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
    7684        } else {
     
    7987      }
    8088    }
     89
    8190
    8291    public void Reset() {
Note: See TracChangeset for help on using the changeset viewer.