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

Greenhouse Geisser Correction: Assumptions, Interpretation, SPSS, Python, R and Excel Guide

Learn Greenhouse Geisser Correction 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
Greenhouse Geisser Correction: Assumptions, Interpretation, SPSS, Python, R and Excel Guide

Repeated-Measures ANOVA, Sphericity Violation, Epsilon Correction and Corrected Degrees of Freedom

Greenhouse-Geisser Correction: Formula, Interpretation, SPSS, Python, R and Excel Guide

Greenhouse-Geisser Correction is used in repeated-measures ANOVA when the sphericity assumption is violated. It corrects the degrees of freedom with the Greenhouse-Geisser epsilon value, making the within-subjects F test safer and less likely to overstate significance. This guide explains Greenhouse-Geisser Correction with verified SPSS output, Python charts, R validation charts, Excel support workflow, corrected p-values, repeated-measures mean profiles, APA reporting wording, common mistakes, and downloadable resources from Salar Cafe.

Advertisement
Google AdSense top placement reserved here

Quick Answer: Greenhouse-Geisser Correction Result

The verified repeated-measures ANOVA used three repeated grade measurements: G1, G2, and G3. The within-subjects factor was Time with three levels. The means increased from G1 = 11.40 to G2 = 11.57 and G3 = 11.91. Because the same students were measured at all three grade points, the correct design is repeated-measures, not three separate independent groups.

The sphericity assumption was checked using Mauchly’s Test of Sphericity. SPSS reported Mauchly’s W = .827, χ²(2) = 122.814, and p < .001. Since the p-value is below .05, sphericity is violated. Therefore, the Greenhouse-Geisser corrected row should be used instead of the sphericity-assumed row.

Hypothesis-style decision: The repeated-measures Time effect tests whether the repeated grade means are equal. The null hypothesis is H0: μG1 = μG2 = μG3. The alternative hypothesis is H1: at least one Time mean is different. After Greenhouse-Geisser correction, the Time effect remains significant, F(1.705, 1104.961) = 36.287, p < .001, partial η² = .053. Therefore, reject the null hypothesis and conclude that the repeated grade means changed significantly across G1, G2 and G3.

Repeated measuresG1, G2, G3
Sample size649
Mauchly decisionp < .001
Use correction?Yes

Greenhouse-Geisser ε.853
Corrected df1.705, 1104.961
Corrected F36.287
Corrected decisionp < .001

Final interpretation: The Greenhouse-Geisser Correction was required because Mauchly’s Test showed a sphericity violation. After applying the correction, the repeated-measures Time effect was still statistically significant. This means student grade means changed significantly across G1, G2 and G3. The correction changed the degrees of freedom but did not change the overall conclusion.

Important note: Greenhouse-Geisser Correction is not a separate mean-comparison test. It is a correction to the repeated-measures ANOVA degrees of freedom after sphericity is violated. To build the full assumption-checking workflow, compare this guide with Mauchly’s Test of Sphericity, Effect Size, Confidence Interval, Levene Test, and Brown-Forsythe Test.

Table of Contents

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

What Is Greenhouse-Geisser Correction?

Greenhouse-Geisser Correction is a repeated-measures ANOVA correction used when the sphericity assumption is violated. Sphericity means that the variances of all pairwise difference scores among repeated-measure levels are equal. When sphericity is violated, the usual sphericity-assumed F test can be too liberal. The Greenhouse-Geisser Correction protects the analysis by reducing the degrees of freedom using an epsilon value.

In this guide, the repeated measurements are G1, G2, and G3. These represent three repeated grade measurements for the same students. Because there are three repeated levels, the sphericity assumption applies. SPSS reports Mauchly’s Test of Sphericity, which is significant in this example. Therefore, the correct repeated-measures ANOVA interpretation should use the Greenhouse-Geisser corrected row.

The Greenhouse-Geisser epsilon in the verified SPSS output is .853. An epsilon value closer to 1 means the sphericity violation is not extremely severe, while a lower epsilon means stronger correction. Here, the correction is meaningful but not extreme. The corrected Time effect remains significant with p < .001. When writing the final report, use the corrected F test together with effect size and confidence interval interpretation where appropriate.

Practical meaning: Greenhouse-Geisser Correction answers this question: “If sphericity is violated, what is the safer repeated-measures ANOVA result?” In this example, the safer corrected result still shows a significant Time effect.

Greenhouse-Geisser Formula and Epsilon Logic

