From b2a72a8ef8a263a86226fb8e1f41593d80d452e8 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Fri, 2 Dec 2022 21:53:07 +1100 Subject: [PATCH] Add unit test for RegressionResult.brant --- tests/test_ordinallogit.py | 35 +++++++++++++++++++++++++++++++++++ yli/regress.py | 8 ++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/tests/test_ordinallogit.py b/tests/test_ordinallogit.py index fcc6bb3..67f0831 100644 --- a/tests/test_ordinallogit.py +++ b/tests/test_ordinallogit.py @@ -62,3 +62,38 @@ somewhat likely/very likely 4.30 (2.72 - 5.88) <0.001* ------------------------------------------------------------'''.format(result.fitted_dt) assert result.summary() == expected_summary + +def test_brant_ucla(): + """Compare RegressionResult.brant with R brant library for UCLA example at https://stats.oarc.ucla.edu/r/dae/ordinal-logistic-regression/""" + + df = pd.read_stata('tests/data/ucla_ologit.dta') + result = yli.regress(yli.OrdinalLogit, df, 'apply', 'pared + public + gpa', exp=False) + brant_result = result.brant() + + # df <- read.dta("https://stats.idre.ucla.edu/stat/data/ologit.dta") + # m <- polr(apply ~ pared + public + gpa, data=df, Hess=TRUE) + # brant(m) + + assert brant_result.tests['Omnibus'].statistic == approx(4.34, abs=0.01) + assert brant_result.tests['Omnibus'].dof == 3 + assert brant_result.tests['Omnibus'].pvalue == approx(0.23, abs=0.01) + + assert brant_result.tests['pared'].statistic == approx(0.13, abs=0.01) + assert brant_result.tests['pared'].dof == 1 + assert brant_result.tests['pared'].pvalue == approx(0.72, abs=0.01) + + assert brant_result.tests['public'].statistic == approx(3.44, abs=0.01) + assert brant_result.tests['public'].dof == 1 + assert brant_result.tests['public'].pvalue == approx(0.06, abs=0.01) + + assert brant_result.tests['gpa'].statistic == approx(0.18, abs=0.01) + assert brant_result.tests['gpa'].dof == 1 + assert brant_result.tests['gpa'].pvalue == approx(0.67, abs=0.01) + + expected_summary = ''' χ² df p +Omnibus 4.34 3 0.23 +pared 0.13 1 0.72 +public 3.44 1 0.06 +gpa 0.18 1 0.67 ''' + + assert brant_result.summary() == expected_summary diff --git a/yli/regress.py b/yli/regress.py index 2ed70fe..12ee1ca 100644 --- a/yli/regress.py +++ b/yli/regress.py @@ -1097,5 +1097,9 @@ class BrantResult: :rtype: str """ - # FIXME - return 'FIXME' + table = pd.DataFrame([ + ['{:.2f}'.format(test.statistic), '{:.0f}'.format(test.dof), fmt_p(test.pvalue, PValueStyle.TABULAR)] + for test in self.tests.values() + ], index=self.tests.keys(), columns=['χ² ', 'df', 'p ']) + + return str(table)