UK-based online statistics and data analysis support for USA, UK, and international clients. No exams, no impersonation, no fabricated data.
Normality and Assumption Tests

Jarque Bera Test: Assumptions, Interpretation, SPSS, Python, R and Excel Guide

Learn Jarque Bera Test with verified SPSS output, Python charts, R charts, Excel workflow, interpretation guidance, APA reporting tips, and downloadable resources.

Statistics guide Ethical learning support SPSS/R/Python/Excel friendly
Jarque Bera Test: Assumptions, Interpretation, SPSS, Python, R and Excel Guide

Normality Test, Skewness, Kurtosis and Chi-Square Decision

Jarque Bera Test: Formula, Interpretation, SPSS, Python, R and Excel Guide

Jarque Bera Test is a normality test used to check whether a variable has the skewness and kurtosis expected under a normal distribution. A normal distribution should be approximately symmetric and should not have unusually heavy tails or an unusually sharp peak. This complete Salar Cafe guide explains the Jarque Bera Test with verified SPSS output, Python charts, R validation charts, Excel formulas, hypothesis wording, APA reporting, common mistakes, and downloadable resources.

Advertisement
Google AdSense top placement reserved here

Quick Answer: Jarque Bera Test Result

The verified SPSS calculation for the G3 final grade variable reports N = 649, skewness = -0.91080, ordinary kurtosis = 5.68212, excess kurtosis = 2.68212, Jarque Bera = 284.26194, and p = 0.00000. Because the p-value is below .05, the null hypothesis of normality is rejected.

Hypothesis-style interpretation: The null hypothesis says the G3 final-grade variable follows a normal distribution. The alternative hypothesis says it does not follow a normal distribution. Since the Jarque Bera p-value is less than .001, the G3 distribution is statistically different from normal.

Main variableG3
Sample size649
Jarque Bera284.262
p-value< .001

Mean11.91
Std. deviation3.231
Skewness-.913
SPSS kurtosis2.712

Final interpretation: The Jarque Bera Test rejects normality for G3. The final-grade distribution is not normally distributed because it shows meaningful negative skewness and elevated kurtosis. The result is consistent with the SPSS Kolmogorov-Smirnov = .124, p < .001 and Shapiro-Wilk = .926, p < .001 normality tests.

Important note: A significant Jarque Bera Test does not mean the dataset is useless. It means the distribution shape should be evaluated carefully using a Q-Q plot normality check, P-P plot normality check, histogram interpretation, and additional assumption checks before choosing the final statistical method.

Table of Contents

  1. What Is the Jarque Bera Test?
  2. Jarque Bera Test Formula
  3. Null and Alternative Hypotheses for Jarque Bera Test
  4. Dataset and Variables Used
  5. Verified SPSS Output Interpretation
  6. Python Chart-by-Chart Interpretation
  7. R Chart-by-Chart Validation
  8. SPSS, Python, R and Excel Workflows
  9. Code Blocks for Jarque Bera Test
  10. APA Reporting Wording
  11. Common Mistakes
  12. When to Use Jarque Bera Test
  13. Downloads and Resources
  14. Related Guides
  15. FAQs

What Is the Jarque Bera Test?

The Jarque Bera Test is a formal statistical test of normality. It checks whether a sample distribution has the same basic shape characteristics as a normal distribution. A normal distribution has skewness close to 0 and ordinary kurtosis close to 3. If skewness or kurtosis moves too far away from these normal values, the Jarque Bera statistic becomes large.

The test is especially useful because it explains why normality fails. Some normality tests only provide a statistic and p-value. The Jarque Bera Test directly links the p-value to two interpretable distribution properties: skewness and kurtosis. Skewness tells whether the distribution is asymmetric. Kurtosis tells whether the tails and peak are different from a normal distribution.

In this guide, the G3 final-grade variable fails the Jarque Bera Test. The result means the G3 scores should not be treated as perfectly normal. However, the practical consequence depends on the next analysis. If you are comparing means, estimating a model, or preparing a thesis report, the Jarque Bera result should be interpreted together with plots, sample size, effect size, confidence intervals, and the assumptions of the method you plan to use.

For a broader normality workflow, compare the Jarque Bera Test with the D’Agostino-Pearson test, Cramér-von Mises test, Kolmogorov-Smirnov test, Lilliefors test, and Ryan-Joiner test. Visual confirmation should also include a Q-Q plot normality check and a P-P plot normality check.

Practical meaning: The Jarque Bera Test is best used as a shape-based normality diagnostic. It is not just asking whether the histogram looks roughly bell-shaped. It is asking whether the observed skewness and kurtosis are statistically consistent with a normal distribution.

Jarque Bera Test Formula

The standard Jarque Bera Test formula is:

JB = n / 6 × [ S² + ((K − 3)² / 4) ]

Here, n is sample size, S is sample skewness, and K is ordinary kurtosis. The term K − 3 is excess kurtosis. A normal distribution has ordinary kurtosis equal to 3, so excess kurtosis should be close to 0.