The Greenhouse-Geisser Correction adjusts the degrees of freedom by multiplying them by the Greenhouse-Geisser epsilon value. The F statistic itself remains the same in SPSS, but the degrees of freedom and p-value are recalculated using the corrected degrees of freedom.

Corrected df = Original df × Greenhouse-Geisser ε

For the Time effect in this output, the original numerator degrees of freedom were 2. The Greenhouse-Geisser epsilon was .853. Therefore, the corrected numerator degrees of freedom became approximately:

2 × .853 = 1.705

The original error degrees of freedom were 1296. The corrected error degrees of freedom became approximately:

1296 × .853 = 1104.961

The corrected repeated-measures Time effect was then reported as:

F(1.705, 1104.961) = 36.287, p < .001
Correction ConceptValue in This OutputInterpretation
Mauchly’s TestW = .827, p < .001Sphericity is violated, so correction is needed.
Greenhouse-Geisser epsilon.853Corrects the degrees of freedom.
Huynh-Feldt epsilon.855A less conservative correction with a similar conclusion.
Lower-bound epsilon.500Most conservative correction for three repeated levels.
Corrected Time effectF = 36.287, p < .001The repeated-measures Time effect remains significant.

Formula caution: The Greenhouse-Geisser Correction does not change the repeated-measures means. It changes the degrees of freedom used to evaluate the F test. Therefore, the conclusion should report the corrected degrees of freedom, F statistic, p-value, epsilon, and effect size. For broader model-checking context, use Cochran C Test, Goldfeld-Quandt Test, and Ramsey RESET Test when your design requires those specific diagnostics.

Null and Alternative Hypotheses

The Greenhouse-Geisser Correction is used after a sphericity decision, but the repeated-measures ANOVA still tests the Time effect. For this guide, there are two useful hypothesis sections: one for sphericity and one for the corrected repeated-measures Time effect.

Sphericity Assumption Hypotheses

StatementHypothesisDecision in This Output
Sphericity null hypothesisH0: sphericity is metRejected because Mauchly’s Test p < .001.
Sphericity alternative hypothesisH1: sphericity is violatedSupported because Mauchly’s Test is significant.

Corrected Repeated-Measures Time Effect Hypotheses

StatementHypothesisDecision in This Output
Time effect null hypothesisH0: μG1 = μG2 = μG3Rejected because corrected p < .001.
Time effect alternative hypothesisH1: at least one repeated mean differsSupported because the corrected Time effect is significant.

Hypothesis-style decision: First, Mauchly’s Test rejects the sphericity null hypothesis, so correction is needed. Second, the Greenhouse-Geisser corrected repeated-measures ANOVA rejects the Time-effect null hypothesis. Therefore, the final report should say that the Time effect was significant after Greenhouse-Geisser correction.

Related hypothesis-test note: If the analysis changes from repeated grades to one-sample, directional, or proportion-based questions, use the correct guide such as One Sample Z Test, One-Tailed T Test, or One Proportion Z Test. Greenhouse-Geisser Correction is specifically for repeated-measures ANOVA sphericity correction.

Dataset and Repeated Measures Used

The worked example uses three repeated grade variables from the same 649 students: G1, G2, and G3. SPSS defines a within-subjects factor named Time with three levels. Because the same students have all three grade measurements, this is a repeated-measures design.

Repeated MeasureTime LevelNMeanStandard DeviationInterpretation
G1Time 164911.402.745First repeated grade measurement and lowest mean.
G2Time 264911.572.914Second repeated grade measurement with a slight increase.
G3Time 364911.913.231Final repeated grade measurement and highest mean.

Before interpreting the repeated-measures model, it is useful to review descriptive summaries such as Descriptive Statistics, Frequency Distribution, Five Number Summary, Histogram Interpretation, Box Plot Interpretation, and Coefficient of Variation. These guides help explain the distribution and spread of G1, G2 and G3 before the repeated-measures ANOVA is reported.

Advertisement
Google AdSense middle placement reserved here

Verified SPSS Output Interpretation

The SPSS output provides repeated-measures descriptives, Mauchly’s Test of Sphericity, epsilon values, uncorrected and corrected within-subjects effects, contrast tests, group context by sex, and homogeneity checks. The key reporting result is the Greenhouse-Geisser corrected Time effect.

SPSS Repeated-Measures Descriptive Statistics

