public decimal ComputeProbabilityAboveX(InputGraphSelection selection, decimal x) { decimal location = FindDistributionLocation(selection.Median, selection.Dispersion, selection.Skew); SkewNormalDistribution distribution = MakeSkewNormalDistribution( location, selection.Median, selection.Dispersion, selection.Skew); decimal max = location * 100m; return((decimal)(distribution.DistributionFunction((double)max) - distribution.DistributionFunction((double)x))); }
public void ConstructorTest1() { // Create a Skew normal distribution with location 2, scale 3 and shape 4.2 var skewNormal = new SkewNormalDistribution(location: 2, scale: 3, shape: 4.2); double mean = skewNormal.Mean; // 4.3285611780515953 double median = skewNormal.Median; // 4.0230040653062265 double var = skewNormal.Variance; // 3.5778028400709641 double mode = skewNormal.Mode; // 3.220622226764422 double cdf = skewNormal.DistributionFunction(x: 1.4); // 0.020166854942526125 double pdf = skewNormal.ProbabilityDensityFunction(x: 1.4); // 0.052257431834162059 double lpdf = skewNormal.LogProbabilityDensityFunction(x: 1.4); // -2.9515731621912877 double ccdf = skewNormal.ComplementaryDistributionFunction(x: 1.4); // 0.97983314505747388 double icdf = skewNormal.InverseDistributionFunction(p: cdf); // 1.3999998597203041 double hf = skewNormal.HazardFunction(x: 1.4); // 0.053332990517581239 double chf = skewNormal.CumulativeHazardFunction(x: 1.4); // 0.020372981958858238 string str = skewNormal.ToString(CultureInfo.InvariantCulture); // Sn(x; ξ = 2, ω = 3, α = 4.2) Assert.AreEqual(4.3285611780515953, mean); Assert.AreEqual(4.0230040653062265, median); Assert.AreEqual(3.2206222267273086, mode); Assert.AreEqual(3.5778028400709641, var); Assert.AreEqual(0.020372981958858238, chf); Assert.AreEqual(0.020166854942526125, cdf); Assert.AreEqual(0.052257431834161927, pdf); Assert.AreEqual(-2.9515731621912908, lpdf); Assert.AreEqual(0.053332990517581107, hf); Assert.AreEqual(0.97983314505747388, ccdf); Assert.AreEqual(1.3999998597203041, icdf); Assert.AreEqual("Sn(x; ξ = 2, ω = 3, α = 4.2)", str); }
public PreparedDataPoints GenerateDataPoints(decimal median, decimal dispersion, decimal skew, decimal?maxXValue) { decimal maxGraph = median * maxGraphXAxisTimesMedian; if (maxXValue.HasValue && maxXValue.Value < maxGraph) { maxGraph = maxXValue.Value; } decimal location = FindDistributionLocation(median, dispersion, skew); SkewNormalDistribution distribution = MakeSkewNormalDistribution( location, median, dispersion, skew); int numIntervals; int step = FindGraphPercentageIntervals(median, maxGraph, out numIntervals); string[] labels = new string[numIntervals]; List <decimal?> decimals = new List <decimal?>(numIntervals); int startInterval = 0; // Make sure not to include distribution data at negative x offset. // This is due to normal distribution not appropriate in all cases decimal xValue = startInterval * step; decimal lastValue = (decimal)distribution.DistributionFunction((double)xValue); for (int i = startInterval; i < numIntervals; ++i) { decimal computeXValue = xValue + step / 2m; labels[i] = "" + xValue; decimal distValue = (decimal)distribution.DistributionFunction((double)computeXValue); xValue += step; decimal fractionOfX = 1 / (decimal)numIntervals; // ?? sometimes occurs, but not significant decimal diff; if (distValue <= lastValue) { diff = 0; } else { diff = distValue - lastValue; lastValue = distValue; } decimals.Add(diff / fractionOfX); } DataSet dataSet = new DataSet(null, Color.Green, decimals); return(new PreparedDataPoints(labels, new DataSet[] { dataSet })); }