[section:f_eg F Distribution Examples]

Imagine that you want to compare the standard deviations of two
sample to determine if they differ in any significant way, in this
situation you use the F distribution and perform an F-test.  This
situation commonly occurs when conducting a process change comparison:
"is a new process more consistent that the old one?".

In this example we'll be using the data for ceramic strength from
[@http://www.itl.nist.gov/div898/handbook/eda/section4/eda42a1.htm
http://www.itl.nist.gov/div898/handbook/eda/section4/eda42a1.htm].
The data for this case study were collected by Said Jahanmir of the 
NIST Ceramics Division in 1996 in connection with a NIST/industry 
ceramics consortium for strength optimization of ceramic strength.

The example program is [@../../../example/f_test.cpp f_test.cpp], 
program output has been deliberately made as similar as possible
to the DATAPLOT output in the corresponding 
[@http://www.itl.nist.gov/div898/handbook/eda/section3/eda359.htm
NIST EngineeringStatistics Handbook example].

We'll begin by defining the procedure to conduct the test:

   void f_test(
       double sd1,     // Sample 1 std deviation
       double sd2,     // Sample 2 std deviation
       double N1,      // Sample 1 size
       double N2,      // Sample 2 size
       double alpha)  // Significance level
   {

The procedure begins by printing out a summary of our input data:

   using namespace std;
   using namespace boost::math;

   // Print header:
   cout <<
      "____________________________________\n"
      "F test for equal standard deviations\n"
      "____________________________________\n\n";
   cout << setprecision(5);
   cout << "Sample 1:\n";
   cout << setw(55) << left << "Number of Observations" << "=  " << N1 << "\n";
   cout << setw(55) << left << "Sample Standard Deviation" << "=  " << sd1 << "\n\n";
   cout << "Sample 2:\n";
   cout << setw(55) << left << "Number of Observations" << "=  " << N2 << "\n";
   cout << setw(55) << left << "Sample Standard Deviation" << "=  " << sd2 << "\n\n";

The test statistic for an F-test is simply the ratio of the square of
the two standard deviations:

F = s[sub 1][super 2] / s[sub 2][super 2]

where s[sub 1] is the standard deviation of the first sample and s[sub 2]
is the standard deviation of the second sample.  Or in code:

   double F = (sd1 / sd2);
   F *= F;
   cout << setw(55) << left << "Test Statistic" << "=  " << F << "\n\n";

At this point a word of caution: the F distribution is asymmetric,
so we have to be careful how we compute the tests, the following table
summarises the options available:

[table
[[Hypothesis][Test]]
[[The null-hypothesis: there is no difference in standard deviations (two sided test)]
      [Reject if F <= F[sub (1-alpha/2; N1-1, N2-1)] or F >= F[sub (alpha/2; N1-1, N2-1)] ]]
[[The alternative hypothesis: there is a difference in means (two sided test)]
      [Reject if F[sub (1-alpha/2; N1-1, N2-1)] <= F <= F[sub (alpha/2; N1-1, N2-1)] ]]
[[The alternative hypothesis: Standard deviation of sample 1 is greater
than that of sample 2]
      [Reject if F < F[sub (alpha; N1-1, N2-1)] ]]
[[The alternative hypothesis: Standard deviation of sample 1 is less
than that of sample 2]
      [Reject if F > F[sub (1-alpha; N1-1, N2-1)] ]]
]

Where F[sub (1-alpha; N1-1, N2-1)] is the lower critical value of the F distribution
with degrees of freedom N1-1 and N2-1, and F[sub (alpha; N1-1, N2-1)] is the upper
critical value of the F distribution with degrees of freedom N1-1 and N2-1.

The upper and lower critical values can be computed using the quantile function:

F[sub (1-alpha; N1-1, N2-1)] = `quantile(fisher_f(N1-1, N2-1), alpha)`

F[sub (alpha; N1-1, N2-1)] = `quantile(complement(fisher_f(N1-1, N2-1), alpha))`

In our example program we need both upper and lower critical values for alpha
and for alpha/2:

   double ucv = quantile(complement(dist, alpha));
   double ucv2 = quantile(complement(dist, alpha / 2));
   double lcv = quantile(dist, alpha);
   double lcv2 = quantile(dist, alpha / 2);
   cout << setw(55) << left << "Upper Critical Value at alpha: " << "=  "
      << setprecision(3) << scientific << ucv << "\n";
   cout << setw(55) << left << "Upper Critical Value at alpha/2: " << "=  "
      << setprecision(3) << scientific << ucv2 << "\n";
   cout << setw(55) << left << "Lower Critical Value at alpha: " << "=  "
      << setprecision(3) << scientific << lcv << "\n";
   cout << setw(55) << left << "Lower Critical Value at alpha/2: " << "=  "
      << setprecision(3) << scientific << lcv2 << "\n\n";

The final step is to perform the comparisons given above, and print
out whether the hypothesis is rejected or not:

   cout << setw(55) << left <<
      "Results for Alternative Hypothesis and alpha" << "=  "
      << setprecision(4) << fixed << alpha << "\n\n";
   cout << "Alternative Hypothesis                                    Conclusion\n";
   
   cout << "Standard deviations are unequal (two sided test)          ";
   if((ucv2 < F) || (lcv2 > F))
      cout << "ACCEPTED\n";
   else
      cout << "REJECTED\n";
   
   cout << "Standard deviation 1 is less than standard deviation 2    ";
   if(lcv > F)
      cout << "ACCEPTED\n";
   else
      cout << "REJECTED\n";
   
   cout << "Standard deviation 1 is greater than standard deviation 2 ";
   if(ucv < F)
      cout << "ACCEPTED\n";
   else
      cout << "REJECTED\n";
   cout << endl << endl;

Using the ceramic strength data as an example we get the following
output:

[pre
'''F test for equal standard deviations
____________________________________

Sample 1:
Number of Observations                                 =  240
Sample Standard Deviation                              =  65.549

Sample 2:
Number of Observations                                 =  240
Sample Standard Deviation                              =  61.854

Test Statistic                                         =  1.123

CDF of test statistic:                                 =  8.148e-001
Upper Critical Value at alpha:                         =  1.238e+000
Upper Critical Value at alpha/2:                       =  1.289e+000
Lower Critical Value at alpha:                         =  8.080e-001
Lower Critical Value at alpha/2:                       =  7.756e-001

Results for Alternative Hypothesis and alpha           =  0.0500

Alternative Hypothesis                                    Conclusion
Standard deviations are unequal (two sided test)          REJECTED
Standard deviation 1 is less than standard deviation 2    REJECTED
Standard deviation 1 is greater than standard deviation 2 REJECTED'''
]

In this case we are unable to reject the null-hypothesis, and must instead
reject the alternative hypothesis.

By contrast let's see what happens when we use some different
[@http://www.itl.nist.gov/div898/handbook/prc/section3/prc32.htm 
sample data]:, once again from the NIST Engineering Statistics Handbook:
A new procedure to assemble a device is introduced and tested for
possible improvement in time of assembly. The question being addressed
is whether the standard deviation of the new assembly process (sample 2) is
better (i.e., smaller) than the standard deviation for the old assembly
process (sample 1).

[pre
'''____________________________________
F test for equal standard deviations
____________________________________

Sample 1:
Number of Observations                                 =  11.00000
Sample Standard Deviation                              =  4.90820

Sample 2:
Number of Observations                                 =  9.00000
Sample Standard Deviation                              =  2.58740

Test Statistic                                         =  3.59847

CDF of test statistic:                                 =  9.589e-001
Upper Critical Value at alpha:                         =  3.347e+000
Upper Critical Value at alpha/2:                       =  4.295e+000
Lower Critical Value at alpha:                         =  3.256e-001
Lower Critical Value at alpha/2:                       =  2.594e-001

Results for Alternative Hypothesis and alpha           =  0.0500

Alternative Hypothesis                                    Conclusion
Standard deviations are unequal (two sided test)          REJECTED
Standard deviation 1 is less than standard deviation 2    REJECTED
Standard deviation 1 is greater than standard deviation 2 ACCEPTED'''
]

In this case we take our null hypothesis as "standard deviation 1 is 
less than or equal to standard deviation 2", since this represents the "no change"
situation.  So we want to compare the upper critical value at /alpha/
(a one sided test) with the test statistic, and since 3.35 < 3.6 this
hypothesis must be rejected.  We therefore conclude that there is a change
for the better in our standard deviation.

[endsect][/section:f_eg F Distribution]

[/ 
  Copyright 2006 John Maddock and Paul A. Bristow.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