Formula ComponentMeaningNormal Distribution Benchmark
nSample size used in the testLarger samples give more stable estimates and greater sensitivity
SSkewness0
KOrdinary kurtosis3
K − 3Excess kurtosis0
JBJarque Bera statisticCompared with chi-square distribution with 2 df

Under the null hypothesis of normality, the Jarque Bera statistic approximately follows a chi-square distribution with 2 degrees of freedom. This is why the Python and R reference charts compare the observed JB statistic against a chi-square curve.

Worked Result for G3

The verified SPSS calculation reports n = 649, skewness = -0.91080, ordinary kurtosis = 5.68212, excess kurtosis = 2.68212, and Jarque Bera = 284.26194. Because this JB value is extremely large relative to a chi-square distribution with 2 degrees of freedom, the p-value is effectively zero.

Formula decision: The G3 final-grade variable does not satisfy the normality condition because its skewness and kurtosis jointly produce a very large Jarque Bera statistic.

Null and Alternative Hypotheses for Jarque Bera Test

The Jarque Bera Test is a hypothesis test. It compares the observed distribution shape with the shape expected under normality.

HypothesisStatementMeaning in This Example
Null hypothesis H0The variable follows a normal distribution.G3 has skewness close to 0 and ordinary kurtosis close to 3.
Alternative hypothesis H1The variable does not follow a normal distribution.G3 has skewness, kurtosis, or both that differ from normality.
Decision ruleReject H0 if p < .05.Since p = 0.00000, reject normality.

Interpretation nuance: In a large sample such as N = 649, formal normality tests can detect small and moderate deviations from normality. Therefore, always interpret the p-value with distribution charts, descriptive statistics, and the goal of the analysis.

If the Jarque Bera Test is part of a wider inferential workflow, the next method should be selected carefully. For mean testing, compare assumptions before using a one-tailed t-test or one-sample z-test. For proportion-based questions, see the one-proportion z-test. For reporting practical importance after hypothesis testing, include effect size where appropriate.

Dataset and Variables Used

The worked example uses a student performance dataset with 649 valid cases. The main tested variable is G3, which represents final grade. Other variables are used in the Python and R charts to compare normality behavior across multiple variables.

VariableDescriptionRole in This Guide
G1First-period gradeUsed for cross-variable normality comparison.
G2Second-period gradeUsed to compare grade variable normality patterns.
G3Final gradeMain variable for Jarque Bera Test interpretation.
ageStudent ageComparison variable in skewness-kurtosis charts.
absencesNumber of school absencesStrongly non-normal comparison variable.
sexStudent sex groupGrouping variable for group-level Jarque Bera comparison.

Verified Descriptive Statistics for G3

StatisticSPSS ValueInterpretation
N649All G3 cases were valid in the SPSS output.
Mean11.91Average final grade.
95% Confidence Interval for Mean11.66 to 12.16Estimated range for the population mean.
5% Trimmed Mean12.06Mean after reducing influence of extreme values.
Median12.00Middle grade value.
Variance10.437Average squared spread around the mean.
Standard Deviation3.231Typical spread around the mean.
Minimum0Lowest final grade.
Maximum19Highest final grade.
Range19Difference between maximum and minimum.
Interquartile Range4Spread of the middle 50% of grades.
Skewness-.913Negative skewness indicates left-tail influence.
Kurtosis2.712Positive excess kurtosis indicates heavier tails or sharper peak than normal.

Before running any normality test, Salar Cafe recommends reviewing frequency distribution, histogram interpretation, five-number summary, box plot interpretation, and coefficient of variation. These descriptive checks help explain the data before the formal Jarque Bera p-value is reported.

Advertisement
Google AdSense middle placement reserved here

Verified SPSS Output Interpretation

The SPSS output verifies the Jarque Bera Test conclusion through descriptive statistics, standard SPSS normality tests, plots, and the custom JB calculation. The main conclusion is that G3 is not normally distributed.

SPSS Case Processing Summary

The SPSS output reports 649 valid cases, 0 missing cases, and 649 total cases for G3. This means the Jarque Bera Test and supporting normality checks are based on the full available G3 sample.

SPSS Descriptives for G3

SPSS reports mean = 11.91, standard deviation = 3.231, minimum = 0, maximum = 19, skewness = -.913, and kurtosis = 2.712. The negative skewness shows that the lower tail is more influential than expected under symmetry. The positive kurtosis shows that the distribution has heavier tails or a sharper peak than a normal distribution.

SPSS Tests of Normality

Normality TestStatisticdfSig.Decision
Kolmogorov-Smirnov.124649.000Reject normality
Shapiro-Wilk.926649.000Reject normality

The SPSS Kolmogorov-Smirnov test and Shapiro-Wilk test both reject normality. The SPSS table also notes the Lilliefors significance correction, so the Lilliefors test is a useful related guide for understanding normality testing when the population mean and standard deviation are estimated from the sample.