MeasureMeanStandard DeviationNInterpretation
G111.402.745649Lowest repeated-measures mean.
G211.572.914649Mean increases slightly from G1.
G311.913.231649Highest repeated-measures mean and largest SD.

SPSS Mauchly’s Test and Epsilon Values

Within-Subjects EffectMauchly’s WApprox. Chi-SquaredfSig.Greenhouse-Geisser εHuynh-Feldt εLower-bound ε
Time.827122.8142p < .001.853.855.500

Mauchly’s Test is significant, so the sphericity assumption is violated. Because the Greenhouse-Geisser epsilon is .853, the degrees of freedom are reduced from the sphericity-assumed values to the corrected values. If you need the full assumption explanation, read Mauchly’s Test of Sphericity before reporting the corrected row.

SPSS Tests of Within-Subjects Effects

Time RowType III SSdfMean SquareFSig.Partial Eta SquaredReporting Decision
Sphericity Assumed86.331243.16536.287p < .001.053Not the main row because sphericity was violated.
Greenhouse-Geisser86.3311.70550.62836.287p < .001.053Main corrected row to report.
Huynh-Feldt86.3311.70950.50936.287p < .001.053Alternative corrected row with nearly identical conclusion.
Lower-bound86.3311.00086.33136.287p < .001.053Most conservative row; still significant.

SPSS Within-Subjects Contrasts

ContrastType III SSdfFSig.Partial Eta SquaredInterpretation
Time Linear83.391150.309p < .001.072There is a significant upward linear grade trend.
Time Quadratic2.94014.075.044.006There is a small quadratic pattern in the repeated profile.

Group Context by Sex

GroupNG1 MeanG2 MeanG3 MeanProfile Interpretation
Female38311.6411.8212.25Female students show a rising mean grade profile.
Male26611.0611.2111.41Male students also show a rising profile but lower means.

Greenhouse-Geisser Group Model

EffectGreenhouse-Geisser dfFSig.Partial Eta SquaredInterpretation
Time1.705, 1103.26431.813p < .001.047The repeated-measures Time effect remains significant when sex is included.
Time × sex1.705, 1103.2642.777.071.004The change pattern is not significantly different by sex after correction.

If the repeated-measures analysis is later combined with categorical summaries, Cross Tabulation can help summarize group membership. For distribution-shape checks before modeling, use Q-Q Plot Normality Check, P-P Plot Normality Check, Kolmogorov-Smirnov Test, Lilliefors Test, D’Agostino-Pearson Test, Cramer-von Mises Test, and Ryan-Joiner Test.

SPSS interpretation summary: Mauchly’s Test was significant, so the sphericity-assumed row should not be the main result. The Greenhouse-Geisser corrected row shows that Time remains statistically significant, F(1.705, 1104.961) = 36.287, p < .001. In the group model, the Time effect remains significant, but the corrected Time × sex interaction is not significant.

Python Chart-by-Chart Interpretation

The Python charts visualize the Greenhouse-Geisser Correction workflow. They show the repeated-measures mean profile, individual spaghetti profiles, covariance heatmap, epsilon values, corrected p-values, pairwise difference boxplots, and group mean profiles.

Python Chart 1: Repeated-Measures Mean Profile

Greenhouse-Geisser Correction Python repeated measures mean profile for G1 G2 G3
Python chart showing the repeated-measures mean profile across G1, G2 and G3.

This chart shows the repeated-measures mean pattern. The average score increases from G1 = 11.40 to G2 = 11.57 and then to G3 = 11.91. This rising profile explains why the repeated-measures Time effect is statistically significant.

The chart shows the substantive mean trend, while the Greenhouse-Geisser Correction handles the assumption problem. Because Mauchly’s Test was significant, the mean profile should be interpreted with the corrected ANOVA row rather than only the sphericity-assumed row. For publication, pair the chart conclusion with Effect Size and Confidence Interval interpretation.

Python Chart 2: Individual Profiles Spaghetti Plot

Greenhouse-Geisser Correction Python individual profiles spaghetti plot across G1 G2 G3
Python spaghetti plot showing individual repeated-measures profiles across G1, G2 and G3.

The spaghetti plot shows that individual students do not all follow exactly the same path across G1, G2 and G3. Some profiles rise, some stay similar, and some may decline. This individual variability is important because repeated-measures ANOVA depends on within-person change patterns.

The Greenhouse-Geisser Correction is relevant because repeated-measures data include dependence across time. The spaghetti plot makes that repeated structure visible and supports the need to treat the observations as related, not independent.

