public void Load(string dataType)
        {
            DataType = dataType;

            var regions = _regionService.GetRegionsByIndex();
            var filtSubs = _computeService.GetFilteredSubjectsByComputeGroup();

            var grp1 = filtSubs[ComputeGroup.GroupOne];
            var grp2 = filtSubs[ComputeGroup.GroupTwo];

            List<List<double>> vtxStrs1 = new List<List<double>>();
            List<List<double>> vtxStrs2 = new List<List<double>>();
            foreach (var r in regions)
            {
                vtxStrs1.Add(new List<double>());
                vtxStrs2.Add(new List<double>());
            }

            // Calc our global and vertex strengths for our groups
            List<double> grp1Vals = CalculateStrength(grp1, dataType, vtxStrs1);
            List<double> grp2Vals = CalculateStrength(grp2, dataType, vtxStrs2);

            // Sig test the verticies
            _rsvms = new List<RegionalStrengthViewModel>();

            for (int i = 0; i < regions.Count; i++)
            {
                var lst1 = vtxStrs1[i];
                var lst2 = vtxStrs2[i];

                double ybt = 0; double ylt = 0; double yrt = 0;
                alglib.studentttest2(lst1.ToArray(), lst1.Count, lst2.ToArray(), lst2.Count, out ybt, out ylt, out yrt);

                RegionalStrengthViewModel rsvm = new RegionalStrengthViewModel
                {
                    ROI = regions[i],
                    GroupDifference = lst1.Average() - lst2.Average(),
                    PValue = ybt,
                };

                _rsvms.Add(rsvm);
            }

            int idx = 1;
            bool begin = true;
            var sortedRsvms = _rsvms.OrderBy(r => r.PValue);
            foreach (var rsvm in sortedRsvms)
            {
                double dIdx = (double)idx;
                double dReg = (double)regions.Count;
                double qval = (dIdx / dReg) * 0.05;

                rsvm.SignificantLevel = qval;

                if (rsvm.PValue < qval && begin)
                    rsvm.Significant = true;
                else
                {
                    begin = false;
                    rsvm.Significant = false;
                }

                idx++;
            }

            AXPlotModel = LoadPlotModel(_rsvms, r => r.X, r => r.Y);
            SGPlotModel = LoadPlotModel(_rsvms, r => (100 - r.Y), r => r.Z);
            CRPlotModel = LoadPlotModel(_rsvms, r => r.X, r => r.Z);

            double bt = 0; double lt = 0; double rt = 0;
            alglib.mannwhitneyutest(grp1Vals.ToArray(), grp1Vals.Count, grp2Vals.ToArray(), grp2Vals.Count, out bt, out lt, out rt);

            double tbt = 0; double tlt = 0; double trt = 0;
            alglib.studentttest2(grp1Vals.ToArray(), grp1Vals.Count, grp2Vals.ToArray(), grp2Vals.Count, out tbt, out tlt, out trt);

            GrpDiff = (grp1Vals.Average() - grp2Vals.Average()).ToString("0.0000");
            PValue = "p" + tbt.ToString("0.0000") + " u" + bt.ToString("0.0000");

            var model = new PlotModel() { IsLegendVisible = false };
            model.PlotMargins = new OxyThickness(0, 0, 0, 0);

            model.Axes.Add(new CategoryAxis("", "Group 1", "Group 2"));
            model.Axes.Add(new LinearAxis(AxisPosition.Left) { MinimumPadding = 0.1, MaximumPadding = 0.1, IntervalLength = 20 });

            var s1 = new BoxPlotSeries
            {
                Title = "BoxPlotSeries",
                Fill = OxyColors.White,
                Stroke = OxyColors.DarkBlue,
                StrokeThickness = 2,
                OutlierSize = 2,
                BoxWidth = 0.4
            };

            s1.Items.Add(MakeBoxPlotItem(0, grp1Vals));
            s1.Items.Add(MakeBoxPlotItem(1, grp2Vals));

            model.Series.Add(s1);
            GlobalPlotModel = model;
        }