SPSS Jarque Bera Calculation Table

SPSS Output FieldVerified ValueInterpretation
jb_n_calc649Number of valid cases used in the JB calculation.
jb_skewness-.91080Negative skewness component used in the formula.
jb_kurtosis5.68212Ordinary kurtosis used in the formula.
jb_excess_kurtosis2.68212Kurtosis above the normal benchmark of 3.
jb_skew_component.13826Contribution from skewness in the JB formula.
jb_kurt_component.29974Contribution from kurtosis in the JB formula.
jarque_bera284.26194Final Jarque Bera statistic.
jb_p_value.00000p-value from chi-square distribution with 2 degrees of freedom.
jb_reject_051.00Reject normality at the .05 significance level.

SPSS Grouped Normality Context by Sex

The SPSS grouped output shows that G3 remains non-normal within both sex groups. For the female group, N = 383, mean = 12.25, SD = 3.124, skewness = -.857, and kurtosis = 2.683. For the male group, N = 266, mean = 11.41, SD = 3.321, skewness = -.980, and kurtosis = 2.803. The SPSS normality tests are significant in both groups.

SPSS decision summary: The Jarque Bera calculation, Kolmogorov-Smirnov test, Shapiro-Wilk test, histogram, Q-Q plot, and grouped SPSS output all support the same conclusion: G3 final grades significantly depart from normality.

If group comparison is planned after this normality check, also review variance-related guides such as Levene test, Brown-Forsythe test, and Cochran C test. For categorical group summaries, cross tabulation is also useful.

Python Chart-by-Chart Interpretation

The Python charts show the Jarque Bera Test visually. They explain the distribution fit, Q-Q behavior, skewness and kurtosis contributions, chi-square reference decision, cross-variable comparison, skewness-kurtosis map, and group-level normality comparison.

Python Chart 1: Distribution Fit for Jarque Bera Test

Jarque Bera Test Python distribution fit chart showing G3 final grade histogram with fitted normal curve
Python chart comparing the observed G3 final-grade distribution with a fitted normal curve for Jarque Bera Test interpretation.

Detailed interpretation: This chart compares the empirical distribution of G3 with the normal distribution expected under the null hypothesis. The observed bars do not follow the fitted normal curve perfectly. The distribution is not a smooth symmetric bell shape, and the tail behavior is visibly different from normality.

Decision / reporting conclusion: The distribution-fit chart supports the formal Jarque Bera result. G3 should be reported as non-normal rather than normally distributed.

Python Chart 2: Normal Q-Q Plot

Jarque Bera Test Python normal Q-Q plot for G3 final grade normality diagnosis
Python Q-Q plot comparing observed G3 quantiles with theoretical normal quantiles.

Detailed interpretation: In a normally distributed variable, the Q-Q plot points should stay close to the reference line. In this chart, the points depart from the line, especially in the tails. That departure confirms that the empirical quantiles of G3 do not match the expected normal quantiles.

Decision / reporting conclusion: The Q-Q plot supports rejection of normality. This chart should be interpreted together with the Q-Q plot normality check and the formal JB p-value.

Python Chart 3: Skewness and Kurtosis Contributions

Jarque Bera Test Python chart showing skewness and kurtosis contribution components
Python chart showing how skewness and kurtosis contribute to the Jarque Bera statistic.

Detailed interpretation: This chart separates the two parts of the Jarque Bera formula. Skewness captures asymmetry, while kurtosis captures peak and tail behavior. The G3 variable has both negative skewness and elevated kurtosis, so the JB statistic is not inflated by only one minor issue. Both shape components help explain why normality is rejected.

Decision / reporting conclusion: The Jarque Bera rejection is shape-based. G3 differs from normality because of both asymmetry and abnormal tail/peak behavior.

Python Chart 4: Chi-Square Reference Curve

Jarque Bera Test Python chi-square reference curve with observed JB statistic marked
Python chart placing the observed Jarque Bera statistic on a chi-square reference distribution with 2 degrees of freedom.

Detailed interpretation: Under normality, the JB statistic follows a chi-square distribution with 2 degrees of freedom. The observed statistic, about 284.26, is extremely far into the right tail of the reference distribution. This explains why the p-value is reported as essentially zero.

Decision / reporting conclusion: The observed statistic is far beyond the normal acceptance region. Reject the null hypothesis of normality for G3.

Python Chart 5: Jarque Bera Across Variables

Jarque Bera Test Python chart comparing JB statistics across G1 G2 G3 age and absences variables
Python chart comparing Jarque Bera statistics across selected student performance variables.

Detailed interpretation: This chart expands the analysis beyond G3. It helps identify which variables are closest to normality and which are most problematic. G1 is expected to be closer to normal than G3, while absences is expected to show stronger non-normality because count variables commonly have skewed distributions.

Decision / reporting conclusion: Jarque Bera can be used as a screening tool across several variables. G3 is clearly non-normal, and some variables may require additional checks, transformations, robust methods, or nonparametric alternatives.

