I want a distribution density curve that rises steeply from zero to its peak and then falls shallowly. At StatDist, a website where statistical distributions may be plotted online, I achieved this with a Gamma distribution, for example by specifying 2 for the shape (k on the website) and also 2 for the inverse scale / rate (theta on the website). The larger the inverse scale (theta), the shallower the declining slope after the peak.
Can I achieve the same with a Gamma distribution in MathNet.Numerics? If so, how? I've tried a few different ways. But I find that values after the peak always decline steeply to near zero. Varying the inverse scale merely makes the whole curve a bit smoother or more jagged in the following example, where I've specified a fixed number of samples
To see what I mean, run the code, varying the inverse scale. Then load the resulting CSV file into a spreadsheet and represent the data as a line graph.
using System.Collections.Generic;
using System.IO;
using MathNet.Numerics.Distributions;
using MathNet.Numerics.Statistics;
// [...]
// Put the path of the folder in which the CSV file is to be saved here
const string chartFolderPath = @"C:\Insert\folder\path\here";
const double shape = 2;
const double inverseScale = 2;
const int sampleCount = 10000;
const int bucketCount = 100;
var gamma = new Gamma(shape, inverseScale);
double[] samples = new double[sampleCount];
gamma.Samples(samples);
var histogram = new Histogram(samples, bucketCount);
var dictionary = new Dictionary<int, double>();
for (int i = 0; i < bucketCount; i++) {
dictionary.Add(i, histogram[i].Count);
}
string csvPath = Path.Combine(
chartFolderPath,
$"Gamma Densities, Shape {shape}, Inverse Scale {inverseScale}, " +
$"Samples {sampleCount}, Buckets {bucketCount}.csv");
using var writer = new StreamWriter(csvPath);
foreach ((int key, double value) in dictionary) {
writer.WriteLine($"{key},{value}");
}