Python Chart 3: Repeated-Measure Covariance Heatmap

Greenhouse-Geisser Correction Python covariance heatmap for repeated measures G1 G2 G3
Python heatmap showing the covariance or association structure among repeated measures.

The covariance heatmap shows how G1, G2 and G3 are related. Repeated grades are expected to be strongly associated because they come from the same students and measure related academic performance. The correction is not based only on high correlations. It is needed when the sphericity structure is not adequate.

The heatmap helps explain the repeated-measures dependence, while Mauchly’s Test and epsilon values determine whether correction is needed. If your project is a regression-diagnostics project instead of repeated measures, a covariance or residual workflow may connect better with Ramsey RESET Test or Goldfeld-Quandt Test.

Python Chart 4: Epsilon Values

Greenhouse-Geisser Correction Python epsilon values chart Greenhouse Geisser Huynh Feldt lower bound
Python chart showing Greenhouse-Geisser, Huynh-Feldt and lower-bound epsilon values.

This chart shows the correction values. The Greenhouse-Geisser epsilon is .853, the Huynh-Feldt epsilon is about .855, and the lower-bound epsilon is .500. The Greenhouse-Geisser value is the main correction used in this guide.

Because ε = .853 is close to 1, the correction is moderate rather than severe. The corrected degrees of freedom are lower than the original degrees of freedom, but not dramatically lower. This explains why the corrected p-value remains significant.

Python Chart 5: Corrected p-values

Greenhouse-Geisser Correction Python corrected p values chart
Python chart comparing uncorrected and corrected p-values for the Time effect.

This chart compares the sphericity-assumed result with the Greenhouse-Geisser, Huynh-Feldt and lower-bound corrected results. In the verified output, the Time effect remains p < .001 under each correction method.

This is the main reporting conclusion: the correction changes the degrees of freedom but not the final decision. The grade means differ significantly across G1, G2 and G3 even after correcting for sphericity violation.

Python Chart 6: Pairwise Difference Boxplots

Greenhouse-Geisser Correction Python pairwise difference boxplots for repeated measures
Python chart showing pairwise difference distributions between repeated measures.

The pairwise difference boxplots help explain why the sphericity assumption matters. The differences between G2 and G1, G3 and G2, and G3 and G1 do not have identical spread. Unequal difference-score variances are the practical reason Mauchly’s Test can become significant.

This chart is useful for teaching because it connects the abstract correction to visible data behavior. The Greenhouse-Geisser Correction adjusts the ANOVA test after those difference-score patterns show that sphericity is not fully satisfied. If the analysis were instead about independent group variance equality, compare the logic with Levene Test, Brown-Forsythe Test, and Cochran C Test.

Python Chart 7: Group Mean Profiles

Greenhouse-Geisser Correction Python group mean profiles for female and male students
Python chart showing repeated-measures mean profiles by sex group.

This chart compares repeated-measures mean profiles for female and male students. Female means are higher at each grade level, while both groups show an upward pattern from G1 to G3. Female means are 11.64, 11.82, and 12.25; male means are 11.06, 11.21, and 11.41.

SPSS shows that the corrected Time effect remains significant when sex is included, but the corrected Time × sex interaction is not significant at p = .071. This means the overall repeated profile changes, but the shape of change is not clearly different between female and male students after correction.

R Chart-by-Chart Validation

The R charts validate the same Greenhouse-Geisser Correction workflow using a separate software environment. They confirm the repeated-measures mean pattern, individual profile variability, covariance structure, epsilon correction values, corrected p-value decision, pairwise difference behavior, and group mean profile interpretation.

R Chart 1: Repeated-Measures Mean Profile

R Greenhouse-Geisser Correction repeated measures mean profile chart
R validation chart showing the repeated-measures mean profile across G1, G2 and G3.

The R mean profile confirms the Python and SPSS pattern. Mean scores increase across the three repeated grade measures. This supports the significant corrected Time effect. It also confirms that the result is not software-specific.

R Chart 2: Individual Profiles Spaghetti Plot

R Greenhouse-Geisser Correction individual profiles spaghetti plot
R validation spaghetti plot showing individual repeated-measures profiles.

The R spaghetti plot validates the repeated-measures structure by showing within-student grade profiles. It confirms that the data should be analyzed as repeated observations rather than independent groups.

