Skip to content

Commit

Permalink
Merge 3f58ac3 into 5c7d4be
Browse files Browse the repository at this point in the history
  • Loading branch information
josef-pkt committed Jul 18, 2014
2 parents 5c7d4be + 3f58ac3 commit 421b3da
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 34 deletions.
23 changes: 18 additions & 5 deletions statsmodels/base/model.py
Expand Up @@ -478,7 +478,6 @@ def __init__(self, endog, exog=None, loglike=None, score=None,
self.score = score
if not hessian is None:
self.hessian = hessian
self.confint_dist = stats.norm

self.__dict__.update(kwds)

Expand Down Expand Up @@ -854,11 +853,16 @@ class LikelihoodModelResults(Results):
allvecs : list
Results at each iteration.
"""

# by default we use normal distribution
# can be overwritten by instances or subclasses
use_t = False

def __init__(self, model, params, normalized_cov_params=None, scale=1.):
super(LikelihoodModelResults, self).__init__(model, params)
self.normalized_cov_params = normalized_cov_params
self.scale = scale
self.use_t = False # by default we use normal distribution


def normalized_cov_params(self):
raise NotImplementedError
Expand All @@ -880,7 +884,11 @@ def tvalues(self):

@cache_readonly
def pvalues(self):
return stats.norm.sf(np.abs(self.tvalues)) * 2
if self.use_t:
return stats.t.sf(np.abs(self.tvalues), self.df_resid)*2
else:
return stats.norm.sf(np.abs(self.tvalues))*2


def cov_params(self, r_matrix=None, column=None, scale=None, cov_p=None,
other=None):
Expand Down Expand Up @@ -1379,8 +1387,13 @@ def conf_int(self, alpha=.05, cols=None, method='default'):
method.
"""
bse = self.bse
dist = stats.norm
q = dist.ppf(1 - alpha / 2)

if self.use_t:
dist = stats.t
q = dist.ppf(1 - alpha / 2, self.df_resid)
else:
dist = stats.norm
q = dist.ppf(1 - alpha / 2)

if cols is None:
lower = self.params - q * bse
Expand Down
6 changes: 6 additions & 0 deletions statsmodels/base/tests/test_generic_methods.py
Expand Up @@ -85,6 +85,12 @@ def test_ftest_pvalues(self):
for k in range(k_vars)]
assert_allclose(pvals, res.pvalues, rtol=5e-10, atol=1e-25)

# label for pvalues in summary
string_use_t = 'P>|z|' if use_t is False else 'P>|t|'
summ = str(res.summary())
assert_(string_use_t in summ)
summ = str(res.summary2())
assert_(string_use_t in summ)


# TODO The following is not (yet) guaranteed across models
Expand Down
2 changes: 1 addition & 1 deletion statsmodels/discrete/discrete_model.py
Expand Up @@ -2394,7 +2394,7 @@ def summary(self, yname=None, xname=None, title=None, alpha=.05,
yname=yname, xname=xname, title=title)
# for parameters, etc
smry.add_table_params(self, yname=yname_list, xname=xname, alpha=alpha,
use_t=False)
use_t=self.use_t)

if hasattr(self, 'constraints'):
smry.add_extra_txt(['Model has been estimated subject to linear '
Expand Down
2 changes: 1 addition & 1 deletion statsmodels/genmod/generalized_linear_model.py
Expand Up @@ -1046,7 +1046,7 @@ def summary(self, yname=None, xname=None, title=None, alpha=.05):
smry.add_table_2cols(self, gleft=top_left, gright=top_right, # [],
yname=yname, xname=xname, title=title)
smry.add_table_params(self, yname=yname, xname=xname, alpha=alpha,
use_t=True)
use_t=self.use_t)

if hasattr(self, 'constraints'):
smry.add_extra_txt(['Model has been estimated subject to linear '
Expand Down
2 changes: 1 addition & 1 deletion statsmodels/iolib/summary2.py
Expand Up @@ -133,7 +133,7 @@ def add_base(self, results, alpha=0.05, float_format="%.4f", title=None,
Name of the dependent variable (optional)
'''

param = summary_params(results, alpha=alpha)
param = summary_params(results, alpha=alpha, use_t=results.use_t)
info = summary_model(results)
if xname is not None:
param.index = xname
Expand Down
28 changes: 3 additions & 25 deletions statsmodels/regression/linear_model.py
Expand Up @@ -1106,24 +1106,9 @@ def conf_int(self, alpha=.05, cols=None):
-----
The confidence interval is based on Student's t-distribution.
"""
bse = self.bse
params = self.params
# TODO: should be obsolete if super uses use_t
if self.use_t:
dist = stats.t
q = dist.ppf(1 - alpha / 2, self.df_resid)
else:
dist = stats.norm
q = dist.ppf(1 - alpha / 2)

if cols is None:
lower = self.params - q * bse
upper = self.params + q * bse
else:
cols = np.asarray(cols)
lower = params[cols] - q * bse[cols]
upper = params[cols] + q * bse[cols]
return np.asarray(lzip(lower, upper))
# keep method for docstring for now
ci = super(RegressionResults, self).conf_int(alpha=alpha, cols=cols)
return ci


@cache_readonly
Expand Down Expand Up @@ -1234,13 +1219,6 @@ def f_pvalue(self):
def bse(self):
return np.sqrt(np.diag(self.cov_params()))

@cache_readonly
def pvalues(self):
# TODO: should be obsolete if super uses use_t
if self.use_t:
return stats.t.sf(np.abs(self.tvalues), self.df_resid)*2
else:
return stats.norm.sf(np.abs(self.tvalues))*2

@cache_readonly
def aic(self):
Expand Down
2 changes: 1 addition & 1 deletion statsmodels/robust/robust_linear_model.py
Expand Up @@ -517,7 +517,7 @@ def summary(self, yname=None, xname=None, title=0, alpha=.05,
smry.add_table_2cols(self, gleft=top_left, gright=top_right, #[],
yname=yname, xname=xname, title=title)
smry.add_table_params(self, yname=yname, xname=xname, alpha=alpha,
use_t=False)
use_t=self.use_t)

#diagnostic table is not used yet
# smry.add_table_2cols(self, gleft=diagn_left, gright=diagn_right,
Expand Down

0 comments on commit 421b3da

Please sign in to comment.