def test_plot_oth(self): #just test that they run res = self.res endog = res.model.endog exog = res.model.exog plot_fit(res, 0, y_true=None) plot_partregress(endog, exog, exog_idx=[0, 1]) plot_regress_exog(res, exog_idx=0) plot_ccpr(res, exog_idx=[0]) plot_ccpr(res, exog_idx=[0, 1]) plt.close('all')
def test_plot_oth(self): #just test that they run res = self.res endog = res.model.endog exog = res.model.exog plot_fit(res, 0, y_true=None) plot_partregress(endog, exog, exog_idx=[0,1]) plot_regress_exog(res, exog_idx=0) plot_ccpr(res, exog_idx=[0]) plot_ccpr(res, exog_idx=[0,1]) plt.close('all')
x1beta = x1 * res.params[1] x2beta = x2 * res.params[2] plt.plot(x1, x1beta + res.resid, 'o') plt.plot(x1, x1beta, '-') ax.set_title('X_i beta_i plus residuals versus exog (CCPR)') # + namestr) ax = fig6.add_subplot(2, 1, 2) plt.plot(x2, x2beta + res.resid, 'o') plt.plot(x2, x2beta, '-') #print res.summary() doplots = 1 if doplots: fig1 = smrp.plot_fit(res, 0, y_true=None) smrp.plot_fit(res, 1, y_true=None) smrp.plot_partregress(y, exog0, exog_idx=[0, 1]) smrp.plot_regress_exog(res, exog_idx=0) smrp.plot_ccpr(res, exog_idx=[0]) smrp.plot_ccpr(res, exog_idx=[0, 1]) from statsmodels.graphics.tests.test_regressionplots import TestPlot tp = TestPlot() tp.test_plot_fit() fig1 = smrp.plot_partregress(y, exog0, exog_idx=[0, 1]) #add lowess ax = fig1.axes[0] y0 = ax.get_lines()[0]._y x0 = ax.get_lines()[0]._x lres = sm.nonparametric.lowess(y0, x0, frac=0.2) ax.plot(lres[:, 0], lres[:, 1], 'r', lw=1.5)
x2beta = x2*res.params[2] plt.plot(x1, x1beta + res.resid, 'o') plt.plot(x1, x1beta, '-') ax.set_title('X_i beta_i plus residuals versus exog (CCPR)')# + namestr) ax = fig6.add_subplot(2,1,2) plt.plot(x2, x2beta + res.resid, 'o') plt.plot(x2, x2beta, '-') #print res.summary() doplots = 1 if doplots: fig1 = smrp.plot_fit(res, 0, y_true=None) smrp.plot_fit(res, 1, y_true=None) smrp.plot_partregress(y, exog0, exog_idx=[0,1]) smrp.plot_regress_exog(res, exog_idx=0) smrp.plot_ccpr(res, exog_idx=[0]) smrp.plot_ccpr(res, exog_idx=[0,1]) from statsmodels.graphics.tests.test_regressionplots import TestPlot tp = TestPlot() tp.test_plot_fit() fig1 = smrp.plot_partregress(y, exog0, exog_idx=[0,1]) #add lowess ax = fig1.axes[0] y0 = ax.get_lines()[0]._y x0 = ax.get_lines()[0]._x lres = sm.nonparametric.lowess(y0, x0, frac=0.2) ax.plot(lres[:,0], lres[:,1], 'r', lw=1.5)
def feature_regression_summary(df, feat_idx, target, model_fit_results, display_regress_diagnostics=False): feat = df.columns[feat_idx] v = vif(np.matrix(df), feat_idx) colinear = v > 10 if display_regress_diagnostics: # ‘endog versus exog’, ‘residuals versus exog’, ‘fitted versus exog’ and ‘fitted plus residual versus exog’ fig = plt.figure(constrained_layout=True, figsize=(2.25 * plot_edge, 4 * plot_edge)) fig = smgrpu.create_mpl_fig(fig) gs = GridSpec(3, 2, figure=fig) ax_fit = fig.add_subplot(gs[0, 0]) ax_partial_residuals = fig.add_subplot(gs[0, 1]) ax_partregress = fig.add_subplot(gs[1, 0]) ax_ccpr = fig.add_subplot(gs[1, 1]) ax_dist = fig.add_subplot(gs[2:4, 0:2]) exog_name, exog_idx = smgrpu.maybe_name_or_idx(feat, model_fit_results.model) smresults = smtt.maybe_unwrap_results(model_fit_results) y_name = smresults.model.endog_names x1 = smresults.model.exog[:, exog_idx] prstd, iv_l, iv_u = wls_prediction_std(smresults) # endog versus exog # use wrapper since it's availab;e! sm.graphics.plot_fit(model_fit_results, feat, ax=ax_fit) # residuals versus exog ax_partial_residuals.plot(x1, smresults.resid, 'o') ax_partial_residuals.axhline(y=0, color='black') ax_partial_residuals.set_title('Residuals versus %s' % exog_name, fontsize='large') ax_partial_residuals.set_xlabel(exog_name) ax_partial_residuals.set_ylabel("resid") # Partial Regression plot: fitted versus exog exog_noti = np.ones(smresults.model.exog.shape[1], bool) exog_noti[exog_idx] = False exog_others = smresults.model.exog[:, exog_noti] from pandas import Series smgrp.plot_partregress(smresults.model.data.orig_endog, Series(x1, name=exog_name, index=smresults.model.data.row_labels), exog_others, obs_labels=False, ax=ax_partregress) # CCPR: fitted plus residual versus exog # use wrapper since it's availab;e! sm.graphics.plot_ccpr(model_fit_results, feat, ax=ax_ccpr) ax_ccpr.set_title('CCPR Plot', fontsize='large') sns.distplot(df[feat], ax=ax_dist) fig.suptitle('Regression Plots for %s' % exog_name, fontsize="large") #fig.tight_layout() #fig.subplots_adjust(top=.90) plt.show() display( HTML( "Variance Inflation Factor (<i>VIF</i>) for <b>{}</b>: <b>{}</b> {}" .format( feat, round(v, 2), "$\\le 10 \\iff$ low colinearity" if not colinear else "$> 10 \\iff$ <b>HIGH COLINEARITY</b>"))) display( HTML( "<b><i>p-value</i></b> (<i>VIF</i>) for <b>{}</b>: <b>{}</b><br><br>" .format(feat, model_fit_results.pvalues[feat_idx + 1]))) return v
def partialplot(ycol, xcol, df, othercols=None): if othercols is None: othercols=[col for col in df.columns if col not in (ycol,xcol, 'Intercept')] f=regressionplots.plot_partregress(ycol, xcol, othercols, data=df, label_kwargs={'visible':False})