Exemplo n.º 1
0
        public void ContingencyTableOperations()
        {
            ContingencyTable t = new ContingencyTable(4, 3);

            Assert.IsTrue(t.Rows.Count == 4);
            Assert.IsTrue(t.Columns.Count == 3);

            Assert.IsTrue(t.RowTotal(2) == 0);
            Assert.IsTrue(t.ColumnTotal(1) == 0);
            Assert.IsTrue(t.Total == 0);

            t[1, 1] = 2;
            Assert.IsTrue(t[1, 1] == 2);
            Assert.IsTrue(t.RowTotal(2) == 0);
            Assert.IsTrue(t.ColumnTotal(1) == 2);
            Assert.IsTrue(t.Total == 2);

            t.Increment(2, 1);
            Assert.IsTrue(t[2, 1] == 1);
            Assert.IsTrue(t.RowTotal(2) == 1);
            Assert.IsTrue(t.ColumnTotal(1) == 3);
            Assert.IsTrue(t.Total == 3);

            t.Decrement(1, 1);
            Assert.IsTrue(t[1, 1] == 1);
            Assert.IsTrue(t.RowTotal(2) == 1);
            Assert.IsTrue(t.ColumnTotal(1) == 2);
            Assert.IsTrue(t.Total == 2);
        }
        public void BinaryContingencyTest()
        {
            // Create a table with significant association and test for it.

            ContingencyTable e1 = CreateExperiment(0.50, 0.50, 0.75, 128);

            Assert.IsTrue(e1.RowTotal(0) + e1.RowTotal(1) == e1.Total);
            Assert.IsTrue(e1.ColumnTotal(0) + e1.ColumnTotal(1) == e1.Total);

            UncertainValue lnr = e1.Binary.LogOddsRatio;

            Assert.IsTrue(!lnr.ConfidenceInterval(0.95).ClosedContains(0.0));

            UncertainValue r = e1.Binary.OddsRatio;

            Assert.IsTrue(!r.ConfidenceInterval(0.95).ClosedContains(1.0));

            TestResult p = e1.PearsonChiSquaredTest();

            Assert.IsTrue(p.Probability < 0.05);

            TestResult f = e1.Binary.FisherExactTest();

            Assert.IsTrue(f.Probability < 0.05);
        }
        public void BinaryContingencyNullTest()
        {
            // Create a table with no significant association and test for it.

            ContingencyTable e0 = CreateExperiment(0.25, 0.33, 0.33, 128);

            Assert.IsTrue(e0.Total == 128);
            Assert.IsTrue(e0.RowTotal(0) + e0.RowTotal(1) == e0.Total);
            Assert.IsTrue(e0.ColumnTotal(0) + e0.ColumnTotal(1) == e0.Total);

            UncertainValue lnr = e0.Binary.LogOddsRatio;

            Assert.IsTrue(lnr.ConfidenceInterval(0.95).ClosedContains(0.0));

            UncertainValue r = e0.Binary.OddsRatio;

            Assert.IsTrue(r.ConfidenceInterval(0.95).ClosedContains(1.0));

            TestResult p = e0.PearsonChiSquaredTest();

            Assert.IsTrue(p.Probability > 0.05);

            TestResult f = e0.Binary.FisherExactTest();

            Assert.IsTrue(f.Probability > 0.05);
        }
        public void BinaryContingencyTest()
        {
            // Create a table with significant association and test for it.

            ContingencyTable e1 = CreateExperiment(0.50, 0.50, 0.75, 128);

            Assert.IsTrue(e1.RowTotal(0) + e1.RowTotal(1) == e1.Total);
            Assert.IsTrue(e1.ColumnTotal(0) + e1.ColumnTotal(1) == e1.Total);

            UncertainValue lnr = e1.Binary.LogOddsRatio;

            Assert.IsTrue(!lnr.ConfidenceInterval(0.95).ClosedContains(0.0));

            UncertainValue r = e1.Binary.OddsRatio;

            Assert.IsTrue(!r.ConfidenceInterval(0.95).ClosedContains(1.0));

            // Chi square should detect association
            TestResult p = e1.PearsonChiSquaredTest();

            Assert.IsTrue(p.Probability < 0.05);

            // Fisher exact should detect association
            TestResult f = e1.Binary.FisherExactTest();

            Assert.IsTrue(f.Probability < 0.05);

            // Phi should be the same as Pearson correlation coefficient
            List <double> x = new List <double>();
            List <double> y = new List <double>();

            for (int i = 0; i < e1[0, 0]; i++)
            {
                x.Add(0); y.Add(0);
            }
            for (int i = 0; i < e1[0, 1]; i++)
            {
                x.Add(0); y.Add(1);
            }
            for (int i = 0; i < e1[1, 0]; i++)
            {
                x.Add(1); y.Add(0);
            }
            for (int i = 0; i < e1[1, 1]; i++)
            {
                x.Add(1); y.Add(1);
            }
            double s = x.CorrelationCoefficient(y);

            Assert.IsTrue(TestUtilities.IsNearlyEqual(s, e1.Binary.Phi));
        }
        public void ContingencyTableOperations()
        {
            ContingencyTable t = new ContingencyTable(4, 3);

            Assert.IsTrue(t.RowCount == 4);
            Assert.IsTrue(t.ColumnCount == 3);

            Assert.IsTrue(t.RowTotal(2) == 0);
            Assert.IsTrue(t.ColumnTotal(1) == 0);
            Assert.IsTrue(t.Total == 0);

            t[1, 1] = 2;
            Assert.IsTrue(t.RowTotal(2) == 0);
            Assert.IsTrue(t.ColumnTotal(1) == 2);
            Assert.IsTrue(t.Total == 2);
        }
