public static PlotModel BoxPlot() { const int boxes = 10; var model = new PlotModel(string.Format("BoxPlot (n={0})", boxes)) { LegendPlacement = LegendPlacement.Outside }; var s1 = new BoxPlotSeries { Title = "BoxPlotSeries", BoxWidth = 0.3 }; var random = new Random(); for (var i = 0; i < boxes; i++) { double x = i; var points = 5 + random.Next(15); var values = new List<double>(); for (var j = 0; j < points; j++) { values.Add(random.Next(0, 20)); } values.Sort(); var median = GetMedian(values); int r = values.Count % 2; double firstQuartil = GetMedian(values.Take((values.Count + r) / 2)); double thirdQuartil = GetMedian(values.Skip((values.Count - r) / 2)); var iqr = thirdQuartil - firstQuartil; var step = iqr * 1.5; var upperWhisker = thirdQuartil + step; upperWhisker = values.Where(v => v <= upperWhisker).Max(); var lowerWhisker = firstQuartil - step; lowerWhisker = values.Where(v => v >= lowerWhisker).Min(); var outliers = values.Where(v => v > upperWhisker || v < lowerWhisker).ToList(); s1.Items.Add(new BoxPlotItem(x, lowerWhisker, firstQuartil, median, thirdQuartil, upperWhisker, outliers)); } model.Series.Add(s1); model.Axes.Add(new LinearAxis(AxisPosition.Left)); model.Axes.Add(new LinearAxis(AxisPosition.Bottom) { MinimumPadding = 0.1, MaximumPadding = 0.1 }); return model; }
public static PlotModel MichelsonMorleyExperiment() { //// http://www.gutenberg.org/files/11753/11753-h/11753-h.htm //// http://en.wikipedia.org/wiki/Michelson%E2%80%93Morley_experiment //// http://stat.ethz.ch/R-manual/R-devel/library/datasets/html/morley.html var model = new PlotModel(); var s1 = new BoxPlotSeries { Title = "Results", Stroke = OxyColors.Black, StrokeThickness = 1, OutlierSize = 2, BoxWidth = 0.4 }; // note: approximated data values (not the original values) s1.Items.Add(new BoxPlotItem(0, 740, 850, 945, 980, 1070, new[] { 650.0 })); s1.Items.Add(new BoxPlotItem(1, 750, 805, 845, 890, 970, new double[] { })); s1.Items.Add(new BoxPlotItem(2, 845, 847, 855, 880, 910, new[] { 640.0, 950, 970 })); s1.Items.Add(new BoxPlotItem(3, 720, 760, 820, 870, 910, new double[] { })); s1.Items.Add(new BoxPlotItem(4, 730, 805, 807, 870, 950, new double[] { })); model.Series.Add(s1); model.Annotations.Add(new LineAnnotation { Type = LineAnnotationType.Horizontal, LineStyle = LineStyle.Solid, Y = 792.458, Text = "true speed" }); model.Axes.Add(new CategoryAxis("Experiment No.", "1", "2", "3", "4", "5")); model.Axes.Add(new LinearAxis(AxisPosition.Left, "Speed of light (km/s minus 299,000)") { MajorStep = 100, MinorStep = 100 }); return model; }
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; }