Exemple #2
0
        public void Load(string dataType)
        {
            DataType = dataType;

            var regions  = _regionService.GetRegionsByIndex();
            var filtSubs = _computeService.GetFilteredSubjectsByComputeGroup();

            var grp1 = filtSubs[ComputeGroup.GroupOne];
            var grp2 = filtSubs[ComputeGroup.GroupTwo];

            List <List <double> > vtxStrs1 = new List <List <double> >();
            List <List <double> > vtxStrs2 = new List <List <double> >();

            foreach (var r in regions)
            {
                vtxStrs1.Add(new List <double>());
                vtxStrs2.Add(new List <double>());
            }

            // Calc our global and vertex strengths for our groups
            List <double> grp1Vals = CalculateStrength(grp1, dataType, vtxStrs1);
            List <double> grp2Vals = CalculateStrength(grp2, dataType, vtxStrs2);

            // Sig test the verticies
            _rsvms = new List <RegionalStrengthViewModel>();

            for (int i = 0; i < regions.Count; i++)
            {
                var lst1 = vtxStrs1[i];
                var lst2 = vtxStrs2[i];

                double ybt = 0; double ylt = 0; double yrt = 0;
                alglib.studentttest2(lst1.ToArray(), lst1.Count, lst2.ToArray(), lst2.Count, out ybt, out ylt, out yrt);

                RegionalStrengthViewModel rsvm = new RegionalStrengthViewModel
                {
                    ROI             = regions[i],
                    GroupDifference = lst1.Average() - lst2.Average(),
                    PValue          = ybt,
                };

                _rsvms.Add(rsvm);
            }

            int  idx         = 1;
            bool begin       = true;
            var  sortedRsvms = _rsvms.OrderBy(r => r.PValue);

            foreach (var rsvm in sortedRsvms)
            {
                double dIdx = (double)idx;
                double dReg = (double)regions.Count;
                double qval = (dIdx / dReg) * 0.05;

                rsvm.SignificantLevel = qval;

                if (rsvm.PValue < qval && begin)
                {
                    rsvm.Significant = true;
                }
                else
                {
                    begin            = false;
                    rsvm.Significant = false;
                }

                idx++;
            }

            AXPlotModel = LoadPlotModel(_rsvms, r => r.X, r => r.Y);
            SGPlotModel = LoadPlotModel(_rsvms, r => (100 - r.Y), r => r.Z);
            CRPlotModel = LoadPlotModel(_rsvms, r => r.X, r => r.Z);

            double bt = 0; double lt = 0; double rt = 0;

            alglib.mannwhitneyutest(grp1Vals.ToArray(), grp1Vals.Count, grp2Vals.ToArray(), grp2Vals.Count, out bt, out lt, out rt);

            double tbt = 0; double tlt = 0; double trt = 0;

            alglib.studentttest2(grp1Vals.ToArray(), grp1Vals.Count, grp2Vals.ToArray(), grp2Vals.Count, out tbt, out tlt, out trt);

            GrpDiff = (grp1Vals.Average() - grp2Vals.Average()).ToString("0.0000");
            PValue  = "p" + tbt.ToString("0.0000") + " u" + bt.ToString("0.0000");

            var model = new PlotModel()
            {
                IsLegendVisible = false
            };

            model.PlotMargins = new OxyThickness(0, 0, 0, 0);

            model.Axes.Add(new CategoryAxis("", "Group 1", "Group 2"));
            model.Axes.Add(new LinearAxis(AxisPosition.Left)
            {
                MinimumPadding = 0.1, MaximumPadding = 0.1, IntervalLength = 20
            });

            var s1 = new BoxPlotSeries
            {
                Title           = "BoxPlotSeries",
                Fill            = OxyColors.White,
                Stroke          = OxyColors.DarkBlue,
                StrokeThickness = 2,
                OutlierSize     = 2,
                BoxWidth        = 0.4
            };

            s1.Items.Add(MakeBoxPlotItem(0, grp1Vals));
            s1.Items.Add(MakeBoxPlotItem(1, grp2Vals));

            model.Series.Add(s1);
            GlobalPlotModel = model;
        }