Skip to content

Commit

Permalink
REF: use SpecificationWarning for formula,
Browse files Browse the repository at this point in the history
  • Loading branch information
josef-pkt committed Sep 19, 2020
1 parent db63772 commit 3f377e4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 26 deletions.
4 changes: 3 additions & 1 deletion statsmodels/miscmodels/ordinal_model.py
Expand Up @@ -10,6 +10,8 @@
import pandas as pd
from pandas.api.types import CategoricalDtype
from scipy import stats
from statsmodels.tools.sm_exceptions import (
SpecificationWarning)
from statsmodels.base.model import (
GenericLikelihoodModel, GenericLikelihoodModelResults)
from statsmodels.compat.pandas import Appender
Expand Down Expand Up @@ -180,7 +182,7 @@ def from_formula(cls, formula, data, subset=None, drop_cols=None,
import warnings
msg = ("OrderedModel formulas should not include any '0' or "
"'1' terms if those create an implicit constant.")
warnings.warn(msg)
warnings.warn(msg, SpecificationWarning)

endog_name = formula.split("~")[0].strip()
original_endog = data[endog_name]
Expand Down
65 changes: 40 additions & 25 deletions statsmodels/miscmodels/tests/test_ordinal_model.py
Expand Up @@ -8,9 +8,14 @@
import pandas as pd

from numpy.testing import assert_allclose, assert_equal
from statsmodels.tools.sm_exceptions import (
HessianInversionWarning, SpecificationWarning)
from .results.results_ordinal_model import data_store as ds
from statsmodels.miscmodels.ordinal_model import OrderedModel

import warnings
warnings.simplefilter("ignore", SpecificationWarning)


class CheckOrdinalModelMixin(object):

Expand Down Expand Up @@ -133,13 +138,15 @@ def setup_class(cls):
distr='logit')
resp = modp.fit(method='bfgs', disp=False)
# fit with formula
modf = OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": data['apply'].values.codes,
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='logit')
with warnings.catch_warnings():
warnings.simplefilter("ignore", SpecificationWarning)
modf = OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": data['apply'].values.codes,
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='logit')
resf = modf.fit(method='bfgs', disp=False)
# fit on data with ordered=False
modu = OrderedModel(
Expand Down Expand Up @@ -173,13 +180,15 @@ def setup_class(cls):
distr='probit')
resp = modp.fit(method='bfgs', disp=False)

modf = OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": data['apply'].values.codes,
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='probit')
with warnings.catch_warnings():
warnings.simplefilter("ignore", SpecificationWarning)
modf = OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": data['apply'].values.codes,
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='probit')
resf = modf.fit(method='bfgs', disp=False)

modu = OrderedModel(
Expand Down Expand Up @@ -227,8 +236,11 @@ def test_formula_categorical(self):
resp = self.resp
data = ds.df

modf2 = OrderedModel.from_formula("apply ~ pared + public + gpa - 1",
data, distr='probit')
with warnings.catch_warnings():
warnings.simplefilter("ignore", SpecificationWarning)
formula = "apply ~ pared + public + gpa - 1"
modf2 = OrderedModel.from_formula(formula,
data, distr='probit')
resf2 = modf2.fit(method='bfgs', disp=False)
assert_allclose(resf2.params, resp.params, atol=1e-8)
assert modf2.exog_names == resp.model.exog_names
Expand All @@ -237,19 +249,22 @@ def test_formula_categorical(self):
assert not hasattr(modf2, "frame")

with pytest.raises(ValueError):
OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": np.asarray(data['apply']),
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='probit')
with warnings.catch_warnings():
warnings.simplefilter("ignore", SpecificationWarning)
OrderedModel.from_formula(
"apply ~ pared + public + gpa - 1",
data={"apply": np.asarray(data['apply']),
"pared": data['pared'],
"public": data['public'],
"gpa": data['gpa']},
distr='probit')


class TestLogitModelFormula():

@classmethod
def setup_class(cls):
warnings.simplefilter("ignore", SpecificationWarning)
data = ds.df
nobs = len(data)
data["dummy"] = (np.arange(nobs) < (nobs / 2)).astype(float)
Expand Down Expand Up @@ -291,10 +306,10 @@ def test_setup(self):
# warns but doesn't raise
formula = "apply ~ 0 + pared + public + gpa + C(dummy)"

with pytest.warns(UserWarning):
with pytest.warns(SpecificationWarning):
modf2 = OrderedModel.from_formula(formula, data, distr='logit')

with pytest.warns(UserWarning):
with pytest.warns(HessianInversionWarning):
resf2 = modf2.fit(method='bfgs')
assert np.isnan(resf2.bse).all()

Expand Down

0 comments on commit 3f377e4

Please sign in to comment.