R Chart 3: Repeated-Measure Covariance Heatmap

R Greenhouse-Geisser Correction covariance heatmap for repeated measures
R validation heatmap showing the covariance structure among repeated grade measures.

The R covariance heatmap confirms the repeated-measure dependence among G1, G2 and G3. The grade measures are strongly related, which is expected in a within-subjects design.

R Chart 4: Epsilon Values

R Greenhouse-Geisser Correction epsilon values chart
R validation chart showing Greenhouse-Geisser, Huynh-Feldt and lower-bound epsilon values.

The R epsilon chart confirms the correction values. Greenhouse-Geisser epsilon is about .853, meaning corrected degrees of freedom should be used after the sphericity violation.

R Chart 5: Corrected p-values

R Greenhouse-Geisser Correction corrected p values chart
R validation chart comparing corrected p-values for the repeated-measures Time effect.

The R corrected p-value chart validates that the Time effect remains significant after correction. This confirms the SPSS interpretation and supports the final reporting conclusion.

R Chart 6: Pairwise Difference Boxplots

R Greenhouse-Geisser Correction pairwise difference boxplots
R validation chart showing pairwise difference distributions between repeated measures.

The R pairwise difference boxplots validate the sphericity context. Difference-score distributions are not identical, which supports the need to use the corrected repeated-measures result.

R Chart 7: Group Mean Profiles

R Greenhouse-Geisser Correction group mean profiles chart
R validation chart showing repeated-measures mean profiles by sex group.

The R group profile chart confirms the same pattern as Python and SPSS. Female students have higher mean scores at each grade level, while both groups show a rising profile across G1, G2 and G3.

R validation conclusion: The R charts support the same substantive result as SPSS and Python. The grade profile rises over time, sphericity requires correction, and the corrected repeated-measures Time effect remains statistically significant.

Advertisement
Google AdSense in-content placement reserved here

SPSS, R, Python and Excel Workflows for Greenhouse-Geisser Correction

Greenhouse-Geisser Correction is usually applied by repeated-measures ANOVA software. SPSS reports it automatically when running repeated-measures GLM. R can report it through repeated-measures ANOVA packages. Python can calculate repeated-measures ANOVA and corrections through packages such as pingouin. Excel does not provide a direct Greenhouse-Geisser ANOVA row, but it can support interpretation by calculating difference scores, covariance matrices, mean profiles, and pairwise changes.

SPSS Workflow

StepSPSS Menu or SyntaxPurpose
Open datasetFile > Open > DataLoad the SPSS-ready dataset.
Define repeated-measures factorAnalyze > General Linear Model > Repeated MeasuresCreate Time with three levels.
Assign repeated variablesG1, G2, G3Place variables in correct time order.
Read Mauchly’s TestMauchly’s Test of Sphericity tableCheck whether correction is needed.
Use corrected rowTests of Within-Subjects EffectsReport Greenhouse-Geisser row when sphericity is violated.
Export outputFile > Export or OUTPUT EXPORTSave the SPSS output PDF.

R Workflow

StepR ActionPurpose
Read dataread.csv()Load wide-format repeated-measures data.
Add subject IDid = row_number()Identify the repeated observations for each student.
Convert to long formatpivot_longer()Create Time and Score columns.
Run repeated-measures ANOVArstatix::anova_test()Get sphericity test and Greenhouse-Geisser correction.
Plot profilesggplot2Create mean profiles and group profiles.

Python Workflow

StepPython ActionPurpose
Read datapandas.read_csv()Load the dataset.
Add subject IDnp.arange()Identify repeated rows for each student.
Convert to long formatpd.melt()Create Time and Score columns.
Run sphericity testpingouin.sphericity()Check whether correction is needed.
Run repeated-measures ANOVApingouin.rm_anova()Get corrected repeated-measures results.

Excel Workflow

Excel TaskFormula or ToolPurpose
Mean of G1, G2, G3=AVERAGE(range)Create repeated-measures mean profile.
Difference G2 − G1=B2-A2Create first pairwise difference.
Difference G3 − G2=C2-B2Create second pairwise difference.
Difference G3 − G1=C2-A2Create long-span difference.
Difference variance=VAR.S(range)Support sphericity interpretation.
Profile chartLine chartVisualize repeated-measures change.

For complete applied reporting, the workflow should not stop at the corrected p-value. Use Descriptive Statistics for the means and spread, Effect Size for magnitude, Confidence Interval for estimation, and Clinical Trial Data Analysis Using R if your repeated-measures structure comes from a medical or experimental study design.