Exemplo n.º 6
0
        public static void ContingencyTable()
        {
            ContingencyTable <string, bool> contingency = new ContingencyTable <string, bool>(
                new string[] { "P", "N" }, new bool[] { true, false }
                );

            contingency["P", true]  = 35;
            contingency["P", false] = 65;
            contingency["N", true]  = 4;
            contingency["N", false] = 896;

            IReadOnlyList <string>          x = new string[] { "N", "P", "N", "N", "P", "N", "N", "N", "P" };
            IReadOnlyList <bool>            y = new bool[] { false, false, false, true, true, false, false, false, true };
            ContingencyTable <string, bool> contingencyFromLists = Bivariate.Crosstabs(x, y);

            foreach (string row in contingency.Rows)
            {
                Console.WriteLine($"Total count of {row}: {contingency.RowTotal(row)}");
            }
            foreach (bool column in contingency.Columns)
            {
                Console.WriteLine($"Total count of {column}: {contingency.ColumnTotal(column)}");
            }
            Console.WriteLine($"Total counts: {contingency.Total}");

            foreach (string row in contingency.Rows)
            {
                UncertainValue probability = contingency.ProbabilityOfRow(row);
                Console.WriteLine($"Estimated probability of {row}: {probability}");
            }
            foreach (bool column in contingency.Columns)
            {
                UncertainValue probability = contingency.ProbabilityOfColumn(column);
                Console.WriteLine($"Estimated probablity of {column}: {probability}");
            }

            UncertainValue sensitivity = contingency.ProbabilityOfRowConditionalOnColumn("P", true);

            Console.WriteLine($"Chance of P result given true condition: {sensitivity}");
            UncertainValue precision = contingency.ProbabilityOfColumnConditionalOnRow(true, "P");

            Console.WriteLine($"Chance of true condition given P result: {precision}");

            UncertainValue logOddsRatio = contingency.Binary.LogOddsRatio;

            Console.WriteLine($"log(r) = {logOddsRatio}");

            TestResult pearson = contingency.PearsonChiSquaredTest();

            Console.WriteLine($"Pearson χ² = {pearson.Statistic.Value} has P = {pearson.Probability}.");

            TestResult fisher = contingency.Binary.FisherExactTest();

            Console.WriteLine($"Fisher exact test has P = {fisher.Probability}.");
        }