Ticket #2857: PDP.patch

File PDP.patch, 23.7 KB (added by gkronber, 4 years ago)
  • Controls/PartialDependencePlot.cs

     
    3636namespace HeuristicLab.Problems.DataAnalysis.Views {
    3737  public partial class PartialDependencePlot : UserControl, IPartialDependencePlot {
    3838    private ModifiableDataset sharedFixedVariables; // used for syncronising variable values between charts
     39    private ModifiableDataset sharedIndependentVariables;
    3940    private ModifiableDataset internalDataset; // holds the x values for each point drawn
    4041
    4142    private CancellationTokenSource cancelCurrentRecalculateSource;
     
    236237        cancelCurrentRecalculateSource.Cancel();
    237238    }
    238239
    239     public void Configure(IEnumerable<IRegressionSolution> solutions, ModifiableDataset sharedFixedVariables, string freeVariable, int drawingSteps, bool initializeAxisRanges = true) {
     240    public void Configure(
     241      IEnumerable<IRegressionSolution> solutions,
     242      ModifiableDataset sharedFixedVariables,
     243      ModifiableDataset sharedIndependentVariables,
     244      string freeVariable, int drawingSteps, bool initializeAxisRanges = true) {
    240245      if (!SolutionsCompatible(solutions))
    241246        throw new ArgumentException("Solutions are not compatible with the problem data.");
    242247      this.freeVariable = freeVariable;
     
    249254      // this change is reflected in the internal dataset (where the value becomes a whole column)
    250255      if (this.sharedFixedVariables != null)
    251256        this.sharedFixedVariables.ItemChanged -= sharedFixedVariables_ItemChanged;
     257
    252258      this.sharedFixedVariables = sharedFixedVariables;
    253259      this.sharedFixedVariables.ItemChanged += sharedFixedVariables_ItemChanged;
     260      this.sharedIndependentVariables = sharedIndependentVariables;
    254261
    255262      RecalculateTrainingLimits(initializeAxisRanges);
    256263      RecalculateInternalDataset();
     
    285292      OrderAndColorSeries();
    286293    }
    287294
     295    private async void SharedIndependentVariables_ItemChanged(object sender, EventArgs<int, int> e) {
     296      await RecalculateAsync(true, false);
     297    }
     298
    288299    public async Task RecalculateAsync(bool updateOnFinish = true, bool resetYAxis = true) {
    289300      if (IsDisposed
    290301        || sharedFixedVariables == null || !solutions.Any() || string.IsNullOrEmpty(freeVariable)
     
    316327        calculationPendingLabel.Visible = false;
    317328        if (updateOnFinish)
    318329          Update();
    319       }
    320       catch (OperationCanceledException) { }
    321       catch (AggregateException ae) {
     330      } catch (OperationCanceledException) { } catch (AggregateException ae) {
    322331        if (!ae.InnerExceptions.Any(e => e is OperationCanceledException))
    323332          throw;
    324333      }
     
    411420      };
    412421      series.LegendText = series.Name;
    413422
    414       var confidenceBoundSolution = solution as IConfidenceRegressionSolution;
     423      //var confidenceBoundSolution = solution as IConfidenceRegressionSolution;
    415424      Series confidenceIntervalSeries = null;
    416       if (confidenceBoundSolution != null) {
    417         confidenceIntervalSeries = new Series {
    418           ChartType = SeriesChartType.Range,
    419           YValuesPerPoint = 2,
    420           Name = "95% Conf. Interval " + series.Name,
    421           IsVisibleInLegend = false
    422         };
    423       }
     425      //if (confidenceBoundSolution != null) {
     426      confidenceIntervalSeries = new Series {
     427        ChartType = SeriesChartType.Range,
     428        YValuesPerPoint = 2,
     429        Name = "95% Conf. Interval " + series.Name,
     430        IsVisibleInLegend = false
     431      };
     432      //}
    424433      return Tuple.Create(series, confidenceIntervalSeries);
    425434    }
    426435
     
    467476    private Task<DoubleLimit> UpdateSeriesDataAsync(IRegressionSolution solution, CancellationToken cancellationToken) {
    468477      return Task.Run(() => {
    469478        var xvalues = internalDataset.GetDoubleValues(FreeVariable).ToList();
    470         var yvalues = solution.Model.GetEstimatedValues(internalDataset, Enumerable.Range(0, internalDataset.Rows)).ToList();
     479        var yvalues = GetSamples(solution).ToList();
    471480
    472481        double min = double.MaxValue, max = double.MinValue;
    473482
    474483        var series = seriesCache[solution];
    475484        for (int i = 0; i < xvalues.Count; i++) {
    476           series.Points[i].SetValueXY(xvalues[i], yvalues[i]);
    477           if (yvalues[i] < min) min = yvalues[i];
    478           if (yvalues[i] > max) max = yvalues[i];
     485          var avg = yvalues[i].Average();
     486          series.Points[i].SetValueXY(xvalues[i], avg);
     487          if (avg < min) min = avg;
     488          if (avg > max) max = avg;
    479489        }
    480490
    481491        cancellationToken.ThrowIfCancellationRequested();
    482492
    483         var confidenceBoundSolution = solution as IConfidenceRegressionSolution;
    484         if (confidenceBoundSolution != null) {
    485           var confidenceIntervalSeries = ciSeriesCache[solution];
    486           var variances = confidenceBoundSolution.Model.GetEstimatedVariances(internalDataset, Enumerable.Range(0, internalDataset.Rows)).ToList();
    487           for (int i = 0; i < xvalues.Count; i++) {
    488             var lower = yvalues[i] - 1.96 * Math.Sqrt(variances[i]);
    489             var upper = yvalues[i] + 1.96 * Math.Sqrt(variances[i]);
    490             confidenceIntervalSeries.Points[i].SetValueXY(xvalues[i], lower, upper);
    491             if (lower < min) min = lower;
    492             if (upper > max) max = upper;
    493           }
     493        // var confidenceBoundSolution = solution as IConfidenceRegressionSolution;
     494        // if (confidenceBoundSolution != null) {
     495        //   var confidenceIntervalSeries = ciSeriesCache[solution];
     496        //   var variances = GetEstimatedVariance(confidenceBoundSolution).ToList();
     497        //   for (int i = 0; i < xvalues.Count; i++) {
     498        //     var lower = yvalues[i] - 1.96 * Math.Sqrt(variances[i]);
     499        //     var upper = yvalues[i] + 1.96 * Math.Sqrt(variances[i]);
     500        //     confidenceIntervalSeries.Points[i].SetValueXY(xvalues[i], lower, upper);
     501        //     if (lower < min) min = lower;
     502        //     if (upper > max) max = upper;
     503        //   }
     504        // }
     505        var confidenceIntervalSeries = ciSeriesCache[solution];
     506        for (int i = 0; i < xvalues.Count; i++) {
     507          var avg = yvalues[i].Average();
     508          var variance = yvalues[i].Variance();
     509          var lower = avg - 1.96 * Math.Sqrt(variance);
     510          var upper = avg + 1.96 * Math.Sqrt(variance);
     511          confidenceIntervalSeries.Points[i].SetValueXY(xvalues[i], lower, upper);
     512          if (lower < min) min = lower;
     513          if (upper > max) max = upper;
    494514        }
    495515
    496516        cancellationToken.ThrowIfCancellationRequested();
     
    498518      }, cancellationToken);
    499519    }
    500520
     521    private IEnumerable<double[]> GetSamples(IRegressionSolution solution) {
     522      var independentVarNames = sharedIndependentVariables.DoubleVariables.ToArray();
     523
     524      var predictions = new List<double[]>();
     525      for (int rIdx = 0; rIdx < sharedIndependentVariables.Rows; rIdx++) {
     526        foreach (var varName in independentVarNames) {
     527          var varVal = sharedIndependentVariables.GetDoubleValue(varName, rIdx);
     528          if (internalDataset.VariableNames.Contains(varName))
     529            internalDataset.ReplaceVariable(varName, Enumerable.Repeat(varVal, internalDataset.Rows).ToList());
     530          else
     531            internalDataset.AddVariable(varName, Enumerable.Repeat(varVal, internalDataset.Rows).ToList());
     532
     533        }
     534        var pred = solution.Model.GetEstimatedValues(internalDataset, Enumerable.Range(0, internalDataset.Rows));
     535        predictions.Add(pred.ToArray());
     536      }
     537      for (int i = 0; i < internalDataset.Rows; i++) {
     538        yield return predictions.Select(p => p[i]).ToArray();
     539      }
     540    }
     541
    501542    private void ResizeAllSeriesData() {
    502543      if (internalDataset == null)
    503544        return;
  • Regression/RegressionSolutionGradientView.cs

     
    9393      var newTrackbars = CreateConfiguration();
    9494
    9595      sharedFixedVariables = new ModifiableDataset(variableNames, newTrackbars.Select(tb => new List<double>(1) { (double)tb.Value }));
    96       _partialDependencePlot.Configure(new[] { Content }, sharedFixedVariables, variableNames.First(), DrawingSteps);
     96      _partialDependencePlot.Configure(new[] { Content }, sharedFixedVariables, new ModifiableDataset(), variableNames.First(), DrawingSteps);
    9797      await _partialDependencePlot.RecalculateAsync();
    9898
    9999      // Add to table and observable lists
  • Regression/RegressionSolutionPartialDependencePlotView.cs

     
    3939    private readonly Dictionary<string, DensityChart> densityCharts;
    4040    private readonly Dictionary<string, Panel> groupingPanels;
    4141    private ModifiableDataset sharedFixedVariables;
     42    private ModifiableDataset sharedIndependentVariables;
    4243
    4344    private const int Points = 200;
    4445    private int MaxColumns = 4;
     
    4546
    4647    private IEnumerable<string> VisibleVariables {
    4748      get {
    48         foreach (ListViewItem item in variableListView.CheckedItems)
    49           yield return item.Text;
     49        for (int i = 0; i < checkedVariableList.Items.Count; i++) {
     50          var item = checkedVariableList.Items[i];
     51          if (checkedVariableList.GetItemCheckState(i) == CheckState.Checked)
     52            yield return (string)item;
     53        }
    5054      }
    5155    }
    5256    private IEnumerable<IPartialDependencePlot> VisiblePartialDependencePlots {
     
    133137        sharedFixedVariables.ItemChanged -= SharedFixedVariables_ItemChanged;
    134138
    135139      sharedFixedVariables = new ModifiableDataset(doubleVariables.Concat(factorVariables), doubleVariableValues.Concat(factorVariableValues));
     140      sharedIndependentVariables = new ModifiableDataset(new string[] { "$$$RowIdx" }, new IList[] { problemData.TrainingIndices.ToList() });
    136141
    137142
    138143      // create controls
     
    140145      densityCharts.Clear();
    141146      groupingPanels.Clear();
    142147      foreach (var variableName in doubleVariables) {
    143         var plot = CreatePartialDependencePlot(variableName, sharedFixedVariables);
     148        var plot = CreatePartialDependencePlot(variableName, sharedFixedVariables, sharedIndependentVariables);
    144149        partialDependencePlots.Add(variableName, plot);
    145150
    146151        var densityChart = new DensityChart() {
     
    218223        panel.Controls.Add(plot);
    219224        groupingPanels.Add(variableName, panel);
    220225      }
     226
    221227      // update variable list
    222       variableListView.ItemChecked -= variableListView_ItemChecked;
    223       variableListView.Items.Clear();
     228      checkedVariableList.ItemCheck -= checkedVariableList_ItemCheck;
     229      checkedVariableList.Items.Clear();
    224230      foreach (var variable in allowedInputVariables)
    225         variableListView.Items.Add(key: variable, text: variable, imageIndex: 0);
     231        checkedVariableList.Items.Add(variable, isChecked: Content.Model.VariablesUsedForPrediction.Contains(variable));
    226232
    227       foreach (var variable in Content.Model.VariablesUsedForPrediction)
    228         variableListView.Items[variable].Checked = true;
    229       variableListView.ItemChecked += variableListView_ItemChecked;
     233      checkedVariableList.ItemCheck += checkedVariableList_ItemCheck;
    230234
    231235      sharedFixedVariables.ItemChanged += SharedFixedVariables_ItemChanged;
    232236
     
    294298        }
    295299      }
    296300    }
    297     private PartialDependencePlot CreatePartialDependencePlot(string variableName, ModifiableDataset sharedFixedVariables) {
     301    private PartialDependencePlot CreatePartialDependencePlot(string variableName, ModifiableDataset sharedFixedVariables, ModifiableDataset sharedIndependentVariables) {
    298302      var plot = new PartialDependencePlot {
    299303        Dock = DockStyle.Fill,
    300304        Margin = Padding.Empty,
     
    314318        if (recalculations.All(t => t.IsCompleted))
    315319          SetupYAxis();
    316320      };
    317       plot.Configure(new[] { Content }, sharedFixedVariables, variableName, Points);
     321      plot.Configure(new[] { Content }, sharedFixedVariables, sharedIndependentVariables, variableName, Points);
    318322      plot.SolutionAdded += partialDependencePlot_SolutionAdded;
    319323      plot.SolutionRemoved += partialDependencePlot_SolutionRemoved;
    320324      return plot;
     
    372376      var tl = partialDependencePlotTableLayout;
    373377      tl.Controls.Clear();
    374378      int row = 0, column = 0;
    375       double yValue = Content.Model.GetEstimatedValues(sharedFixedVariables, new[] { 0 }).Single();
     379      double yValue = Content.Model.GetEstimatedValues(sharedFixedVariables, new[] { 0 }).Single(); // TODO mean estimation
    376380      string title = Content.ProblemData.TargetVariable + ": " + yValue.ToString("G5", CultureInfo.CurrentCulture);
    377381
    378382      foreach (var v in VisibleVariables) {
     
    427431      }
    428432    }
    429433
    430     private async void variableListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
    431       var item = e.Item;
    432       var variable = item.Text;
     434
     435    private async void checkedVariableList_ItemCheck(object sender, ItemCheckEventArgs e) {
     436      // workaround to set the checkedState of the item to the new value so that remaining code works
     437      // see https://stackoverflow.com/questions/3666682/which-checkedlistbox-event-triggers-after-a-item-is-checked
     438      // we handle three states here
     439
     440      CheckedListBox clb = (CheckedListBox)sender;
     441      // Switch off event handler
     442      clb.ItemCheck -= checkedVariableList_ItemCheck;
     443      CheckState newCheckState;
     444      if (e.CurrentValue == CheckState.Unchecked) newCheckState = CheckState.Checked;
     445      else if (e.CurrentValue == CheckState.Checked) newCheckState = CheckState.Indeterminate;
     446      else newCheckState = CheckState.Unchecked;
     447      e.NewValue = newCheckState;
     448      clb.SetItemCheckState(e.Index, newCheckState);
     449      // Switch on event handler
     450      clb.ItemCheck += checkedVariableList_ItemCheck;
     451
     452      var itemChecked = newCheckState == CheckState.Checked;
     453      var item = checkedVariableList.Items[e.Index];
     454      var variable = (string)item;
    433455      var plot = partialDependencePlots[variable];
    434456      var chartsPanel = groupingPanels[variable];
    435457      var tl = partialDependencePlotTableLayout;
    436458
    437       tl.SuspendLayout();
    438       if (item.Checked) {
    439         tl.Controls.Add(chartsPanel);
    440         await plot.RecalculateAsync(false, false);
     459
     460      if (newCheckState == CheckState.Indeterminate) {
     461        tl.Controls.Remove(chartsPanel);
     462        if (!sharedIndependentVariables.DoubleVariables.Contains(variable)) {
     463          sharedIndependentVariables.AddVariable(variable, Content.ProblemData.Dataset.GetDoubleValues(variable, Content.ProblemData.TrainingIndices));
     464        }
    441465      } else {
    442         tl.Controls.Remove(chartsPanel);
     466        if (sharedIndependentVariables.DoubleVariables.Contains(variable))
     467          sharedIndependentVariables.RemoveVariable(variable);
    443468      }
    444 
    445       if (tl.Controls.Count > 0) {
    446         SetupYAxis();
    447         ReOrderControls();
    448         SetStyles();
    449       }
    450       tl.ResumeLayout();
    451       tl.Refresh();
    452       densityComboBox_SelectedIndexChanged(this, EventArgs.Empty);
     469      RecalculateAndRelayoutCharts();
    453470    }
    454471
    455472    private void automaticYAxisCheckBox_CheckedChanged(object sender, EventArgs e) {
  • Regression/RegressionSolutionPartialDependencePlotView.Designer.cs

     
    2424    /// </summary>
    2525    private void InitializeComponent() {
    2626      this.components = new System.ComponentModel.Container();
    27       this.variableListView = new System.Windows.Forms.ListView();
    2827      this.partialDependencePlotTableLayout = new System.Windows.Forms.TableLayoutPanel();
    2928      this.yAxisConfigGroupBox = new System.Windows.Forms.GroupBox();
    3029      this.limitView = new HeuristicLab.Problems.DataAnalysis.Views.DoubleLimitView();
    3130      this.automaticYAxisCheckBox = new System.Windows.Forms.CheckBox();
    3231      this.densityGroupBox = new System.Windows.Forms.GroupBox();
     32      this.columnsNumericUpDown = new System.Windows.Forms.NumericUpDown();
    3333      this.columnsLabel = new System.Windows.Forms.Label();
    3434      this.densityComboBox = new System.Windows.Forms.ComboBox();
    3535      this.label1 = new System.Windows.Forms.Label();
    3636      this.configSplitContainer = new System.Windows.Forms.SplitContainer();
    3737      this.variableGroupBox = new System.Windows.Forms.GroupBox();
     38      this.checkedVariableList = new System.Windows.Forms.CheckedListBox();
    3839      this.scrollPanel = new System.Windows.Forms.Panel();
    3940      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
    40       this.columnsNumericUpDown = new System.Windows.Forms.NumericUpDown();
    4141      this.yAxisConfigGroupBox.SuspendLayout();
    4242      this.densityGroupBox.SuspendLayout();
     43      ((System.ComponentModel.ISupportInitialize)(this.columnsNumericUpDown)).BeginInit();
    4344      ((System.ComponentModel.ISupportInitialize)(this.configSplitContainer)).BeginInit();
    4445      this.configSplitContainer.Panel1.SuspendLayout();
    4546      this.configSplitContainer.Panel2.SuspendLayout();
     
    4748      this.variableGroupBox.SuspendLayout();
    4849      this.scrollPanel.SuspendLayout();
    4950      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
    50       ((System.ComponentModel.ISupportInitialize)(this.columnsNumericUpDown)).BeginInit();
    5151      this.SuspendLayout();
    5252      //
    53       // variableListView
    54       //
    55       this.variableListView.CheckBoxes = true;
    56       this.variableListView.Dock = System.Windows.Forms.DockStyle.Fill;
    57       this.variableListView.Location = new System.Drawing.Point(3, 16);
    58       this.variableListView.Name = "variableListView";
    59       this.variableListView.Size = new System.Drawing.Size(163, 478);
    60       this.variableListView.TabIndex = 0;
    61       this.variableListView.UseCompatibleStateImageBehavior = false;
    62       this.variableListView.View = System.Windows.Forms.View.List;
    63       this.variableListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.variableListView_ItemChecked);
    64       //
    6553      // partialDependencePlotTableLayout
    6654      //
    6755      this.partialDependencePlotTableLayout.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
     
    126114      this.densityGroupBox.TabStop = false;
    127115      this.densityGroupBox.Text = "Settings";
    128116      //
     117      // columnsNumericUpDown
     118      //
     119      this.columnsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
     120            | System.Windows.Forms.AnchorStyles.Right)));
     121      this.columnsNumericUpDown.Location = new System.Drawing.Point(66, 46);
     122      this.columnsNumericUpDown.Minimum = new decimal(new int[] {
     123            1,
     124            0,
     125            0,
     126            0});
     127      this.columnsNumericUpDown.Name = "columnsNumericUpDown";
     128      this.columnsNumericUpDown.Size = new System.Drawing.Size(94, 20);
     129      this.columnsNumericUpDown.TabIndex = 1;
     130      this.columnsNumericUpDown.Value = new decimal(new int[] {
     131            4,
     132            0,
     133            0,
     134            0});
     135      this.columnsNumericUpDown.ValueChanged += new System.EventHandler(this.columnsNumericUpDown_ValueChanged);
     136      //
    129137      // columnsLabel
    130138      //
    131139      this.columnsLabel.AutoSize = true;
     
    184192      //
    185193      // variableGroupBox
    186194      //
    187       this.variableGroupBox.Controls.Add(this.variableListView);
     195      this.variableGroupBox.Controls.Add(this.checkedVariableList);
    188196      this.variableGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
    189197      this.variableGroupBox.Location = new System.Drawing.Point(0, 151);
    190198      this.variableGroupBox.Name = "variableGroupBox";
     
    193201      this.variableGroupBox.TabStop = false;
    194202      this.variableGroupBox.Text = "Variables";
    195203      //
     204      // checkedVariableList
     205      //
     206      this.checkedVariableList.CheckOnClick = true;
     207      this.checkedVariableList.Dock = System.Windows.Forms.DockStyle.Fill;
     208      this.checkedVariableList.FormattingEnabled = true;
     209      this.checkedVariableList.Location = new System.Drawing.Point(3, 16);
     210      this.checkedVariableList.Name = "checkedVariableList";
     211      this.checkedVariableList.Size = new System.Drawing.Size(163, 478);
     212      this.checkedVariableList.TabIndex = 0;
     213      //
    196214      // scrollPanel
    197215      //
    198216      this.scrollPanel.Controls.Add(this.partialDependencePlotTableLayout);
     
    207225      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
    208226      this.errorProvider.ContainerControl = this;
    209227      //
    210       // columnsNumericUpDown
    211       //
    212       this.columnsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    213             | System.Windows.Forms.AnchorStyles.Right)));
    214       this.columnsNumericUpDown.Location = new System.Drawing.Point(66, 46);
    215       this.columnsNumericUpDown.Minimum = new decimal(new int[] {
    216             1,
    217             0,
    218             0,
    219             0});
    220       this.columnsNumericUpDown.Name = "columnsNumericUpDown";
    221       this.columnsNumericUpDown.Size = new System.Drawing.Size(94, 20);
    222       this.columnsNumericUpDown.TabIndex = 1;
    223       this.columnsNumericUpDown.Value = new decimal(new int[] {
    224             4,
    225             0,
    226             0,
    227             0});
    228       this.columnsNumericUpDown.ValueChanged += new System.EventHandler(this.columnsNumericUpDown_ValueChanged);
    229       //
    230228      // RegressionSolutionPartialDependencePlotView
    231229      //
    232230      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
     
    238236      this.yAxisConfigGroupBox.PerformLayout();
    239237      this.densityGroupBox.ResumeLayout(false);
    240238      this.densityGroupBox.PerformLayout();
     239      ((System.ComponentModel.ISupportInitialize)(this.columnsNumericUpDown)).EndInit();
    241240      this.configSplitContainer.Panel1.ResumeLayout(false);
    242241      this.configSplitContainer.Panel2.ResumeLayout(false);
    243242      ((System.ComponentModel.ISupportInitialize)(this.configSplitContainer)).EndInit();
     
    246245      this.scrollPanel.ResumeLayout(false);
    247246      this.scrollPanel.PerformLayout();
    248247      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
    249       ((System.ComponentModel.ISupportInitialize)(this.columnsNumericUpDown)).EndInit();
    250248      this.ResumeLayout(false);
    251249
    252250    }
    253251
    254252    #endregion
    255 
    256     private System.Windows.Forms.ListView variableListView;
    257253    private System.Windows.Forms.TableLayoutPanel partialDependencePlotTableLayout;
    258254    private System.Windows.Forms.GroupBox yAxisConfigGroupBox;
    259255    private System.Windows.Forms.CheckBox automaticYAxisCheckBox;
     
    267263    private System.Windows.Forms.ErrorProvider errorProvider;
    268264    private System.Windows.Forms.Label label1;
    269265    private System.Windows.Forms.NumericUpDown columnsNumericUpDown;
     266    private System.Windows.Forms.CheckedListBox checkedVariableList;
    270267  }
    271268}