示例#1
0
        /// <summary>
        ///   Creates a Multinomial Logistic Regression Analysis.
        /// </summary>
        ///
        private void btnCreate_Click(object sender, EventArgs e)
        {
            if (dgvLearningSource.DataSource == null)
            {
                MessageBox.Show("Please load some data first.");
                return;
            }

            // Finishes and save any pending changes to the given data
            dgvLearningSource.EndEdit();

            // Creates a matrix from the entire source data table
            double[,] table = (dgvLearningSource.DataSource as DataTable).ToMatrix(out columnNames);

            // Get only the input vector values (first two columns)
            double[][] inputs = table.GetColumns(new int[] { 0, 1 }).ToArray();

            // Get only the output labels (last column)
            int[] outputs = table.GetColumn(2).Subtract(1).ToInt32();



            // Create and compute a new Simple Descriptive Analysis
            var sda = new DescriptiveAnalysis(table, columnNames);

            sda.Compute();

            // Show the descriptive analysis on the screen
            dgvDistributionMeasures.DataSource = sda.Measures;



            // Creates the Support Vector Machine for 2 input variables
            mlr = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            try
            {
                // Run
                mlr.Compute();

                lbStatus.Text = "Analysis complete!";
            }
            catch (ConvergenceException)
            {
                lbStatus.Text = "Convergence could not be attained. " +
                                "The learned machine might still be usable.";
            }


            createSurface(table);

            // Populate details about the fitted model
            tbChiSquare.Text     = mlr.ChiSquare.Statistic.ToString("N5");
            tbPValue.Text        = mlr.ChiSquare.PValue.ToString("N5");
            checkBox1.Checked    = mlr.ChiSquare.Significant;
            tbDeviance.Text      = mlr.Deviance.ToString("N5");
            tbLogLikelihood.Text = mlr.LogLikelihood.ToString("N5");

            dgvCoefficients.DataSource = mlr.Coefficients;
        }
        public void CoefficientsTest1()
        {
            double[][] inputs;
            int[]      outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample2(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount = 5;
            int coeffCount = inputCount + 1;

            var mlr = analysis.regression;

            analysis.Iterations = 100;
            analysis.Tolerance  = 1e-6;

            analysis.Compute();

            foreach (var coefficient in analysis.Coefficients)
            {
                Assert.IsNotNull(coefficient.Analysis);
                Assert.IsNotNull(coefficient.Confidence);
                Assert.IsNotNull(coefficient.ConfidenceLower);
                Assert.IsNotNull(coefficient.ConfidenceUpper);
                Assert.IsNotNull(coefficient.Name);
                Assert.IsNotNull(coefficient.Class);
                Assert.IsNotNull(coefficient.StandardError);
                Assert.IsNotNull(coefficient.Value);
            }


            Assert.AreEqual(13, analysis.Coefficients.Count);
            Assert.AreEqual(2, analysis.CoefficientValues.Length);

            var class1 = analysis.CoefficientValues[0];

            Assert.AreEqual(-11.774547061739975, class1[0], 1e-10);
            Assert.AreEqual(0.523813075806107, class1[1], 1e-10);
            Assert.AreEqual(0.36820307277024716, class1[2], 1e-10);
            Assert.AreEqual(0, class1[3], 1e-6);
            Assert.AreEqual(0, class1[4], 1e-6);
            Assert.AreEqual(0, class1[5], 1e-6);

            var class2 = analysis.CoefficientValues[1];

            Assert.AreEqual(-22.721272157115514, class2[0], 1e-10);
            Assert.AreEqual(0.46593949381162203, class2[1], 1e-10);
            Assert.AreEqual(0.68590438098052586, class2[2], 1e-10);
            Assert.AreEqual(0, class2[3], 1e-6);
            Assert.AreEqual(0, class2[4], 1e-6);
            Assert.AreEqual(0, class2[5], 1e-6);
        }
        public void AnalyzeExample1()
        {
            // Note: results perfectly match the example at
            // https://web.archive.org/web/20170210050820/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["write"].VariableType = CodificationVariable.Continuous;
            codification["ses"].Remap("low", 0);
            codification["ses"].Remap("middle", 1);
            codification["prog"].Remap("academic", 0);
            codification["prog"].Remap("general", 1);

            var inputs = codification.Apply(table, "write", "ses");
            var output = codification.Apply(table, "prog");


            // Get inputs
            string[] inputNames;
            var      inputsData = inputs.ToJagged(out inputNames);

            // Get outputs
            string[] outputNames;
            var      outputData = output.ToJagged(out outputNames);


            var analysis = new MultinomialLogisticRegressionAnalysis(inputsData, outputData, inputNames, outputNames);

            analysis.Compute();

            testmlr(analysis);
        }
        public void AnalyzeExample1()
        {
            // 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(inputsData, outputData, inputNames, outputNames);

            analysis.Compute();

            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);

            i++;
            Assert.AreEqual("write", analysis.Coefficients[i].Name);
            Assert.AreEqual("prog: general", analysis.Coefficients[i].Class);
            Assert.AreEqual(-0.083689163424126883, analysis.Coefficients[i].Value);

            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);

            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);

            i++;
            Assert.AreEqual("Intercept", analysis.Coefficients[i].Name);
            Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
            Assert.AreEqual(1.2715455854613191, analysis.Coefficients[i].Value);

            i++;
            Assert.AreEqual("write", analysis.Coefficients[i].Name);
            Assert.AreEqual("prog: vocation", analysis.Coefficients[i].Class);
            Assert.AreEqual(-0.13231057837059781, analysis.Coefficients[i].Value);

            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);

            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);
        }
        public void CoefficientsTest1()
        {
            double[][] inputs;
            int[] outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample2(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount = 5;
            int coeffCount = inputCount + 1;

            var mlr = analysis.regression;

            analysis.Iterations = 100;
            analysis.Tolerance = 1e-6;

            analysis.Compute();

            foreach (var coefficient in analysis.Coefficients)
            {
                Assert.IsNotNull(coefficient.Analysis);
                Assert.IsNotNull(coefficient.Confidence);
                Assert.IsNotNull(coefficient.ConfidenceLower);
                Assert.IsNotNull(coefficient.ConfidenceUpper);
                Assert.IsNotNull(coefficient.Name);
                Assert.IsNotNull(coefficient.Class);
                Assert.IsNotNull(coefficient.StandardError);
                Assert.IsNotNull(coefficient.Value);
            }


            Assert.AreEqual(13, analysis.Coefficients.Count);
            Assert.AreEqual(2, analysis.CoefficientValues.Length);
            
            var class1 = analysis.CoefficientValues[0];
            Assert.AreEqual(-11.774547061739975, class1[0]);
            Assert.AreEqual(0.523813075806107, class1[1]);
            Assert.AreEqual(0.36820307277024716, class1[2]);
            Assert.AreEqual(0, class1[3], 1e-6);
            Assert.AreEqual(0, class1[4], 1e-6);
            Assert.AreEqual(0, class1[5], 1e-6);

            var class2 = analysis.CoefficientValues[1];
            Assert.AreEqual(-22.721272157115514, class2[0]);
            Assert.AreEqual(0.46593949381162203, class2[1]);
            Assert.AreEqual(0.68590438098052586, class2[2]);
            Assert.AreEqual(0, class2[3], 1e-6);
            Assert.AreEqual(0, class2[4], 1e-6);
            Assert.AreEqual(0, class2[5], 1e-6);
        }
        public void ComputeTest2()
        {
            double[][] inputs;
            int[] outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample2(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount = 5;
            int outputCount = 3;
            int coeffCount = inputCount + 1;

            var mlr = analysis.regression;
            Assert.AreEqual(inputCount, mlr.Inputs);
            Assert.AreEqual(outputCount, mlr.Categories);

            Assert.AreEqual(inputCount, analysis.Inputs.Length);
            Assert.AreEqual(outputCount, analysis.OutputNames.Length);

            analysis.Iterations = 100;
            analysis.Tolerance = 1e-6;

            analysis.Compute();

            Assert.AreEqual(outputCount - 1, analysis.CoefficientValues.Length);
            Assert.AreEqual(outputCount - 1, analysis.StandardErrors.Length);

            Assert.AreEqual(outputCount - 1, analysis.WaldTests.Length);
            Assert.AreEqual(outputCount - 1, analysis.Confidences.Length);

            for (int i = 0; i < analysis.CoefficientValues.Length; i++)
            {
                Assert.AreEqual(coeffCount, analysis.CoefficientValues[i].Length);
                Assert.AreEqual(coeffCount, analysis.StandardErrors[i].Length);

                Assert.AreEqual(coeffCount, analysis.WaldTests[i].Length);
                Assert.AreEqual(coeffCount, analysis.Confidences[i].Length);

                for (int j = 0; j < analysis.CoefficientValues[i].Length; j++)
                {
                    Assert.IsFalse(double.IsNaN(analysis.CoefficientValues[i][j]));
                    Assert.IsFalse(double.IsNaN(analysis.StandardErrors[i][j]));
                }
            }

            var coefficients = analysis.CoefficientValues;

            // brand 2
            Assert.AreEqual(-11.774655, coefficients[0][0], 1e-3); // intercept
            Assert.AreEqual(0.523814, coefficients[0][1], 1e-3); // female
            Assert.AreEqual(0.368206, coefficients[0][2], 1e-3); // age

            // brand 3
            Assert.AreEqual(-22.721396, coefficients[1][0], 1e-3); // intercept
            Assert.AreEqual(0.465941, coefficients[1][1], 1e-3); // female
            Assert.AreEqual(0.685908, coefficients[1][2], 1e-3); // age

            var standard = analysis.StandardErrors;

            Assert.AreEqual(-702.97, analysis.LogLikelihood, 1e-2);
            Assert.AreEqual(185.85, analysis.ChiSquare.Statistic, 1e-2);
            Assert.AreEqual(1405.9414080469473, analysis.Deviance, 1e-5);
        }
        public void ComputeTest1()
        {
            double[][] inputs;
            int[] outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample1(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount = 2;
            int outputCount = 3;
            int coeffCount = inputCount + 1;

            var mlr = analysis.regression;
            Assert.AreEqual(inputCount, mlr.Inputs);
            Assert.AreEqual(outputCount, mlr.Categories);

            Assert.AreEqual(inputCount, analysis.Inputs.Length);
            Assert.AreEqual(outputCount, analysis.OutputNames.Length);

            analysis.Iterations = 100;
            analysis.Tolerance = 1e-6;

            analysis.Compute();

            Assert.AreEqual(outputCount - 1, analysis.CoefficientValues.Length);
            Assert.AreEqual(outputCount - 1, analysis.StandardErrors.Length);

            Assert.AreEqual(outputCount - 1, analysis.WaldTests.Length);
            Assert.AreEqual(outputCount - 1, analysis.Confidences.Length);

            for (int i = 0; i < analysis.CoefficientValues.Length; i++)
            {
                Assert.AreEqual(coeffCount, analysis.CoefficientValues[i].Length);
                Assert.AreEqual(coeffCount, analysis.StandardErrors[i].Length);

                Assert.AreEqual(coeffCount, analysis.WaldTests[i].Length);
                Assert.AreEqual(coeffCount, analysis.Confidences[i].Length);

                for (int j = 0; j < analysis.CoefficientValues[i].Length; j++)
                {
                    Assert.IsFalse(double.IsNaN(analysis.CoefficientValues[i][j]));
                    Assert.IsFalse(double.IsNaN(analysis.StandardErrors[i][j]));
                }
            }

            var coefficients = analysis.CoefficientValues;

            // brand 2
            Assert.AreEqual(-11.774655, coefficients[0][0], 1e-4); // intercept
            Assert.AreEqual(0.523814, coefficients[0][1], 1e-4); // female
            Assert.AreEqual(0.368206, coefficients[0][2], 1e-4); // age

            // brand 3
            Assert.AreEqual(-22.721396, coefficients[1][0], 1e-4); // intercept
            Assert.AreEqual(0.465941, coefficients[1][1], 1e-4); // female
            Assert.AreEqual(0.685908, coefficients[1][2], 1e-4); // age

            var standard = analysis.StandardErrors;

            // Using the lower-bound approximation
            Assert.AreEqual(1.047378039787443, standard[0][0], 1e-6);
            Assert.AreEqual(0.153150051082552, standard[0][1], 1e-6);
            Assert.AreEqual(0.031640507386863, standard[0][2], 1e-6);

            Assert.AreEqual(1.047378039787443, standard[1][0], 1e-6);
            Assert.AreEqual(0.153150051082552, standard[1][1], 1e-6);
            Assert.AreEqual(0.031640507386863, standard[1][2], 1e-6);

            Assert.AreEqual(-702.97, analysis.LogLikelihood, 1e-2);
            Assert.AreEqual(185.85, analysis.ChiSquare.Statistic, 1e-2);
            Assert.AreEqual(1405.9414080469473, analysis.Deviance, 1e-10);

            var wald = analysis.WaldTests;
            Assert.AreEqual(-11.241995503283842, wald[0][0].Statistic, 1e-4);
            Assert.AreEqual(3.4202662152119889, wald[0][1].Statistic, 1e-4);
            Assert.AreEqual(11.637150673342207, wald[0][2].Statistic, 1e-4);

            Assert.AreEqual(-21.693553825772664, wald[1][0].Statistic, 1e-4);
            Assert.AreEqual(3.0423802097069097, wald[1][1].Statistic, 1e-4);
            Assert.AreEqual(21.678124991086548, wald[1][2].Statistic, 1e-4);
        }
        public void ComputeTest2()
        {
            double[][] inputs;
            int[]      outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample2(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount  = 5;
            int outputCount = 3;
            int coeffCount  = inputCount + 1;

            var mlr = analysis.regression;

            Assert.AreEqual(inputCount, mlr.Inputs);
            Assert.AreEqual(outputCount, mlr.Categories);

            Assert.AreEqual(inputCount, analysis.Inputs.Length);
            Assert.AreEqual(outputCount, analysis.OutputNames.Length);

            analysis.Iterations = 100;
            analysis.Tolerance  = 1e-6;

            analysis.Compute();

            Assert.AreEqual(outputCount - 1, analysis.CoefficientValues.Length);
            Assert.AreEqual(outputCount - 1, analysis.StandardErrors.Length);

            Assert.AreEqual(outputCount - 1, analysis.WaldTests.Length);
            Assert.AreEqual(outputCount - 1, analysis.Confidences.Length);

            for (int i = 0; i < analysis.CoefficientValues.Length; i++)
            {
                Assert.AreEqual(coeffCount, analysis.CoefficientValues[i].Length);
                Assert.AreEqual(coeffCount, analysis.StandardErrors[i].Length);

                Assert.AreEqual(coeffCount, analysis.WaldTests[i].Length);
                Assert.AreEqual(coeffCount, analysis.Confidences[i].Length);

                for (int j = 0; j < analysis.CoefficientValues[i].Length; j++)
                {
                    Assert.IsFalse(double.IsNaN(analysis.CoefficientValues[i][j]));
                    Assert.IsFalse(double.IsNaN(analysis.StandardErrors[i][j]));
                }
            }

            var coefficients = analysis.CoefficientValues;

            // brand 2
            Assert.AreEqual(-11.774655, coefficients[0][0], 1e-3); // intercept
            Assert.AreEqual(0.523814, coefficients[0][1], 1e-3);   // female
            Assert.AreEqual(0.368206, coefficients[0][2], 1e-3);   // age

            // brand 3
            Assert.AreEqual(-22.721396, coefficients[1][0], 1e-3); // intercept
            Assert.AreEqual(0.465941, coefficients[1][1], 1e-3);   // female
            Assert.AreEqual(0.685908, coefficients[1][2], 1e-3);   // age

            var standard = analysis.StandardErrors;

            Assert.AreEqual(-702.97, analysis.LogLikelihood, 1e-2);
            Assert.AreEqual(185.85, analysis.ChiSquare.Statistic, 1e-2);
            Assert.AreEqual(1405.9414080469473, analysis.Deviance, 1e-5);
        }
        public void AnalyzeExample1()
        {
            // 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(inputsData, outputData, inputNames, outputNames);

            analysis.Compute();

            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-10);

            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-10);

            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-10);

            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-10);

            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-10);

            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-10);

            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-10);

            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-10);
        }
        public void ComputeTest1()
        {
            double[][] inputs;
            int[]      outputs;

            MultinomialLogisticRegressionTest.CreateInputOutputsExample1(out inputs, out outputs);

            var analysis = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            int inputCount  = 2;
            int outputCount = 3;
            int coeffCount  = inputCount + 1;

            var mlr = analysis.regression;

            Assert.AreEqual(inputCount, mlr.Inputs);
            Assert.AreEqual(outputCount, mlr.Categories);

            Assert.AreEqual(inputCount, analysis.Inputs.Length);
            Assert.AreEqual(outputCount, analysis.OutputNames.Length);

            analysis.Iterations = 100;
            analysis.Tolerance  = 1e-6;

            analysis.Compute();

            Assert.AreEqual(outputCount - 1, analysis.CoefficientValues.Length);
            Assert.AreEqual(outputCount - 1, analysis.StandardErrors.Length);

            Assert.AreEqual(outputCount - 1, analysis.WaldTests.Length);
            Assert.AreEqual(outputCount - 1, analysis.Confidences.Length);

            for (int i = 0; i < analysis.CoefficientValues.Length; i++)
            {
                Assert.AreEqual(coeffCount, analysis.CoefficientValues[i].Length);
                Assert.AreEqual(coeffCount, analysis.StandardErrors[i].Length);

                Assert.AreEqual(coeffCount, analysis.WaldTests[i].Length);
                Assert.AreEqual(coeffCount, analysis.Confidences[i].Length);

                for (int j = 0; j < analysis.CoefficientValues[i].Length; j++)
                {
                    Assert.IsFalse(double.IsNaN(analysis.CoefficientValues[i][j]));
                    Assert.IsFalse(double.IsNaN(analysis.StandardErrors[i][j]));
                }
            }

            var coefficients = analysis.CoefficientValues;

            // brand 2
            Assert.AreEqual(-11.774655, coefficients[0][0], 1e-4); // intercept
            Assert.AreEqual(0.523814, coefficients[0][1], 1e-4);   // female
            Assert.AreEqual(0.368206, coefficients[0][2], 1e-4);   // age

            // brand 3
            Assert.AreEqual(-22.721396, coefficients[1][0], 1e-4); // intercept
            Assert.AreEqual(0.465941, coefficients[1][1], 1e-4);   // female
            Assert.AreEqual(0.685908, coefficients[1][2], 1e-4);   // age

            var standard = analysis.StandardErrors;

            // Using the lower-bound approximation
            Assert.AreEqual(1.047378039787443, standard[0][0], 1e-6);
            Assert.AreEqual(0.153150051082552, standard[0][1], 1e-6);
            Assert.AreEqual(0.031640507386863, standard[0][2], 1e-6);

            Assert.AreEqual(1.047378039787443, standard[1][0], 1e-6);
            Assert.AreEqual(0.153150051082552, standard[1][1], 1e-6);
            Assert.AreEqual(0.031640507386863, standard[1][2], 1e-6);

            Assert.AreEqual(-702.97, analysis.LogLikelihood, 1e-2);
            Assert.AreEqual(185.85, analysis.ChiSquare.Statistic, 1e-2);
            Assert.AreEqual(1405.9414080469473, analysis.Deviance, 1e-10);

            var wald = analysis.WaldTests;

            Assert.AreEqual(-11.241995503283842, wald[0][0].Statistic, 1e-4);
            Assert.AreEqual(3.4202662152119889, wald[0][1].Statistic, 1e-4);
            Assert.AreEqual(11.637150673342207, wald[0][2].Statistic, 1e-4);

            Assert.AreEqual(-21.693553825772664, wald[1][0].Statistic, 1e-4);
            Assert.AreEqual(3.0423802097069097, wald[1][1].Statistic, 1e-4);
            Assert.AreEqual(21.678124991086548, wald[1][2].Statistic, 1e-4);
        }
