public void learn_test()
{
// http://www.ats.ucla.edu/stat/stata/dae/mlogit.htm
CsvReader reader = CsvReader.FromText(Properties.Resources.hsbdemo, hasHeaders: true);
var table = reader.ToTable();
var codification = new Codification(table);
codification["ses"].VariableType = CodificationVariable.CategoricalWithBaseline;
codification["prog"].VariableType = CodificationVariable.Categorical;
codification["prog"].Remap("academic", 0);
var inputs = codification.Apply(table, "ses", "write");
var output = codification.Apply(table, "prog");
// Get inputs
string[] inputNames;
var inputsData = inputs.ToArray(out inputNames);
// Get outputs
string[] outputNames;
var outputData = output.ToArray(out outputNames);
var analysis = new MultinomialLogisticRegressionAnalysis(inputNames, outputNames);
var regression = analysis.Learn(inputsData, outputData);
Assert.AreEqual(9, analysis.Coefficients.Count);
int i = 0;
Assert.AreEqual("(baseline)", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: academic", analysis.Coefficients[i].Class);
Assert.AreEqual(0, analysis.Coefficients[i].Value);
i++;
Assert.AreEqual("Intercept", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: general", analysis.Coefficients[i].Class);
Assert.AreEqual(1.0302662690579185, analysis.Coefficients[i].Value, 1e-5);
i++;
Assert.AreEqual("write", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: general", analysis.Coefficients[i].Class);
Assert.AreEqual(-0.083689163424126883, analysis.Coefficients[i].Value, 1e-6);
i++;
Assert.AreEqual("ses: middle", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: general", analysis.Coefficients[i].Class);
Assert.AreEqual(-0.58217998138556049, analysis.Coefficients[i].Value, 1e-5);
i++;
Assert.AreEqual("ses: high", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: general", analysis.Coefficients[i].Class);
Assert.AreEqual(-1.1112048569892283, analysis.Coefficients[i].Value, 1e-4);
i++;
Assert.AreEqual("Intercept", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
Assert.AreEqual(1.2715455854613191, analysis.Coefficients[i].Value, 1e-4);
i++;
Assert.AreEqual("write", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
Assert.AreEqual(-0.13231057837059781, analysis.Coefficients[i].Value, 1e-5);
i++;
Assert.AreEqual("ses: middle", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
Assert.AreEqual(0.20451187629162043, analysis.Coefficients[i].Value, 1e-4);
i++;
Assert.AreEqual("ses: high", analysis.Coefficients[i].Name);
Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
Assert.AreEqual(-0.93207938490449849, analysis.Coefficients[i].Value, 1e-4);
}