コード例 #1
0
        public void Calculate_FileWithDuplicates_ReturnsCorrectKendall()
        {
            // Create lists to feed into test
            IEnumerable <decimal> listA = new List <decimal>();
            IEnumerable <decimal> listB = new List <decimal>();

            for (int i = 1; i <= 10; i++)
            {
                listA = listA.Append(i);
                listB = listB.Append(11 - i);
            }

            // Add some duplicated numbers to the list
            listA = listA.Append(2);
            listB = listB.Append(5);

            listA = listA.Append(7);
            listB = listB.Append(3);

            listA = listA.Append(1);
            listB = listB.Append(11);

            listA = listA.Append(11);
            listB = listB.Append(6);

            // Calculate using CorrelationCalculator
            Correlations.Calculate("A", listA.ToList(), "B", listB.ToList());

            // Use Extreme.Statistics Kendall method to test result against
            double kendallActual = Stats.KendallTau(listA.ToList(), listB.ToList());

            // Check answer
            Assert.AreEqual(Math.Round(kendallActual, numberOfDpAccuracy), Math.Round((double)Correlations.kendall, numberOfDpAccuracy));
        }
コード例 #2
0
 Brush _SignificanceHighlighter(int i, int j, object o)
 {
     if (Correlations.IsSignificance((double)o))
     {
         return(Brushes.LightGreen);
     }
     return(Brushes.White);
 }
コード例 #3
0
            public Result AbsoluteResult()
            {
                var absCorr = Correlations.Select(Math.Abs).ToList();

                return(new Result()
                {
                    Correlations = absCorr.ToArray(),
                    MaxIndex = absCorr.IndexOf(absCorr.Max())
                });
            }
コード例 #4
0
        private async Task DoCalcCorrelations(object o)
        {
            Correlations.Clear();

            foreach (var sample in Samples)
            {
                Correlations.Add(new CorrelateVm(MainSample, sample));
            }

            await Task.WhenAll(Correlations.Select(c => c.CalculateCorrelationAsync()));
        }
コード例 #5
0
 public double[,] GetCoefficientsMatrix()
 {
     double[,] matrix = new double[Correlations.GetLength(0), Correlations.GetLength(1)];
     for (int i = 0; i < Correlations.GetLength(0); i++)
     {
         for (int j = 0; j < Correlations.GetLength(1); j++)
         {
             matrix[i, j] = Correlations[i, j].Coefficient;
         }
     }
     return(matrix);
 }
コード例 #6
0
 void LoadFile(string path)
 {
     Table = new Table(path);
     Table.Normalize();
     DescriptiveStatistics[] ds = new DescriptiveStatistics[Table.ColumnsCount];
     for (int i = 0; i < Table.ColumnsCount; i++)
     {
         ds[i] = new DescriptiveStatistics(Table.Headers[i], Table.ColumnsValues[i]);
     }
     DS = ds;
     ChiSquaredIntervalsCount = 5;
     Correlations             = new Correlations(Table, DS);
 }
コード例 #7
0
        public void Calculate_RandomFile_ReturnsCorrectKendall()
        {
            // Create random lists to feed into test
            IEnumerable <decimal> listA = CreateRandomList(numberOfDataPoints);
            IEnumerable <decimal> listB = CreateRandomList(numberOfDataPoints);

            // Use Extreme.Statistics Kendall method to test result against
            double kendallActual = Stats.KendallTau(listA.ToList(), listB.ToList());

            // Calculate using CorrelationCalculator
            Correlations.Calculate("A", listA.ToList(), "B", listB.ToList());

            // Check answer
            Assert.AreEqual(Math.Round(kendallActual, numberOfDpAccuracy), Math.Round((double)Correlations.kendall, numberOfDpAccuracy));
        }
コード例 #8
0
        Brush _MultipleCorrelationsHighlighter(int i, int j, object o)
        {
            double d = (double)o;
            double F = Correlations.MultipleCorrSignificance[j];

            if (i == 0 && Correlations.IsMultipleCoeffSignificance(F))
            {
                return(Brushes.LightGreen);
            }
            else if (i == 1 && d >= 0.8)
            {
                return(Brushes.LightGreen);
            }
            return(Brushes.White);
        }
コード例 #9
0
        public void Calculate_PerfectlyCorrelatedFile_ReturnsCorrectSpearman()
        {
            // Create lists to feed into test
            IEnumerable <decimal> listA = new List <decimal>();
            IEnumerable <decimal> listB = new List <decimal>();

            for (int i = 1; i <= 10; i++)
            {
                listA = listA.Append(i);
                listB = listB.Append(i);
            }

            // Calculate using CorrelationCalculator
            Correlations.Calculate("A", listA.ToList(), "B", listB.ToList());

            // Check answer
            Assert.AreEqual(1, Math.Round((double)Correlations.spearman, numberOfDpAccuracy));
        }