Python Chart 6: Skewness-Kurtosis Map

Jarque Bera Test Python skewness kurtosis map showing variable distance from normality target
Python skewness-kurtosis map showing how far selected variables sit from the normality target.

Detailed interpretation: The skewness-kurtosis map gives a two-dimensional view of normality. A variable close to skewness 0 and normal kurtosis is more normal-like. Variables far from that target have stronger shape problems. G3 sits away from the normal target because skewness and kurtosis are not ideal.

Decision / reporting conclusion: The map supports the formal Jarque Bera result by showing that G3 has a meaningful shape deviation from the normal benchmark.

Python Chart 7: Group Jarque Bera Comparison

Jarque Bera Test Python grouped comparison chart for G3 final grade by sex group
Python chart comparing group-level Jarque Bera evidence for G3 across sex groups.

Detailed interpretation: This chart checks whether the normality issue disappears after splitting the data by sex group. The SPSS grouped results show that both female and male groups still reject normality. This means subgrouping alone does not solve the distribution problem.

Decision / reporting conclusion: G3 remains non-normal within groups. If group comparisons are performed later, normality and variance assumptions should be reported carefully.

R Chart-by-Chart Validation

The R charts validate the Python and SPSS findings using a separate statistical environment. This is important because matching results across SPSS, Python, and R make the final interpretation stronger and easier to defend in a report.

R Chart 1: Distribution Fit for Jarque Bera Test

Jarque Bera Test R distribution fit chart showing G3 final grade histogram with fitted normal curve
R validation chart comparing the observed G3 distribution with a fitted normal curve.

Detailed interpretation: The R distribution chart confirms the same pattern shown by Python. The G3 distribution does not follow the fitted normal curve exactly. The mismatch supports the conclusion that G3 has a shape problem relative to normality.

Decision / reporting conclusion: R validates the distribution-fit evidence that G3 is not normally distributed.

R Chart 2: Normal Q-Q Plot

Jarque Bera Test R normal Q-Q plot for G3 final grade
R Q-Q plot comparing observed G3 quantiles with theoretical normal quantiles.

Detailed interpretation: The R Q-Q plot shows systematic departure from the normal reference line. The tails do not align perfectly with the theoretical normal distribution, which confirms that the empirical distribution of G3 is not normal.

Decision / reporting conclusion: The R Q-Q plot confirms the Python Q-Q interpretation and supports the Jarque Bera rejection.

R Chart 3: Skewness and Kurtosis Contributions

Jarque Bera Test R chart showing skewness and kurtosis contributions to JB statistic
R validation chart showing skewness and kurtosis contributions to the Jarque Bera statistic.

Detailed interpretation: The R contribution chart confirms that the significant Jarque Bera result comes from measurable distribution shape differences. Both skewness and kurtosis contribute to the final JB statistic.

Decision / reporting conclusion: R confirms that the normality violation is not only visual; it is mathematically reflected in the skewness and kurtosis components.

R Chart 4: Chi-Square Reference Curve

Jarque Bera Test R chi-square reference curve with observed JB statistic
R chart placing the observed Jarque Bera statistic against the chi-square reference curve.

Detailed interpretation: The R reference curve shows that the observed JB statistic lies far in the right tail of the chi-square distribution. This makes the p-value extremely small and explains why the test rejects normality.

Decision / reporting conclusion: The R chi-square reference curve validates the SPSS p-value decision: reject normality for G3.

R Chart 5: Jarque Bera Across Variables

Jarque Bera Test R chart comparing JB statistics across selected variables
R validation chart comparing Jarque Bera statistics across selected variables.

Detailed interpretation: This chart validates the Python comparison across variables. It helps identify which variables are most non-normal and which are closer to the normal distribution. Such comparison is helpful before choosing transformations, robust procedures, or model diagnostics.

Decision / reporting conclusion: R confirms that the Jarque Bera Test can be used as a multivariable screening method before deeper statistical modeling.

R Chart 6: Skewness-Kurtosis Map

Jarque Bera Test R skewness kurtosis map for selected variables
R skewness-kurtosis map showing variable position relative to the normality benchmark.

Detailed interpretation: The R map provides a compact visual summary of each variable’s skewness and kurtosis. Variables closer to the normality target are less problematic. Variables farther away require more careful assumption reporting.

Decision / reporting conclusion: R confirms that G3 does not sit close enough to the normality target to be reported as normally distributed.

R Chart 7: Group Jarque Bera Comparison

Jarque Bera Test R grouped comparison chart for G3 by sex group
R validation chart comparing group-level Jarque Bera evidence for G3 by sex group.

Detailed interpretation: The R grouped chart confirms the SPSS and Python group interpretation. Both groups show non-normality. The result indicates that normality violation is not only caused by mixing groups; it remains present inside the groups.

Decision / reporting conclusion: Group-wise R validation supports the final decision to reject normality for G3 in both overall and grouped contexts.

