public RegressionResult(ILevels independent_, DatedDataCollectionGen<double[]> regDataInput_, NMathStats.LinearRegression lin_, NMathStats.LinearRegressionAnova anova_) { m_independent = independent_; m_lin = lin_; m_regressionData = regDataInput_; m_anova = anova_; }
public void Evaluate(bool addIntercept_) { NMathCore.DoubleMatrix matrix = new CenterSpace.NMath.Core.DoubleMatrix(m_regressionMatrix); NMathCore.DoubleVector obs = new CenterSpace.NMath.Core.DoubleVector(m_observations); m_lin = new NMathStats.LinearRegression(matrix, obs, addIntercept_); m_anova = new CenterSpace.NMath.Stats.LinearRegressionAnova(m_lin); m_params = null; NotifyAll(); }
public static void UpdateThisWithCentralOptions(SwapsSummaryRow summaryRow_) { try { var lin = DoRegression(summaryRow_, GetRegressionCandidate(summaryRow_, Singleton<CentralSwitches>.Instance.RegressionArgs.Dependent), Singleton<CentralSwitches>.Instance.RegressionArgs.NumberOfDays, true); if (lin != null) { //summaryRow_.Beta = lin.ParameterEstimates[1].Value; summaryRow_.SetRegressionREsiduals(new DatedDataCollectionGen<double>(summaryRow_.Instrument.A_Prices.Dates.SliceLast(Singleton<CentralSwitches>.Instance.RegressionArgs.NumberOfDays), lin.Residuals.ToArray())); var anova = new NMathStats.LinearRegressionAnova(lin); summaryRow_.RSquared = anova.RSquared; } } catch (Exception e) { Logger.Error(string.Format("Error updating regression stats for {0}", summaryRow_.ToString()), typeof (RegressionHelper), e); } }
private void reCalculate() { ClearSeries(); if (!m_settings.IsValid || m_dependendSource==null) return; try { var topLeftData = new ScatterData(); var topRightData = new ScatterData(); foreach (var regressor in m_settings.RegressionCandidates) { var color = ColorAttribute.GetAttribute(regressor).Color; var independent = RegressionHelper.GetRegressionCandidate(m_dependendSource, regressor); foreach (var win in m_settings.Windows) { var lin = RegressionHelper.DoRegression(m_dependendSource, independent, (int)win); string key = string.Format("[{0}] {1}_{2}", lin.ParameterEstimates[1].Value.ToString("##0.0#"), EnumDescriptionAttribute.GetDescription(regressor), EnumDescriptionAttribute.GetDescription(win)); AddBottomSeries(independent.A_Prices.Dates.SliceLast((int)win), lin.Residuals.ToArray(), key, color); var anova = new NMathStats.LinearRegressionAnova(lin); topLeftData.AddData(EnumDescriptionAttribute.GetDescription(regressor), Convert.ToDouble(win), anova.RSquared,color); topRightData.AddData(key, HelperMethods.GetPercentRank(lin.Residuals.ToArray(),lin.Residuals.Count()-1), anova.RSquared,color); } } AddScatterSeries("areaTopLeft", topLeftData.XSeries.ToArray(), topLeftData.YSeries.ToArray(), topLeftData.Labels.ToArray(), TOP_LEFT_SCATTER_LABEL, topLeftData.Colors.ToArray(), "###0.0#"); AddScatterSeries("areaTopRight", topRightData.XSeries.ToArray(), topRightData.YSeries.ToArray(), topRightData.Labels.ToArray(), TOP_RIGHT_SCATTER_LABEL, topRightData.Colors.ToArray(), "###0.0#"); ultraChart1.CompositeChart.Legends[0].ChartLayers.AddRange( ultraChart1.CompositeChart.ChartLayers.OfType<ChartLayerAppearance>() .Where(x => x.ChartTypeAppearance is LineChartAppearance).ToArray()); } catch (Exception ex_) { Logger.Error("Error recaculating regressions", typeof (MultiRegressionCompare), ex_); } }
internal static RegressionResult DoRegression(this ILevels levels_, RegressionArguments args_) { 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.GetEndValues(args_.RegressionWindowLength).IntersectDates(independentLevels); NMathCore.DoubleVector yV = new NMathCore.DoubleVector(m_regressionData.Data.Select(x => x[0]).ToArray()); NMathCore.DoubleMatrix matrix = new NMathCore.DoubleMatrix(m_regressionData.Data.Select(x => x[1]).ToArray().ToColumn()); var lin = new NMathStats.LinearRegression(obs: yV, A: matrix, addIntercept: true); var anova = new NMathStats.LinearRegressionAnova(lin); return new RegressionResult(args_.Independent, m_regressionData, lin, anova); } catch (Exception ex_) { Logger.Error(string.Format("Error recalculating regression for {0}", levels_.Name), typeof(RegressionExtensionMethods), ex_); return null; } }
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; }