예제 #1
0
        //---------------------------------------------------------------------------------------------------//
        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);
        }
예제 #2
0
        //---------------------------------------------------------------------------------------------------//

        //
        //
        //
        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);
        }
예제 #3
0
        //---------------------------------------------------------------------------------------------------//

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