public async Task SetDependent(DataSeriesEvaluator dependent_, RegressionField field_, bool runRegression_=true)
    {
      m_dependent = dependent_;
      m_regField = field_;

      if (runRegression_)
        await DoRegression();
    }
 public double this[RegressionField field_]
 {
   get
   {
     switch (field_)
     {
       case RegressionField.Beta:
         return Beta;
       case RegressionField.RSquared:
         return RSquared;
     }
     throw new Exception(string.Format("Unhandled option ({0})", field_));
   }
 }
    internal static DatedDataCollectionGen<double> GetRollingRegressionField(this ILevels levels_,  RegressionArguments args_, RegressionField field_)
    {
      DatedDataCollectionGen<double> ret = null;
      try
      {
        var myLevels = levels_.Levels;
        var independentLevels = args_.Independent.Levels;

        if (args_.RegressOn == RegressOn.Differences)
        {
          myLevels = myLevels.ToDifferences();
          independentLevels = independentLevels.ToDifferences();
        }

        var m_regressionData =
          myLevels.IntersectDates(independentLevels);

        if (m_regressionData.Length < args_.RegressionWindowLength)
          return null;

        var myBucket = new List<double>();
        var indepBucket = new List<double>();
        var betas = new List<double>();
        var dates = new List<DateTime>();

        for (int i = 0; i < m_regressionData.Length; ++i)
        {
          myBucket.Add(m_regressionData.Data[i][0]);
          indepBucket.Add(m_regressionData.Data[i][1]);

          if (myBucket.Count < args_.RegressionWindowLength)
            continue;

          while (myBucket.Count > args_.RegressionWindowLength)
          {
            myBucket.RemoveAt(0);
            indepBucket.RemoveAt(0);
          }

          var yV = new NMathCore.DoubleVector(myBucket.ToArray());
          var matrix = new NMathCore.DoubleMatrix(indepBucket.ToArray().ToColumn());

          try
          {
            var lin = new NMathStats.LinearRegression(obs: yV, A: matrix, addIntercept: true);
            var anova = new NMathStats.LinearRegressionAnova(lin);

            var result = new RegressionResult(args_.Independent, m_regressionData, lin, anova);

            betas.Add(result[field_]);
            dates.Add(m_regressionData.Dates[i]);
          }
          catch { }
        }

        ret = new DatedDataCollectionGen<double>(dates.ToArray(), betas.ToArray());
      }
      catch (Exception ex_)
      {
        Logger.Error("Error generated doing rolling beta", typeof(RegressionExtensionMethods), ex_);
        return null;
      }
      return ret;
    }