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; }