Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
 public FormCT(BivariateDataset ds, int w, int h)
 {
     InitializeComponent(ds, w, h);
 }
Exemplo n.º 3
0
 public FormCT(BivariateDataset ds)
 {
     InitializeComponent(ds, 800, 400);
 }
Exemplo n.º 4
0
        //---------------------------------------------------------------------------------------------------//
        //
        //
        //
        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;
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
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;
            }
        }