Advertisement
Google AdSense in-content placement reserved here

SPSS, Python, R and Excel Workflows for Jarque Bera Test

The Jarque Bera Test workflow is similar across software. The analyst should first inspect descriptive statistics, then calculate skewness and kurtosis, compute the JB statistic, calculate the chi-square p-value, inspect plots, and finally write the normality decision.

SPSS Workflow

StepSPSS Menu or SyntaxPurpose
Open datasetFile > Open > DataLoad the SPSS-ready dataset.
Inspect variableAnalyze > Descriptive Statistics > ExploreGenerate descriptives, histogram, Q-Q plot and normality tests.
Record shape valuesDescriptives tableUse skewness and kurtosis for JB interpretation.
Compute JB statisticTransform > Compute Variable or syntaxApply the Jarque Bera formula.
Compute p-valueChi-square CDFCompare JB to chi-square distribution with 2 df.
Export outputOUTPUT EXPORTSave the SPSS output PDF for WordPress resources.

Python Workflow

StepPython ActionPurpose
Read datapandas.read_csv()Load the dataset.
Select target variabledf["G3"].dropna()Prepare valid values.
Run Jarque Berascipy.stats.jarque_bera()Get JB statistic and p-value.
Calculate shapeskew() and kurtosis()Explain why normality is rejected.
Create chartsmatplotlib, scipy and statsmodelsCreate histogram, Q-Q plot and reference curve.
Report decisionAPA sentenceWrite result clearly for readers.

R Workflow

StepR ActionPurpose
Read dataread.csv() or readr::read_csv()Load the dataset.
Select variablena.omit(df$G3)Remove missing values.
Run JB testtseries::jarque.bera.test()Calculate statistic and p-value.
Calculate shapemoments::skewness() and moments::kurtosis()Explain skewness and kurtosis.
Create validation chartsggplot2 or base RValidate Python and SPSS results visually.
Write reportAPA wordingSummarize JB statistic, p-value and conclusion.

Excel Workflow

Excel TaskFormula or ToolPurpose
Count cases=COUNT(A2:A650)Calculate sample size.
Calculate skewness=SKEW(A2:A650)Measure asymmetry.
Calculate excess kurtosis=KURT(A2:A650)Measure tail/peak departure.
Compute JB statistic=(COUNT(A2:A650)/6)*(SKEW(A2:A650)^2+(KURT(A2:A650)^2/4))Apply the JB formula using Excel’s excess kurtosis.
Compute p-value=CHISQ.DIST.RT(B10,2)Calculate chi-square right-tail probability.
Make histogramInsert > Statistic Chart > HistogramVisually inspect distribution shape.

If the Jarque Bera Test is part of a regression or model-checking workflow, use it with other model diagnostics. For functional form problems, see the Ramsey RESET test. For variance problems, see the Goldfeld-Quandt test. For repeated-measures analysis, assumption checks may also involve Mauchly’s test of sphericity and the Greenhouse-Geisser correction.

Code Blocks for Jarque Bera Test

SPSS Syntax for Jarque Bera Test

* Jarque Bera Test in SPSS.
* Main target variable: G3.

TITLE "Jarque Bera Test: G3 final grade normality check".

GET FILE='D:\DATA ANALYSIS\B Normality and Assumption Tests\Jarque Bera Test\SPSS_Output\sav\Jarque-Bera-Test-data.sav'.

EXAMINE VARIABLES=G3
  /PLOT BOXPLOT HISTOGRAM NPPLOT
  /COMPARE GROUPS
  /STATISTICS DESCRIPTIVES
  /CINTERVAL 95
  /MISSING LISTWISE
  /NOTOTAL.

EXAMINE VARIABLES=G3 BY sex
  /PLOT BOXPLOT HISTOGRAM NPPLOT
  /COMPARE GROUPS
  /STATISTICS DESCRIPTIVES
  /CINTERVAL 95
  /MISSING LISTWISE
  /NOTOTAL.

* Verified values from SPSS custom calculation output.
DATASET DECLARE JB_Calculation.
DATASET ACTIVATE JB_Calculation.

INPUT PROGRAM.
NUMERIC jb_n_calc jb_skewness jb_kurtosis jb_excess_kurtosis jb_skew_component jb_kurt_component jarque_bera jb_p_value jb_reject_05.
END CASE.
END FILE.
END INPUT PROGRAM.

COMPUTE jb_n_calc = 649.
COMPUTE jb_skewness = -0.91080.
COMPUTE jb_kurtosis = 5.68212.
COMPUTE jb_excess_kurtosis = jb_kurtosis - 3.
COMPUTE jb_skew_component = jb_skewness**2.
COMPUTE jb_kurt_component = (jb_excess_kurtosis**2) / 4.
COMPUTE jarque_bera = (jb_n_calc / 6) * (jb_skew_component + jb_kurt_component).
COMPUTE jb_p_value = 1 - CDF.CHISQ(jarque_bera,2).
COMPUTE jb_reject_05 = (jb_p_value < .05).
EXECUTE.

