public void TestMethod()
        {
            var arr1 = new double[] { 10, 3, 18, -1, 20, 10, 3 }.ToList();
            var arr2 = new double[] { 15, 7, 0, 10, 25, 9 }.ToList();

            RankSelection rs = new RankSelection();
            var           fstSelectionNumber  = rs.AddSelection(arr1);
            var           scndSelectionNumber = rs.AddSelection(arr2);
        }
        public override double GetCoef()
        {
            var xRanged = new RankSelection();

            xRanged.AddSelection(x);

            var yRanged = new RankSelection();

            yRanged.AddSelection(y);

            double coef = 0;

            List <PointD> unionSeriaSortedByX =
                xRanged.ranks.Zip(yRanged.ranks.ToList(), (x, y) => new PointD(x, y)).OrderBy(p => p.X).ToList();

            List <double> rx = unionSeriaSortedByX.Select(p => p.X).ToList();
            List <double> ry = unionSeriaSortedByX.Select(p => p.Y).ToList();

            unionSeriaSortedByX.Select(p => p.X).ToList();
            double S = 0;

            for (int i = 0; i < N - 1; i++)
            {
                for (int j = i + 1; j < N; j++)
                {
                    if (rx[i] != rx[j])
                    {
                        S += ry[j].CompareTo(ry[i]);
                    }
                }
            }

            var C = xRanged.Ranks.Where(r => r.Count > 1).Sum(xr => xr.Count * (xr.Count - 1)) / 2;
            var D = yRanged.Ranks.Where(r => r.Count > 1).Sum(yr => yr.Count * (yr.Count - 1)) / 2;

            coef = S / Math.Sqrt((0.5 * N * (N - 1) - C) * (0.5 * N * (N - 1) - D));

            return(coef);
        }
Ejemplo n.º 3
0
        public override double GetCoef()
        {
            var xRanged = new RankSelection();

            xRanged.AddSelection(x);

            var yRanged = new RankSelection();

            yRanged.AddSelection(y);

            double coef      = 0;
            double rangedSum = 0;

            for (int i = 0; i < N; i++)
            {
                double xiRank = xRanged.Selection.Where(itm => itm.value == x[i]).First().rank;
                double yiRank = yRanged.Selection.Where(itm => itm.value == y[i]).First().rank;
                rangedSum += (xiRank - yiRank) * (xiRank - yiRank);
            }

            if (xRanged.Ranks.Where(r => r.Items.Count > 1).Count() == 0 &&
                yRanged.Ranks.Where(r => r.Items.Count > 1).Count() == 0)
            {
                coef = 1 - (6 * rangedSum) / (N * (N * N - 1));
            }
            else
            {
                var A = xRanged.Ranks.Where(r => r.Items.Count > 1).Sum(x => x.Count * x.Count * x.Count - x.Count) / 12;
                var B = yRanged.Ranks.Where(r => r.Items.Count > 1).Sum(y => y.Count * y.Count * y.Count - y.Count) / 12;

                double NsExp  = N * (N * N - 1) / 6;
                double top    = NsExp - rangedSum - A - B;
                double bottom = Math.Sqrt((NsExp - 2 * A) * (NsExp - 2 * B));

                coef = top / bottom;
            }

            return(coef);
        }