Code Blocks for Greenhouse-Geisser Correction

SPSS Syntax for Greenhouse-Geisser Correction

* Greenhouse-Geisser Correction through repeated-measures GLM.
* Repeated measures: G1 G2 G3.

SET PRINTBACK=OFF MPRINT=OFF.

TITLE "Greenhouse-Geisser Correction for Repeated-Measures ANOVA".

GLM G1 G2 G3
  /WSFACTOR=Time 3 Polynomial
  /METHOD=SSTYPE(3)
  /PRINT=DESCRIPTIVE ETASQ
  /CRITERIA=ALPHA(.05)
  /WSDESIGN=Time.

* Repeated-measures GLM with sex as a between-subjects factor.
GLM G1 G2 G3 BY sex
  /WSFACTOR=Time 3 Polynomial
  /METHOD=SSTYPE(3)
  /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY
  /PLOT=PROFILE(Time*sex)
  /CRITERIA=ALPHA(.05)
  /WSDESIGN=Time
  /DESIGN=sex.

* Pairwise difference diagnostics for correction context.
COMPUTE diff_G2_G1 = G2 - G1.
COMPUTE diff_G3_G2 = G3 - G2.
COMPUTE diff_G3_G1 = G3 - G1.
EXECUTE.

DESCRIPTIVES VARIABLES=diff_G2_G1 diff_G3_G2 diff_G3_G1
  /STATISTICS=MEAN STDDEV VARIANCE MIN MAX.

CORRELATIONS
  /VARIABLES=G1 G2 G3 diff_G2_G1 diff_G3_G2 diff_G3_G1
  /PRINT=TWOTAIL NOSIG
  /MISSING=PAIRWISE.

OUTPUT EXPORT
  /CONTENTS EXPORT=VISIBLE
  /PDF DOCUMENTFILE="Greenhouse-Geisser-Correction-SPSS-Output.pdf".

Python Code for Greenhouse-Geisser Correction

import pandas as pd
import numpy as np

df = pd.read_csv("dataset.csv")

measures = ["G1", "G2", "G3"]

wide = df[measures + ["sex"]].copy()
for col in measures:
    wide[col] = pd.to_numeric(wide[col], errors="coerce")

wide = wide.dropna(subset=measures).copy()
wide["id"] = np.arange(1, len(wide) + 1)

# Difference score diagnostics
wide["diff_G2_G1"] = wide["G2"] - wide["G1"]
wide["diff_G3_G2"] = wide["G3"] - wide["G2"]
wide["diff_G3_G1"] = wide["G3"] - wide["G1"]

difference_table = wide[["diff_G2_G1", "diff_G3_G2", "diff_G3_G1"]].agg(
    ["mean", "std", "var", "min", "max"]
).T

print(difference_table)

# Long format for repeated-measures ANOVA packages
long_df = wide.melt(
    id_vars=["id", "sex"],
    value_vars=measures,
    var_name="Time",
    value_name="Score"
)

print(long_df.head())

# Optional pingouin workflow:
# pip install pingouin
# import pingouin as pg
# rm = pg.rm_anova(data=long_df, dv="Score", within="Time", subject="id", detailed=True)
# print(rm)
# sph = pg.sphericity(data=wide[measures])
# print(sph)

# Mean profile
mean_profile = long_df.groupby("Time")["Score"].agg(["mean", "std", "count"]).reset_index()
print(mean_profile)

# Group mean profile
group_profile = long_df.groupby(["sex", "Time"])["Score"].agg(["mean", "std", "count"]).reset_index()
print(group_profile)

R Code for Greenhouse-Geisser Correction

# Greenhouse-Geisser Correction in R

df <- read.csv("dataset.csv")

measures <- c("G1", "G2", "G3")
df[measures] <- lapply(df[measures], as.numeric)
df$id <- seq_len(nrow(df))

df$diff_G2_G1 <- df$G2 - df$G1
df$diff_G3_G2 <- df$G3 - df$G2
df$diff_G3_G1 <- df$G3 - df$G1