FORMATS jb_n_calc (F8.0)
  jb_skewness jb_kurtosis jb_excess_kurtosis jb_skew_component jb_kurt_component jarque_bera jb_p_value (F12.5)
  jb_reject_05 (F4.0).

LIST jb_n_calc jb_skewness jb_kurtosis jb_excess_kurtosis jb_skew_component jb_kurt_component jarque_bera jb_p_value jb_reject_05.

OUTPUT SAVE OUTFILE='D:\DATA ANALYSIS\B Normality and Assumption Tests\Jarque Bera Test\SPSS_Output\spv\Jarque-Bera-Test-output.spv'.

OUTPUT EXPORT
  /CONTENTS EXPORT=VISIBLE LAYERS=PRINTSETTING MODELVIEWS=PRINTSETTING
  /PDF DOCUMENTFILE='D:\DATA ANALYSIS\B Normality and Assumption Tests\Jarque Bera Test\SPSS_Output\pdf\Jarque-Bera-Test-SPSS-Output.pdf'.

Python Code for Jarque Bera Test

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.stats import jarque_bera, skew, kurtosis, chi2, norm
import statsmodels.api as sm

# Load data
df = pd.read_csv("dataset.csv")

# Target variable
x = pd.to_numeric(df["G3"], errors="coerce").dropna()
n = len(x)

# Jarque Bera Test
jb_stat, jb_p = jarque_bera(x)

# Shape statistics
sk = skew(x, bias=False)
excess_kurt = kurtosis(x, fisher=True, bias=False)
ordinary_kurt = excess_kurt + 3

print("N:", n)
print("Skewness:", sk)
print("Excess Kurtosis:", excess_kurt)
print("Ordinary Kurtosis:", ordinary_kurt)
print("Jarque Bera Statistic:", jb_stat)
print("p-value:", jb_p)

alpha = 0.05
if jb_p < alpha:
    print("Reject H0: G3 is not normally distributed.")
else:
    print("Fail to reject H0: no significant evidence against normality.")

# Distribution fit chart
mu = x.mean()
sd = x.std(ddof=1)
xx = np.linspace(x.min(), x.max(), 400)

plt.figure(figsize=(10, 6))
plt.hist(x, bins=20, density=True, alpha=0.70, edgecolor="white")
plt.plot(xx, norm.pdf(xx, mu, sd), linewidth=2)
plt.title("Jarque Bera Test: Distribution Fit for G3")
plt.xlabel("G3 final grade")
plt.ylabel("Density")
plt.tight_layout()
plt.show()

# Q-Q plot
sm.qqplot(x, line="s")
plt.title("Normal Q-Q Plot for G3")
plt.tight_layout()
plt.show()

# Chi-square reference curve
x_chi = np.linspace(0, 20, 400)
plt.figure(figsize=(10, 6))
plt.plot(x_chi, chi2.pdf(x_chi, df=2), linewidth=2)
plt.axvline(jb_stat, linestyle="--")
plt.title("Jarque Bera Statistic on Chi-Square Reference Curve")
plt.xlabel("Chi-square value")
plt.ylabel("Density")
plt.tight_layout()
plt.show()

# Across variables
vars_to_check = ["G1", "G2", "G3", "age", "absences"]
rows = []

for col in vars_to_check:
    y = pd.to_numeric(df[col], errors="coerce").dropna()
    stat, p = jarque_bera(y)
    rows.append({
        "variable": col,
        "N": len(y),
        "skewness": skew(y, bias=False),
        "ordinary_kurtosis": kurtosis(y, fisher=False, bias=False),
        "JB": stat,
        "p_value": p,
        "reject_05": p < 0.05
    })

summary = pd.DataFrame(rows)
print(summary)

# Group comparison by sex
group_rows = []
for group, sub in df.groupby("sex"):
    y = pd.to_numeric(sub["G3"], errors="coerce").dropna()
    stat, p = jarque_bera(y)
    group_rows.append({
        "sex": group,
        "N": len(y),
        "mean": y.mean(),
        "sd": y.std(ddof=1),
        "skewness": skew(y, bias=False),
        "ordinary_kurtosis": kurtosis(y, fisher=False, bias=False),
        "JB": stat,
        "p_value": p,
        "reject_05": p < 0.05
    })

group_summary = pd.DataFrame(group_rows)
print(group_summary)

R Code for Jarque Bera Test

library(readr)
library(dplyr)
library(ggplot2)
library(tseries)
library(moments)

# Load data
df <- read_csv("dataset.csv")

# Target variable
x <- na.omit(as.numeric(df$G3))

# Jarque Bera Test
jb_result <- jarque.bera.test(x)
print(jb_result)

# Shape statistics
n <- length(x)
sk <- skewness(x)
ordinary_kurt <- kurtosis(x)
excess_kurt <- ordinary_kurt - 3