コード例 #10
0
        public void Calculate_RandomFile_ReturnsCorrectSpearman()
        {
            // Create random lists to feed into test
            IEnumerable <decimal> listA = CreateRandomList(numberOfDataPoints);
            IEnumerable <decimal> listB = CreateRandomList(numberOfDataPoints);

            double[] arrayA = listA.Select(dec => (double)dec).ToArray();
            double[] arrayB = listB.Select(dec => (double)dec).ToArray();

            // Use Extreme.Statistics RankCorrelation method to test result against
            double spearmanActual = Stats.RankCorrelation(arrayA, arrayB);

            // Calculate using CorrelationCalculator
            Correlations.Calculate("A", listA.ToList(), "B", listB.ToList());

            // Check answer
            Assert.AreEqual(Math.Round(spearmanActual, numberOfDpAccuracy), Math.Round((double)Correlations.spearman, numberOfDpAccuracy));
        }
コード例 #11
0
        public void AdjustToPositiveSemiDefinite()
        {
            int    iNum     = Correlations.GetLength(0);
            double minEigen = eigenvalues.Min();

            if (minEigen < 0)
            {
                for (int i = 0; i < iNum; i++)
                {
                    Correlations[i, i].Coefficient = Correlations[i, i].Coefficient - minEigen * 1.000000001;
                }
                for (int i = 0; i < iNum; i++)
                {
                    for (int j = 0; j < iNum; j++)
                    {
                        Correlations[i, j].Coefficient = Correlations[i, j].Coefficient / (1 - minEigen * 1.000000001);
                    }
                }
            }
        }
コード例 #12
0
    void Start()
    {
        KSpray      = GameObject.FindGameObjectWithTag("Spray").GetComponent <Spray>();
        Correlation = GameObject.FindGameObjectWithTag("Correlation").GetComponent <Correlations>();

        _particleCenter = KSpray.transform;
        _sprayMaterial  = KSpray.material;
        _color          = _sprayMaterial.color;

        //_emitter = GameObject.FindGameObjectWithTag("Emitter").transform;
        _rightHand  = GameObject.FindGameObjectWithTag("RightHand").transform;
        _leftHand   = GameObject.FindGameObjectWithTag("LeftHand").transform;
        _bodyCenter = GameObject.FindGameObjectWithTag("BodyCenter").transform;
        _rightFoot  = GameObject.FindGameObjectWithTag("RightFoot").transform;
        _leftFoot   = GameObject.FindGameObjectWithTag("LeftFoot").transform;


        _lastHandPos = Vector3.zero;

        //_particleCenter.position = _emitter.position;

        _tmpRightHandPos = transform.position;
    }
コード例 #13
0
        public static void Draw(Canvas canvas, Correlations correlations)
        {
            canvas.Children.Clear();

            double size = Math.Min(canvas.ActualWidth, canvas.ActualHeight);

            const double margin = 30.0;
            double       centX, centY;

            centX = centY = size / 2;
            double radius = size / 2 - margin;

            // круг
            GeometryGroup ggCircle = new GeometryGroup();

            ggCircle.Children.Add(new EllipseGeometry(new Point(centX, centY), radius, radius));

            // точки
            List <Point> points = new List <Point>();
            double       angle  = 2 * Math.PI / correlations.ParametersCount;

            for (int i = 0; i < correlations.ParametersCount; i++)
            {
                var point = new Point(radius * Math.Cos(angle * i) + centX,
                                      radius * Math.Sin(angle * i) + centY);
                points.Add(point);
                ggCircle.Children.Add(new EllipseGeometry(point, 2, 2));
            }

            // линии

            /*
             * GeometryGroup ggLinesStrong = new GeometryGroup();
             * GeometryGroup ggLinesCollinear = new GeometryGroup();
             * for (int i = 1; i < correlations.ParametersCount; i++)
             * {
             *  for (int j = 0; j < i; j++)
             *  {
             *      if (Math.Abs(correlations.CorrMatrix[i, j]) >= 0.7)
             *          ggLinesCollinear.Children.Add(new LineGeometry(points[i], points[j]));
             *      else if (Math.Abs(correlations.CorrMatrix[i, j]) >= 0.6)
             *          ggLinesStrong.Children.Add(new LineGeometry(points[i], points[j]));
             *  }
             * }
             */

            // метки
            for (int i = 0; i < correlations.ParametersCount; i++)
            {
                double x      = (radius + margin / 2) * Math.Cos(angle * i) + centX - margin * 0.3;
                double y      = (radius + margin / 2) * Math.Sin(angle * i) + centY - margin * 0.3;
                var    tbMark = new TextBlock();
                tbMark.Text = "X" + i;
                Canvas.SetLeft(tbMark, x);
                Canvas.SetTop(tbMark, y);
                canvas.Children.Add(tbMark);
            }

            var pathCircle = new Path()
            {
                Stroke = Brushes.Black,
                Data   = ggCircle
            };

            /*
             * var pathLinesStrong = new Path()
             * {
             *  Stroke = Brushes.LightGray,
             *  StrokeDashArray = new DoubleCollection(new[] { 4.0, 4.0 }),
             *  Data = ggLinesStrong
             * };
             * var pathLinesCollinear = new Path()
             * {
             *  Stroke = Brushes.LightGray,
             *  Data = ggLinesCollinear
             * };
             */
            canvas.Children.Add(pathCircle);
            canvas.Children.Add(GetLines(points, correlations.CorrMatrix, 0.4, 0.6));
            canvas.Children.Add(GetLines(points, correlations.CorrMatrix, 0.6, 0.9));
            canvas.Children.Add(GetLines(points, correlations.CorrMatrix, 0.9, 1.0));
        }