difference_table <- data.frame(
  difference = c("G2 - G1", "G3 - G2", "G3 - G1"),
  mean = c(mean(df$diff_G2_G1, na.rm = TRUE),
           mean(df$diff_G3_G2, na.rm = TRUE),
           mean(df$diff_G3_G1, na.rm = TRUE)),
  sd = c(sd(df$diff_G2_G1, na.rm = TRUE),
         sd(df$diff_G3_G2, na.rm = TRUE),
         sd(df$diff_G3_G1, na.rm = TRUE)),
  variance = c(var(df$diff_G2_G1, na.rm = TRUE),
               var(df$diff_G3_G2, na.rm = TRUE),
               var(df$diff_G3_G1, na.rm = TRUE))
)

print(difference_table)

library(tidyr)
library(dplyr)

long_df <- df %>%
  select(id, sex, G1, G2, G3) %>%
  pivot_longer(cols = c(G1, G2, G3),
               names_to = "Time",
               values_to = "Score") %>%
  filter(!is.na(Score))

mean_profile <- long_df %>%
  group_by(Time) %>%
  summarise(
    n = n(),
    mean = mean(Score),
    sd = sd(Score),
    .groups = "drop"
  )

print(mean_profile)

# Optional corrected repeated-measures ANOVA:
# install.packages("rstatix")
# library(rstatix)
# result <- anova_test(data = long_df, dv = Score, wid = id, within = Time)
# print(result)
# get_anova_table(result, correction = "GG")

Excel Support Formulas for Greenhouse-Geisser Context

Assume:
G1 is in column A
G2 is in column B
G3 is in column C

Mean of G1:
=AVERAGE(A2:A650)

Mean of G2:
=AVERAGE(B2:B650)

Mean of G3:
=AVERAGE(C2:C650)

Difference G2 minus G1:
=B2-A2

Difference G3 minus G2:
=C2-B2

Difference G3 minus G1:
=C2-A2

Variance of G2 minus G1:
=VAR.S(D2:D650)

Variance of G3 minus G2:
=VAR.S(E2:E650)

Variance of G3 minus G1:
=VAR.S(F2:F650)

Covariance between G1 and G2:
=COVARIANCE.S(A2:A650,B2:B650)

Covariance between G2 and G3:
=COVARIANCE.S(B2:B650,C2:C650)

Important:
Excel can support the interpretation by calculating means, differences and covariance values.
Excel does not provide a simple built-in Greenhouse-Geisser corrected repeated-measures ANOVA table.
Use SPSS, R or Python for formal epsilon corrections and corrected p-values.

APA Reporting Wording for Greenhouse-Geisser Correction

When reporting Greenhouse-Geisser Correction, include the sphericity decision, epsilon value, corrected degrees of freedom, F statistic, p-value, effect size, and mean profile. This makes the report transparent and prevents the common mistake of reporting the sphericity-assumed row after sphericity has been rejected.

APA-Style Sphericity and Correction Report

Mauchly’s Test indicated that the assumption of sphericity was violated for the repeated-measures effect of Time, W = .827, χ²(2) = 122.814, p < .001. Therefore, Greenhouse-Geisser corrected results were interpreted, ε = .853.

APA-Style Corrected Time Effect Report

Using the Greenhouse-Geisser correction, the effect of Time was statistically significant, F(1.705, 1104.961) = 36.287, p < .001, partial η² = .053. Mean scores increased from G1 (M = 11.40, SD = 2.745) to G2 (M = 11.57, SD = 2.914) and G3 (M = 11.91, SD = 3.231).

APA-Style Group Context Report

When sex was included as a between-subjects factor, the Greenhouse-Geisser corrected Time effect remained significant, F(1.705, 1103.264) = 31.813, p < .001, partial η² = .047. However, the Greenhouse-Geisser corrected Time × sex interaction was not significant, F(1.705, 1103.264) = 2.777, p = .071, partial η² = .004.

For a stronger reporting section, pair this APA wording with guides on Effect Size, Confidence Interval, and Central Limit Theorem. If your paper also includes normality diagnostics, connect the repeated-measures report with Q-Q Plot Normality Check and P-P Plot Normality Check.

Common Mistakes in Greenhouse-Geisser Correction Interpretation

MistakeWhy It Is a ProblemCorrect Practice
Reporting the sphericity-assumed row after Mauchly is significantThe uncorrected row may be too liberal.Report the Greenhouse-Geisser corrected row.
Thinking Greenhouse-Geisser changes the meansThe correction changes degrees of freedom, not repeated-measures means.Report the same mean profile but corrected ANOVA df.
Ignoring epsilonEpsilon explains how much the df were corrected.Report Greenhouse-Geisser ε with the corrected result.
Using correction without checking sphericityThe correction is usually tied to a sphericity decision.Report Mauchly’s Test or explain why correction was used.
Writing p = .000SPSS displays very small p-values as .000, but p is not exactly zero.Report p < .001.
Confusing Greenhouse-Geisser with other variance testsLevene, Brown-Forsythe and Cochran C test different assumptions.Use Greenhouse-Geisser for repeated-measures sphericity correction.