示例#11
0
        /// <summary>
        ///   Creates a Multinomial Logistic Regression Analysis.
        /// </summary>
        /// 
        private void btnCreate_Click(object sender, EventArgs e)
        {
            if (dgvLearningSource.DataSource == null)
            {
                MessageBox.Show("Please load some data first.");
                return;
            }

            // Finishes and save any pending changes to the given data
            dgvLearningSource.EndEdit();

            // Creates a matrix from the entire source data table
            double[,] table = (dgvLearningSource.DataSource as DataTable).ToMatrix(out columnNames);

            // Get only the input vector values (first two columns)
            double[][] inputs = table.GetColumns(0, 1).ToArray();

            // Get only the output labels (last column)
            int[] outputs = table.GetColumn(2).Subtract(1).ToInt32();




            // Create and compute a new Simple Descriptive Analysis
            var sda = new DescriptiveAnalysis(table, columnNames);

            sda.Compute();

            // Show the descriptive analysis on the screen
            dgvDistributionMeasures.DataSource = sda.Measures;




            // Creates the Support Vector Machine for 2 input variables
            mlr = new MultinomialLogisticRegressionAnalysis(inputs, outputs);

            try
            {
                // Run
                mlr.Compute();

                lbStatus.Text = "Analysis complete!";
            }
            catch (ConvergenceException)
            {
                lbStatus.Text = "Convergence could not be attained. " +
                    "The learned machine might still be usable.";
            }


            createSurface(table);

            // Populate details about the fitted model
            tbChiSquare.Text = mlr.ChiSquare.Statistic.ToString("N5");
            tbPValue.Text = mlr.ChiSquare.PValue.ToString("N5");
            checkBox1.Checked = mlr.ChiSquare.Significant;
            tbDeviance.Text = mlr.Deviance.ToString("N5");
            tbLogLikelihood.Text = mlr.LogLikelihood.ToString("N5");

            dgvCoefficients.DataSource = mlr.Coefficients;
        }