def __init__(self): #from results.results_discrete import Anes data = sm.datasets.anes96.load() exog = data.exog exog[:,0] = np.log(exog[:,0] + .1) exog = np.column_stack((exog[:,0],exog[:,2], exog[:,5:8])) exog = sm.add_constant(exog) self.mod = sm.MNLogit(data.endog, exog) def loglikeflat(self, params): #reshapes flattened params return self.loglike(params.reshape(6,6)) self.mod.loglike = loglikeflat #need instance method self.params = [np.ones((6,6))]
"""Example: scikits.statsmodels.discretemod """ import numpy as np import scikits.statsmodels.api as sm anes_data = sm.datasets.anes96.load() anes_exog = anes_data.exog anes_exog[:, 0] = np.log(anes_exog[:, 0] + .1) anes_exog = np.column_stack((anes_exog[:, 0], anes_exog[:, 2], anes_exog[:, 5:8])) anes_exog = sm.add_constant(anes_exog, prepend=False) mlogit_mod = sm.MNLogit(anes_data.endog, anes_exog) mlogit_res = mlogit_mod.fit() # The default method for the fit is Newton-Raphson # However, you can use other solvers mlogit_res = mlogit_mod.fit(method='bfgs', maxiter=100) # The below needs a lot of iterations to get it right? #TODO: Add a technical note on algorithms #mlogit_res = mlogit_mod.fit(method='ncg') # this takes forever from scikits.statsmodels.iolib.summary import (summary_params_2d, summary_params_2dflat) exog_names = [anes_data.exog_name[i] for i in [0, 2] + range(5, 8)] + ['const'] endog_names = [ anes_data.endog_name + '_%d' % i for i in np.unique(mlogit_res.model.endog)[1:] ] print '\n\nMultinomial'
print 'cs', numdiff.approx_fprime_cs(test_params, score) #print 'fd', numdiff.approx_hess(test_params, loglike, epsilon) #TODO: bug ''' Traceback (most recent call last): File "C:\Josef\eclipsegworkspace\statsmodels-josef-experimental-gsoc\scikits\statsmodels\sandbox\regression\test_numdiff.py", line 74, in <module> print 'fd', numdiff.approx_hess(test_params, loglike, epsilon) File "C:\Josef\eclipsegworkspace\statsmodels-josef-experimental-gsoc\scikits\statsmodels\sandbox\regression\numdiff.py", line 118, in approx_hess xh = x + h TypeError: can only concatenate list (not "float") to list ''' hesscs = numdiff.approx_hess_cs(test_params, loglike) print 'cs', hesscs print maxabs(hess(test_params), hesscs) data = sm.datasets.anes96.load() exog = data.exog exog[:,0] = np.log(exog[:,0] + .1) exog = np.column_stack((exog[:,0],exog[:,2], exog[:,5:8])) exog = sm.add_constant(exog) res1 = sm.MNLogit(data.endog, exog).fit(method="newton", disp=0) datap = sm.datasets.randhie.load() nobs = len(datap.endog) exogp = sm.add_constant(datap.exog.view(float).reshape(nobs,-1)) modp = sm.Poisson(datap.endog, exogp) resp = modp.fit(method='newton', disp=0)