Key reminder: Greenhouse-Geisser Correction is a reporting correction for repeated-measures ANOVA after sphericity violation. It should be interpreted with Mauchly’s Test, epsilon values, corrected degrees of freedom, corrected p-values, profile plots and effect size. It should not be confused with independent-group variance tests such as Levene Test, Brown-Forsythe Test, or Cochran C Test.

When to Use Greenhouse-Geisser Correction

Use Greenhouse-Geisser Correction when a repeated-measures ANOVA has a within-subjects factor with three or more levels and the sphericity assumption is violated. It is especially useful in SPSS repeated-measures GLM because SPSS automatically provides Greenhouse-Geisser, Huynh-Feldt and lower-bound rows.

Use Greenhouse-Geisser Correction WhenWhy It HelpsExample from This Guide
You run repeated-measures ANOVAThe same participants are measured multiple times.Students have G1, G2 and G3 scores.
The within-subjects factor has 3+ levelsSphericity becomes relevant.Time has three levels.
Mauchly’s Test is significantSphericity is violated.Mauchly’s p < .001.
You need corrected degrees of freedomThe uncorrected test may be too liberal.Corrected df = 1.705, 1104.961.
You prepare APA reportingCorrection decisions should be transparent.Report ε, corrected F, p and partial η².

For a complete assumption and reporting workflow, use Mauchly’s Test of Sphericity, Descriptive Statistics, Effect Size, Confidence Interval, Q-Q Plot Normality Check, P-P Plot Normality Check, and Kolmogorov-Smirnov Test.

Downloads and Resources for Greenhouse-Geisser Correction

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

FAQs About Greenhouse-Geisser Correction

What is Greenhouse-Geisser Correction?

Greenhouse-Geisser Correction is a repeated-measures ANOVA correction used when the sphericity assumption is violated.

When should I use Greenhouse-Geisser Correction?

Use it when a repeated-measures factor has three or more levels and Mauchly’s Test of Sphericity is significant.

What was the Greenhouse-Geisser epsilon in this example?

The Greenhouse-Geisser epsilon was .853.

Was sphericity violated in this example?

Yes. Mauchly’s Test was significant, W = .827, χ²(2) = 122.814, p < .001.

What was the corrected repeated-measures ANOVA result?

The Greenhouse-Geisser corrected Time effect was significant, F(1.705, 1104.961) = 36.287, p < .001, partial η² = .053.

Does Greenhouse-Geisser Correction change the mean values?

No. It changes the degrees of freedom used for the F test. The repeated-measures means remain the same.

Is Greenhouse-Geisser more conservative than Huynh-Feldt?

Yes. Greenhouse-Geisser is generally more conservative, while Huynh-Feldt is usually less conservative.

What does epsilon mean?

Epsilon is the correction factor used to adjust degrees of freedom when sphericity is violated.

What happens if Mauchly’s Test is not significant?

If Mauchly’s Test is not significant, the sphericity-assumed row may usually be reported.

Can Excel run Greenhouse-Geisser Correction?

Excel does not provide a simple built-in Greenhouse-Geisser corrected repeated-measures ANOVA table. Use SPSS, R or Python for formal corrected results.

How do I run Greenhouse-Geisser Correction in SPSS?

Use Analyze > General Linear Model > Repeated Measures. SPSS automatically provides Greenhouse-Geisser corrected rows in the Tests of Within-Subjects Effects table.

How should I report Greenhouse-Geisser Correction in APA style?

Report Mauchly’s Test, epsilon, corrected degrees of freedom, F statistic, p-value and effect size. For example: Greenhouse-Geisser corrected results showed a significant Time effect, F(1.705, 1104.961) = 36.287, p < .001, partial η² = .053.

Which internal guides should I use with this topic?

Use Mauchly’s Test of Sphericity, Effect Size, Confidence Interval, Q-Q Plot Normality Check, P-P Plot Normality Check, and Descriptive Statistics.

Advertisement
Google AdSense bottom placement reserved here

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