Jarque-Bera Test
- Similar to D'Agostino-Pearson, tests based on skewness and kurtosis
- Commonly used in econometrics and time series analysis
- Works well for large samples (n > 2000)
Interpretation
- p-value > 0.05: Data is normally distributed ✓
- p-value ≤ 0.05: Data is NOT normally distributed ✗
- JB statistic ≈ 0: Perfect normality
- Larger JB statistic: Greater deviation from normality
Python Example
# Example: Test for Normality using Jarque-Bera Test (scipy.stats.jarque_bera)
from scipy.stats import jarque_bera
import numpy as np
import matplotlib.pyplot as plt
# Generate sample data: normal and non-normal
data_normal = np.random.normal(loc=0, scale=1, size=2500)
data_non_normal = np.random.exponential(scale=2, size=2500)
# Plot histograms for visual inspection
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].hist(data_normal, bins=30, color='skyblue', edgecolor='black')
axes[0].set_title('Normal Data Histogram')
axes[1].hist(data_non_normal, bins=30, color='salmon', edgecolor='black')
axes[1].set_title('Non-Normal Data Histogram')
plt.tight_layout()
plt.show()
# Jarque-Bera test for normality
jb_stat_norm, jb_p_norm = jarque_bera(data_normal)
jb_stat_non_norm, jb_p_non_norm = jarque_bera(data_non_normal)
print(f"Normal Data: JB Statistic={jb_stat_norm:.4f}, p-value={jb_p_norm:.4f}")
if jb_p_norm > 0.05:
print("Normal Data: Likely Gaussian (fail to reject H0)")
else:
print("Normal Data: Not Gaussian (reject H0)")
print(f"\nNon-Normal Data: JB Statistic={jb_stat_non_norm:.4f}, p-value={jb_p_non_norm:.4f}")
if jb_p_non_norm > 0.05:
print("Non-Normal Data: Likely Gaussian (fail to reject H0)")
else:
print("Non-Normal Data: Not Gaussian (reject H0)")
Output
Normal Data: JB Statistic=1.3818, p-value=0.5011
Normal Data: Likely Gaussian (fail to reject H0)Non-Normal Data: JB Statistic=2408.7833, p-value=0.0000
Non-Normal Data: Not Gaussian (reject H0)
