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