//---------------------------------------------------------------------------------------------------// private void PopulateDistributions() { foreach (var point in Dataset.DataPoints) { point.X = (int)(HistoX.Left + HistoX.Width * (double.Parse(point.rawX) - double.Parse(Dataset.Min.Item1)) / double.Parse(Dataset.Range.Item1)); point.Y = (int)(HistoY.Bottom - HistoY.Height * (double.Parse(point.rawY) - double.Parse(Dataset.Min.Item2)) / double.Parse(Dataset.Range.Item2)); // point.X = X.X_viewport(point.rawX, Scatterplot.Left, Scatterplot.Width); // point.Y = Y.Y_viewport(point.rawY, Scatterplot.Bottom, Scatterplot.Height); // Dataset.DataPoints.Add(point); } int nx = Dataset.Distribution.Item1.Count; int ny = Dataset.Distribution.Item2.Count; Dataset.CalculateDistributions(HistoX.Left, HistoX.Width / nx + 1, HistoY.Top, HistoY.Height / ny + 1); }
//---------------------------------------------------------------------------------------------------// // // // 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; } }