Ljung-Box test in ResidualAnalysis

This commit is contained in:
Petrônio Cândido de Lima e Silva 2019-06-11 16:40:42 -03:00 committed by GitHub
parent 461b3bd850
commit 098c5fddc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,17 +17,22 @@ def residuals(targets, forecasts, order=1):
return np.array(targets[order:]) - np.array(forecasts[:-1]) return np.array(targets[order:]) - np.array(forecasts[:-1])
def chi_squared(q, h): def ljung_box_test(residuals, lags=[1,2,3], alpha=0.5):
""" from statsmodels.stats.diagnostic import acorr_ljungbox
Chi-Squared value from scipy.stats import chi2
:param q: stat, pval = acorr_ljungbox(residuals, lags=lags)
:param h:
:return: rows = []
"""
p = stats.chi2.sf(q, h)
return p
for ct, Q in enumerate(stat):
lag = ct+1
p_value = 1 - chi2.cdf(Q, df=lag)
critical_value = chi2.ppf(1 - alpha, df=lag)
rows.append([lag, Q, p_value, critical_value, 'H0 accepted' if Q > critical_value else 'H0 rejected'])
return pd.DataFrame(rows, columns=['Lag','Statistic','p-Value','Critical Value', 'Result'])
def compare_residuals(data, models, alpha=.05): def compare_residuals(data, models, alpha=.05):
""" """
@ -53,50 +58,6 @@ def compare_residuals(data, models, alpha=.05):
return pd.DataFrame(rows, columns=columns) return pd.DataFrame(rows, columns=columns)
def plotResiduals(targets, models, tam=[8, 8], save=False, file=None):
"""
Plot residuals and statistics
:param targets:
:param models:
:param tam:
:param save:
:param file:
:return:
"""
fig, axes = plt.subplots(nrows=len(models), ncols=3, figsize=tam)
for c, mfts in enumerate(models):
if len(models) > 1:
ax = axes[c]
else:
ax = axes
forecasts = mfts.forecast(targets)
res = residuals(targets,forecasts,mfts.order)
mu = np.mean(res)
sig = np.std(res)
ax[0].set_title("Residuals Mean=" + str(mu) + " STD = " + str(sig))
ax[0].set_ylabel('E')
ax[0].set_xlabel('T')
ax[0].plot(res)
ax[1].set_title("Residuals Autocorrelation")
ax[1].set_ylabel('ACS')
ax[1].set_xlabel('Lag')
ax[1].acorr(res)
ax[2].set_title("Residuals Histogram")
ax[2].set_ylabel('Freq')
ax[2].set_xlabel('Bins')
ax[2].hist(res)
c += 1
plt.tight_layout()
Util.show_and_save_image(fig, file, save)
def plot_residuals(targets, models, tam=[8, 8], save=False, file=None): def plot_residuals(targets, models, tam=[8, 8], save=False, file=None):
import scipy as sp import scipy as sp