Why is the Treatments P-value halved after a Geisser-Greenhouse correction for sphericity I have noticed that when Graphpad Prism does a sphericity correction using the Geisser-Greenhouse correction, it halves the P value for this source of variation (typically Treatments). For example, in the example I am working on, it calculates an F value of 20.25, with DF(num) = 1.391, and DF(den) = 2.783. The P value for this F-ratio should be 0.046 (which you will get if you use FDIST(20.25, 1.391, 2.783) in Excel. However, Prism gives a P value of 0.023 (half of 0.046). On the other hand, for the Individual or Between Rows source, there is no correction for sphericity, and the F-ratio is 0.25, with DF(num) = 2, and DF(den) = 4. It gives a P-value of 0.7901 for this F-ratio, and as you can verify, it is the 'full" P-value. Why does it halve it when there is a Geisser-Greenhouse correction for sphericity? I redid the analysis with no correction for sphericity; it now gives an F-ratio of 20.25, with DF(num) = 2, and DF(den) = 4. And the P-value is the "full" value of 0.0081.
Excel gives the one-tail P-value when the formula FDIST(x, df_num, df_den) is used. Using the above values, it gives a P-value of 0.046 for FDIST(20.25, 1.391, 2.783). To get the two-tail value, we need to double this P-value, not halve it. That is why I am confused.
Any insights? Thank you.
 A: The Geisser-Greenhouse correction leads to a change in the numbers of degrees of freedom and results (almost always) in fractional degrees of freedom. GraphPad Prism computes the P-value correctly accounting for the fractional degrees of freedom.
R gives the same results as Prism:
pf(20.25, 1.391, 2.783, lower.tail = FALSE)
[1] 0.02296042

If you truncate both df values to integers, R gives the same result as Excel:
pf(20.25, 1, 2, lower.tail = FALSE)
[1] 0.04600191

Excel computes P from F incorrectly when the df values are fractional. If you enter a fractional df, it simply removes the fraction so truncates to an integer. So the following Excel formula all give the same result (FDIST is the older form; F.DIST.RT is the newer form). The result, 0.0460, is correct for the first and third lines below (with integer df values), but is wrong for the second and fourth lines (with the fractional df values).
=F.DIST.RT(20.25, 1, 2)
=F.DIST.RT(20.25, 1.391, 2.783)
=FDIST(20.25, 1, 2)
=FDIST(20.25, 1.391, 2.783)

The fact that the incorrect P-value is about twice the correct one is just a coincidence with this example, it seems, and has nothing to do with one- vs two-tails of the distributions.
Bottom line: GraphPad Prism seems to be doing the calculations correctly (as does R) and Excel does not. I have submitted a bug report to Microsoft.
