private void InitializeComponent(BivariateDataset ds, int width, int height) { this.Dataset = ds; this.Width = width; int sidebarWidth = (int)(this.Width * 0.3); MyPlotDataView view = new MyPlotDataView(); this.DisplayAbsoluteButton = new System.Windows.Forms.Button(); this.ControlGroupBox = new System.Windows.Forms.GroupBox(); this.DisplayAbsoluteButton = new System.Windows.Forms.Button(); this.DisplayRelativeButton = new System.Windows.Forms.Button(); this.DisplayAbsoluteButton.Click += new System.EventHandler(this.onDisplayAbsoluteButtonClick); this.DisplayRelativeButton.Click += new System.EventHandler(this.onDisplayRelativeButtonClick); this.DisplayDataSettings = new System.Windows.Forms.GroupBox(); this.DataTable = new System.Windows.Forms.ListView(); this.DataTable.View = View.Details; MyImportCSV ctr = new MyImportCSV(); var temp = ctr.DisplayData(0, 0, 600, 200, this.DisplayDataSettings, this.DataTable); // this.DisplayDataSettings.Anchor = ( // (System.Windows.Forms.AnchorStyles)( // (System.Windows.Forms.AnchorStyles.Top) | (System.Windows.Forms.AnchorStyles.Left) // )); MyButton b = new MyButton(); b.Init(DisplayDataSettings.Right, temp, 200, ControlGroupBox, DisplayRelativeButton, "Display Options", "Relative Values"); b.Add(ControlGroupBox, DisplayAbsoluteButton, "Absolute Values"); this.ControlGroupBox.Anchor = ( (System.Windows.Forms.AnchorStyles)( (System.Windows.Forms.AnchorStyles.Right) | (System.Windows.Forms.AnchorStyles.Bottom) )); this.ChartGroupBox1 = new System.Windows.Forms.GroupBox(); this.Chart1 = new System.Windows.Forms.PictureBox(); view.ChartView(DisplayDataSettings.Right, 0, 200, 200, this.ChartGroupBox1, this.Chart1); this.ChartGroupBox1.Anchor = ( (System.Windows.Forms.AnchorStyles)( (System.Windows.Forms.AnchorStyles.Right) | (System.Windows.Forms.AnchorStyles.Top) | (System.Windows.Forms.AnchorStyles.Bottom) )); this.ChartGroupBox2 = new System.Windows.Forms.GroupBox(); this.Chart2 = new System.Windows.Forms.PictureBox(); view.ChartView(15, DisplayDataSettings.Bottom, 600, 200, this.ChartGroupBox2, this.Chart2); this.ChartGroupBox2.Anchor = ( (System.Windows.Forms.AnchorStyles)( (System.Windows.Forms.AnchorStyles.Left) | (System.Windows.Forms.AnchorStyles.Bottom) | (System.Windows.Forms.AnchorStyles.Right) )); this.Height = height; DisplayDataSettings.Text = "Calculated Statistics"; this.Controls.Add(this.DisplayDataSettings); this.Controls.Add(this.ControlGroupBox); this.Controls.Add(this.ChartGroupBox1); this.Controls.Add(this.ChartGroupBox2); this.ClientSize = new System.Drawing.Size(this.Width, this.Height); this.Text = "Contigency Table"; InitializeListView(); }
public FormCT(BivariateDataset ds, int w, int h) { InitializeComponent(ds, w, h); }
public FormCT(BivariateDataset ds) { InitializeComponent(ds, 800, 400); }
//---------------------------------------------------------------------------------------------------// // // // private void draw() { InitializeGraphics(); int j = 0; var D1 = new Dictionary <Interval, FrequenciesForValues>(); var D2 = new Dictionary <Interval, FrequenciesForValues>(); double size = range / distN; double start = max; List <Interval> ListOfIntervals = new List <Interval>(); var ListOfRects = new List <Rectangle>(); //Interval Interval_0 = new Interval(start, size); // ListOfIntervals.Add(Interval_0); // D.Add(Interval_0, new FrequenciesForValues()); var bv = new BivariateDataset(); double t = 0; foreach (var kvp in myds.UnivariateDatasets) { var path = kvp.Value; double index = 0; foreach (var item in path.ANO) { double val = double.Parse(path.getObservationAt((int)index)); int X_device = Calc.Viewport(index, 0, n - 1, Viewport.Left, Viewport.Width); int Y_device = Calc.Viewport(val, min, range, Viewport.Bottom, -Viewport.Height); if (X_device > 0) { g.DrawLine(MyPen[j], prev_X[j], prev_Y[j], X_device, Y_device); } if (index == check) { bv.Add(D1, ListOfIntervals, start, size, (index / (double)n), val, m); } else if (index == n - 1) { bv.Add(D2, ListOfIntervals, start, size, (index / (double)n), val, m); } index += 1; prev_X[j] = X_device; prev_Y[j] = Y_device; } j++; } // foreach (var kvp in D1) { var rect = distToRect(kvp, Viewport.Left + (int)(Viewport.Width * check / (double)n)); g.FillRectangle(new SolidBrush(Color.FromArgb(200, 0, 0, 0)), rect); g.DrawRectangle(new Pen(Color.FromArgb(255, 255, 255)), rect); } double dist_index = 1; foreach (var kvp in D2) { var x_i = (kvp.Key.getMin() + (kvp.Key.getMax() - kvp.Key.getMin()) * 0.5); var val = kvp.Value.RelativeFrequency * x_i; variance += val * x_i; mean += val; //mean += (val - mean)/(double)dist_index; var rect = distToRect(kvp, Viewport.Right); g.FillRectangle(new SolidBrush(Color.FromArgb(200, 0, 0, 0)), rect); g.DrawRectangle(new Pen(Color.FromArgb(255, 255, 255)), rect); dist_index++; } variance = variance - (mean * mean); // g.DrawLine(Pens.Red, Viewport.Left, Calc.Viewport(mean, min, range, Viewport.Bottom, -Viewport.Height) , Viewport.Right, Calc.Viewport(mean, min, range, Viewport.Bottom, -Viewport.Height)); Statistics = new List <string>(); Statistics.Add(min.ToString()); Statistics.Add(max.ToString()); Statistics.Add(range.ToString()); Statistics.Add(mean.ToString()); Statistics.Add(variance.ToString()); InitializeListView(Statistics); Chart.Image = b; }
//---------------------------------------------------------------------------------------------------// // // // private void PopulateDatabase() { Database = new BivariateDataset(); int count = Dataset.GetVariableCount(SelectVarX.Text); HistoXRect = new List <Rectangle>(); HistoYRect = new List <Rectangle>(); // Min Database.Min = new Tuple <string, string>(Dataset.GetMinAsString(SelectVarX.Text), Dataset.GetMinAsString(SelectVarY.Text)); var item = this.DataTable.Items[0]; item.SubItems.Clear(); item.Text = LVStatistics[0]; item.SubItems.Add(Database.Min.Item1); item.SubItems.Add(Database.Min.Item2); // Max Database.Max = new Tuple <string, string>(Dataset.GetMaxAsString(SelectVarX.Text), Dataset.GetMaxAsString(SelectVarY.Text)); item = this.DataTable.Items[1]; item.SubItems.Clear(); item.Text = LVStatistics[1]; item.SubItems.Add(Database.Max.Item1); item.SubItems.Add(Database.Max.Item2); // Range Database.Range = new Tuple <string, string>(Dataset.GetRangeAsString(SelectVarX.Text), Dataset.GetRangeAsString(SelectVarY.Text)); item = this.DataTable.Items[2]; item.SubItems.Clear(); item.Text = LVStatistics[2]; item.SubItems.Add(Database.Range.Item1); item.SubItems.Add(Database.Range.Item2); // arithmetic mean Database.AM = new Tuple <string, string>(Dataset.GetAMAsString(SelectVarX.Text), Dataset.GetAMAsString(SelectVarY.Text)); item = this.DataTable.Items[3]; item.SubItems.Clear(); item.Text = LVStatistics[3]; item.SubItems.Add(Database.AM.Item1); item.SubItems.Add(Database.AM.Item2); // var tempX = Dataset.UnivariateDatasets[SelectVarX.Text]; // foreach(var x in X.ANO) // { // Values.Add(X.X_viewport(x, v_left, v_width)); // } // // var X = Dataset.getX(SelectVarX.Text, Scatterplot.Left, Scatterplot.Width); // var X = Dataset.getStringValues(SelectVarX.Text); // // var Y = Dataset.getY(SelectVarY.Text, Scatterplot.Bottom, Scatterplot.Height); // var Y = Dataset.getStringValues(SelectVarY.Text); var X = Dataset.UnivariateDatasets[SelectVarX.Text]; var Y = Dataset.UnivariateDatasets[SelectVarY.Text]; var Label = fetchLabels(); (double X, double Y)var_comp = (0, 0); double covar_comp = 0; // MedianX.Init(); // MedianY.Init(); ordX = new List <string>(); ordY = new List <string>(); // Points foreach (var i in Enumerable.Range(0, count)) { var point = new MyPoint(); point.rawX = X.ANO[i]; point.rawY = Y.ANO[i]; ordX.Add(point.rawX); ordY.Add(point.rawY); point.X = X.X_viewport(point.rawX, Scatterplot.Left, Scatterplot.Width); point.Y = Y.Y_viewport(point.rawY, Scatterplot.Bottom, Scatterplot.Height); point.Label = Label[i]; Database.DataPoints.Add(point); var_comp.X += Math.Pow(double.Parse(point.rawX), 2) / (double)count; var_comp.Y += Math.Pow(double.Parse(point.rawY), 2) / (double)count; covar_comp += double.Parse(point.rawX) * double.Parse(point.rawY) / (double)count; // Console.WriteLine("{0}, {1}", point.X, point.Y); } ordX = ordX.OrderBy(x => double.Parse(x)).ToList(); ordY = ordY.OrderBy(y => double.Parse(y)).ToList(); Database.Median = new Tuple <string, string>(ordX[ordX.Count / 2], ordY[ordY.Count / 2]); item = this.DataTable.Items[4]; item.SubItems.Clear(); item.Text = LVStatistics[4]; item.SubItems.Add(Database.Median.Item1); item.SubItems.Add(Database.Median.Item2); // var(x), var(y) Database.Var = new Tuple <string, string>( (var_comp.X - Math.Pow(double.Parse(Database.AM.Item1), 2)).ToString(), (var_comp.Y - Math.Pow(double.Parse(Database.AM.Item2), 2)).ToString() ); item = this.DataTable.Items[5]; item.SubItems.Clear(); item.Text = LVStatistics[5]; item.SubItems.Add(Database.Var.Item1); item.SubItems.Add(Database.Var.Item2); // covar Database.Cov = new Tuple <string, string>( (covar_comp - double.Parse(Database.AM.Item1) * double.Parse(Database.AM.Item2)).ToString(), (covar_comp - double.Parse(Database.AM.Item1) * double.Parse(Database.AM.Item2)).ToString() ); item = this.DataTable.Items[6]; item.SubItems.Clear(); item.Text = LVStatistics[6]; item.SubItems.Add(Database.Cov.Item1); item.SubItems.Add(Database.Cov.Item2); // -1 <= r <= 1 var sigma_x = Math.Pow(double.Parse(Database.Var.Item1), 0.5); var sigma_y = Math.Pow(double.Parse(Database.Var.Item2), 0.5); var sigma_xy = double.Parse(Database.Cov.Item1); var r = (sigma_xy / (sigma_x * sigma_y)).ToString(); item = this.DataTable.Items[7]; item.SubItems.Clear(); item.Text = LVStatistics[7]; item.SubItems.Add(r); item.SubItems.Add(r); // 0 <= R^2 <= 1 var R_2 = Math.Pow(double.Parse(r), 2).ToString(); item = this.DataTable.Items[8]; item.SubItems.Clear(); item.Text = LVStatistics[8]; item.SubItems.Add(R_2); item.SubItems.Add(R_2); // Regression Line X Database.RegrX = ( (sigma_xy * (double.Parse(Database.Min.Item2) - double.Parse(Database.AM.Item2)) / Math.Pow(sigma_y, 2) + double.Parse(Database.AM.Item1)).ToString(), Database.Min.Item2, (sigma_xy * (double.Parse(Database.Max.Item2) - double.Parse(Database.AM.Item2)) / Math.Pow(sigma_y, 2) + double.Parse(Database.AM.Item1)).ToString(), Database.Max.Item2 ); if ((double.Parse(Database.RegrX.x0) < double.Parse(Database.Min.Item1))) { Database.RegrX.x0 = Database.Min.Item1; Database.RegrX.y0 = ( double.Parse(Database.AM.Item2) + (double.Parse(Database.Min.Item1) - double.Parse(Database.AM.Item1)) * Math.Pow(sigma_y, 2) / sigma_xy ).ToString(); } else if ((double.Parse(Database.RegrX.x0) > double.Parse(Database.Max.Item1))) { Database.RegrX.x0 = Database.Max.Item1; Database.RegrX.y0 = ( double.Parse(Database.AM.Item2) + (double.Parse(Database.Max.Item1) - double.Parse(Database.AM.Item1)) * Math.Pow(sigma_y, 2) / sigma_xy ).ToString(); } if ((double.Parse(Database.RegrX.x1) < double.Parse(Database.Min.Item1))) { Database.RegrX.x1 = Database.Min.Item1; Database.RegrX.y1 = ( double.Parse(Database.AM.Item2) + (double.Parse(Database.Min.Item1) - double.Parse(Database.AM.Item1)) * Math.Pow(sigma_y, 2) / sigma_xy ).ToString(); } else if ((double.Parse(Database.RegrX.x1) > double.Parse(Database.Max.Item1))) { Database.RegrX.x1 = Database.Max.Item1; Database.RegrX.y1 = ( double.Parse(Database.AM.Item2) + (double.Parse(Database.Max.Item1) - double.Parse(Database.AM.Item1)) * Math.Pow(sigma_y, 2) / sigma_xy ).ToString(); } // Regression Line Y Database.RegrY = ( Database.Min.Item1, (sigma_xy * (double.Parse(Database.Min.Item1) - double.Parse(Database.AM.Item1)) / Math.Pow(sigma_x, 2) + double.Parse(Database.AM.Item2)).ToString(), Database.Max.Item1, (sigma_xy * (double.Parse(Database.Max.Item1) - double.Parse(Database.AM.Item1)) / Math.Pow(sigma_x, 2) + double.Parse(Database.AM.Item2)).ToString() ); if ((double.Parse(Database.RegrY.y0) < double.Parse(Database.Min.Item2))) { Database.RegrY.y0 = Database.Min.Item2; Database.RegrY.x0 = ( double.Parse(Database.AM.Item1) + (double.Parse(Database.Min.Item2) - double.Parse(Database.AM.Item2)) * Math.Pow(sigma_x, 2) / sigma_xy ).ToString(); } else if ((double.Parse(Database.RegrY.y0) > double.Parse(Database.Max.Item2))) { Database.RegrY.y0 = Database.Max.Item2; Database.RegrY.x0 = ( double.Parse(Database.AM.Item1) + (double.Parse(Database.Max.Item2) - double.Parse(Database.AM.Item2)) * Math.Pow(sigma_x, 2) / sigma_xy ).ToString(); } if ((double.Parse(Database.RegrY.y1) < double.Parse(Database.Min.Item2))) { Database.RegrY.y1 = Database.Min.Item2; Database.RegrY.x1 = ( double.Parse(Database.AM.Item1) + (double.Parse(Database.Min.Item2) - double.Parse(Database.AM.Item2)) * Math.Pow(sigma_x, 2) / sigma_xy ).ToString(); } else if ((double.Parse(Database.RegrY.y1) > double.Parse(Database.Max.Item2))) { Database.RegrY.y1 = Database.Max.Item2; Database.RegrY.x1 = ( double.Parse(Database.AM.Item1) + (double.Parse(Database.Max.Item2) - double.Parse(Database.AM.Item2)) * Math.Pow(sigma_x, 2) / sigma_xy ).ToString(); } int nx = (int)IntervalX.Value; if (nx == 0) { nx = 1; } int interval_x = (Scatterplot.Width / nx); int ny = (int)IntervalY.Value; if (ny == 0) { ny = 1; } int interval_y = (Scatterplot.Height / ny); int start1 = Scatterplot.Left; int start2 = Scatterplot.Bottom; Database.CalculateDistributions(start1, interval_x + 1, start2, interval_y + 1); }
//---------------------------------------------------------------------------------------------------// // // // private void PopulateUnivariateDatabase() { Database = new BivariateDataset(); var X = new UnivariateDataset <int>(); string variableName = (SelectVar.SelectedIndex < 0)? SelectVar.Items[0].ToString() :SelectVar.Text; int count = Dataset.GetVariableCount(variableName); HistoRect = new List <Rectangle>(); // Min X.Min = 1; Database.Min = new Tuple <string, string>(Dataset.GetMinAsString(variableName), X.Min.ToString()); var item = this.DataTable.Items[0]; item.SubItems.Clear(); item.Text = LVStatistics[0]; item.SubItems.Add(Database.Min.Item2); item.SubItems.Add(Database.Min.Item1); // Max X.Max = count; Database.Max = new Tuple <string, string>(Dataset.GetMaxAsString(variableName), X.Max.ToString()); item = this.DataTable.Items[1]; item.SubItems.Clear(); item.Text = LVStatistics[1]; item.SubItems.Add(Database.Max.Item2); item.SubItems.Add(Database.Max.Item1); // Range X.Range = X.Max - X.Min; Database.Range = new Tuple <string, string>(Dataset.GetRangeAsString(variableName), X.Range.ToString()); item = this.DataTable.Items[2]; item.SubItems.Clear(); item.Text = LVStatistics[2]; item.SubItems.Add(Database.Range.Item2); item.SubItems.Add(Database.Range.Item1); // arithmetic mean X.ArithmeticMean = count / 2; Tuple <string, string> tuple = new Tuple <string, string>(Dataset.GetAMAsString(variableName), X.ArithmeticMean.ToString()); Database.AM = tuple; item = this.DataTable.Items[3]; item.SubItems.Clear(); item.Text = LVStatistics[3]; item.SubItems.Add(Database.AM.Item2); item.SubItems.Add(Database.AM.Item1); var YR = Dataset.getY(variableName, Riemann.Bottom, Riemann.Height); // Points foreach (var i in Enumerable.Range(0, YR.Count)) { var point = new MyPoint(); point.X = X.X_viewport((i + 1).ToString(), Riemann.Left, Riemann.Width); point.Y = YR[i]; Database.DataPoints.Add(point); } int nx = (int)Interval.Value; if (nx == 0) { nx = 1; } int interval_x = (Riemann.Width / nx) + 1; int ny = (int)Interval.Value; if (ny == 0) { ny = 1; } int interval_y = (Lebesgue.Height / ny) + 1; int start1 = Riemann.Left; int start2 = Lebesgue.Top - Riemann.Top + 1; Database.CalculateDistributions(start1, interval_x, start2, interval_y); if (populated == false) { populated = true; } if (SelectVar.SelectedIndex < 0) { SelectVar.SelectedIndex = 0; } }