cat("N:", n, "\n")
cat("Skewness:", sk, "\n")
cat("Ordinary Kurtosis:", ordinary_kurt, "\n")
cat("Excess Kurtosis:", excess_kurt, "\n")

if(jb_result$p.value < 0.05){
  cat("Reject H0: G3 is not normally distributed.\n")
} else {
  cat("Fail to reject H0: no significant evidence against normality.\n")
}

# Distribution fit
ggplot(data.frame(G3=x), aes(x=G3)) +
  geom_histogram(aes(y=after_stat(density)), bins=20, fill="skyblue", color="white") +
  stat_function(fun=dnorm, args=list(mean=mean(x), sd=sd(x)), linewidth=1.2) +
  labs(title="Jarque Bera Test: Distribution Fit for G3",
       x="G3 final grade",
       y="Density")

# Q-Q plot
ggplot(data.frame(sample=x), aes(sample=sample)) +
  stat_qq() +
  stat_qq_line() +
  labs(title="Normal Q-Q Plot for G3")

# Across variables
vars_to_check <- c("G1", "G2", "G3", "age", "absences")

summary_tbl <- lapply(vars_to_check, function(v){
  y <- na.omit(as.numeric(df[[v]]))
  jb <- jarque.bera.test(y)
  data.frame(
    variable = v,
    N = length(y),
    skewness = skewness(y),
    ordinary_kurtosis = kurtosis(y),
    JB = as.numeric(jb$statistic),
    p_value = jb$p.value,
    reject_05 = jb$p.value < 0.05
  )
}) |> bind_rows()

print(summary_tbl)

# Group comparison by sex
group_tbl <- df |>
  group_by(sex) |>
  summarise(
    N = sum(!is.na(G3)),
    mean = mean(G3, na.rm=TRUE),
    sd = sd(G3, na.rm=TRUE),
    skewness = skewness(na.omit(G3)),
    ordinary_kurtosis = kurtosis(na.omit(G3)),
    JB = as.numeric(jarque.bera.test(na.omit(G3))$statistic),
    p_value = jarque.bera.test(na.omit(G3))$p.value,
    reject_05 = p_value < 0.05,
    .groups = "drop"
  )

print(group_tbl)

Excel Formulas for Jarque Bera Test

Assume G3 values are in A2:A650.

Sample size:
=COUNT(A2:A650)

Mean:
=AVERAGE(A2:A650)

Standard deviation:
=STDEV.S(A2:A650)

Skewness:
=SKEW(A2:A650)

Excess kurtosis:
=KURT(A2:A650)

Ordinary kurtosis:
=KURT(A2:A650)+3

Jarque Bera statistic:
=(COUNT(A2:A650)/6)*(SKEW(A2:A650)^2+(KURT(A2:A650)^2/4))

If the JB statistic is in B10, p-value:
=CHISQ.DIST.RT(B10,2)

Decision:
=IF(B11<0.05,"Reject normality","Fail to reject normality")

Interpretation:
If p-value < .05, the variable significantly departs from normality.
If p-value >= .05, there is no significant Jarque Bera evidence against normality.

APA Reporting Wording for Jarque Bera Test

When reporting the Jarque Bera Test, include the variable name, sample size, JB statistic, p-value, skewness, kurtosis, and final normality decision. Do not only write “the data were not normal.” Explain what feature of the distribution created the result.

APA-Style Jarque Bera Test Report

A Jarque Bera Test was conducted to assess whether final grades (G3) followed a normal distribution. The test was statistically significant, JB = 284.26, p < .001, N = 649, indicating that G3 significantly departed from normality. The distribution showed negative skewness, skewness = -.91, and elevated kurtosis, excess kurtosis approximately 2.68 to 2.71 depending on estimator. Therefore, the normality assumption was not supported.

Short Report Sentence

The Jarque Bera Test rejected normality for G3, JB = 284.26, p < .001, showing that the final-grade distribution was significantly non-normal because of skewness and kurtosis departures.

Student-Friendly Report Example

The G3 final-grade values do not form a normal bell-shaped distribution. The Jarque Bera Test found a very large statistic and a p-value below .001, so the normality assumption should be rejected.

If this normality check is reported before a hypothesis test, also report the practical result of the main analysis. For example, a confidence interval can make the result easier to understand, and an effect size can show the size of a difference beyond the p-value.

Common Mistakes in Jarque Bera Test Interpretation

MistakeWhy It Is a ProblemCorrect Practice
Confusing ordinary kurtosis and excess kurtosisSome formulas use ordinary kurtosis, while software often reports excess kurtosis.Check the software definition before calculating JB.
Reporting only the p-valueThe reader does not know whether skewness or kurtosis caused the result.Report JB statistic, p-value, skewness and kurtosis.
Ignoring plotsA p-value does not show the shape of the distribution.Use histograms, Q-Q plots and P-P plots with the test.
Assuming non-normal data are unusableMany methods are robust, especially with large samples.Consider the research design, model residuals, sample size and robustness.
Testing the wrong objectIn regression, residual normality is often more important than raw-variable normality.Check model residuals when the method requires residual normality.
Using one normality test onlyDifferent tests detect different types of non-normality.Compare JB with Shapiro-Wilk, K-S, Lilliefors, Ryan-Joiner, D’Agostino-Pearson and visual plots.

Key reminder: The Jarque Bera Test tells you whether skewness and kurtosis are consistent with normality. It does not automatically choose the final statistical method for you. Your final method should depend on the research question, sample size, variable type, assumptions, and reporting purpose.

When to Use Jarque Bera Test

Use the Jarque Bera Test when you want a formal normality test based directly on skewness and kurtosis. It is commonly used in economics, finance, education, social science, business analytics and general statistical reporting.

Use CaseWhy Jarque Bera HelpsExample from This Guide
Testing normality of a continuous variableCombines skewness and kurtosis into one statistic.G3 final grade was tested.
Explaining why normality failsShows whether asymmetry or tail behavior is the issue.G3 has negative skewness and high kurtosis.
Comparing variablesJB can screen multiple variables before modeling.G1, G2, G3, age and absences were compared.
Checking groupsNormality can be evaluated within subgroups.G3 was checked by sex group.
Preparing for later testsAssumption diagnostics guide method choice.Normality was rejected before selecting follow-up methods.

If non-normality is caused by strong skewness, a transformation may sometimes help. For example, the reciprocal transformation may be useful for some right-skewed variables, but it should be justified with before-and-after evidence. If the issue is variance homogeneity rather than normality, check Levene test, Brown-Forsythe test, or Cochran C test.

In model-based research, the Jarque Bera Test can be part of a larger diagnostic workflow. For example, the Ramsey RESET test checks model specification, while the Goldfeld-Quandt test checks heteroscedasticity. For repeated-measures designs, see Mauchly’s test of sphericity and the Greenhouse-Geisser correction. For applied R workflows, the clinical trial data analysis using R guide shows how diagnostics connect with real reporting.

Downloads and Resources for Jarque Bera Test

The resources below include the SPSS output PDF, Python charts, and R validation charts used in this Jarque Bera Test guide.

FAQs About Jarque Bera Test

What is the Jarque Bera Test?

The Jarque Bera Test is a normality test that checks whether a variable has skewness close to 0 and ordinary kurtosis close to 3, which are expected under a normal distribution.

What are the null and alternative hypotheses of the Jarque Bera Test?

The null hypothesis says the data follow a normal distribution. The alternative hypothesis says the data do not follow a normal distribution.

How do I interpret a significant Jarque Bera Test?

A significant result means the variable significantly departs from normality. You should inspect skewness, kurtosis, histograms, Q-Q plots and the purpose of the analysis before choosing the next method.

What was the Jarque Bera result for G3 in this guide?

The verified Jarque Bera result for G3 was JB = 284.26194 with p = 0.00000. Therefore, normality was rejected.

Is Jarque Bera the same as Shapiro-Wilk?

No. Both are normality tests, but Jarque Bera is based on skewness and kurtosis. Shapiro-Wilk uses a different normality-testing logic.

Can Jarque Bera Test be calculated in SPSS?

Yes. SPSS does not always provide a direct menu option for Jarque Bera, but it can be calculated using syntax from sample size, skewness and kurtosis.

Can Jarque Bera Test be calculated in Excel?

Yes. Use COUNT, SKEW, KURT and CHISQ.DIST.RT. Excel’s KURT function returns excess kurtosis, so it can be used directly in the common Excel formula.

What should I do if the Jarque Bera Test rejects normality?

Check plots, look for outliers, consider transformations, evaluate residuals if using regression, use robust procedures if appropriate, or choose nonparametric methods depending on the research question.

Final Conclusion

The Jarque Bera Test is a useful normality test because it links the formal p-value directly to skewness and kurtosis. In this Salar Cafe example, the verified SPSS calculation gives Jarque Bera = 284.26194 and p = 0.00000 for the G3 final-grade variable. Therefore, the null hypothesis of normality is rejected.

The Python charts and R validation charts support the same interpretation. The distribution fit chart shows mismatch with the normal curve, the Q-Q plot shows tail deviations, the skewness-kurtosis contribution charts explain why the statistic is large, and the chi-square reference curve shows why the p-value is extremely small. Grouped analysis also shows that non-normality remains present within sex groups.

The correct reporting conclusion is not simply “the data are bad.” The correct conclusion is that G3 is statistically non-normal because it has meaningful skewness and kurtosis departures. Any later analysis should consider the research design, sample size, robustness of the method, distribution plots, and relevant assumption checks.

Need help applying this to your own data?

Salar Cafe can help interpret output, clean datasets, review assumptions, build dashboards and explain statistical results ethically.

Need help interpreting your data analysis results?

Contact Salar Cafe
Engr. Muhammad Yar Saqib author profile photo

Engr. Muhammad Yar Saqib

WhatsApp Get Data Analysis Help