| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
| <title>F Distribution Examples</title> |
| <link rel="stylesheet" href="../../../../../../../../../doc/src/boostbook.css" type="text/css"> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.74.0"> |
| <link rel="home" href="../../../../index.html" title="Math Toolkit"> |
| <link rel="up" href="../weg.html" title="Worked Examples"> |
| <link rel="prev" href="cs_eg/chi_sq_size.html" title="Estimating the Required Sample Sizes for a Chi-Square Test for the Standard Deviation"> |
| <link rel="next" href="binom_eg.html" title="Binomial Distribution Examples"> |
| </head> |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
| <table cellpadding="2" width="100%"><tr> |
| <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../../boost.png"></td> |
| <td align="center"><a href="../../../../../../../../../index.html">Home</a></td> |
| <td align="center"><a href="../../../../../../../../../libs/libraries.htm">Libraries</a></td> |
| <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> |
| <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> |
| <td align="center"><a href="../../../../../../../../../more/index.htm">More</a></td> |
| </tr></table> |
| <hr> |
| <div class="spirit-nav"> |
| <a accesskey="p" href="cs_eg/chi_sq_size.html"><img src="../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../weg.html"><img src="../../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binom_eg.html"><img src="../../../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| <div class="section" lang="en"> |
| <div class="titlepage"><div><div><h5 class="title"> |
| <a name="math_toolkit.dist.stat_tut.weg.f_eg"></a><a class="link" href="f_eg.html" title="F Distribution Examples"> F Distribution |
| Examples</a> |
| </h5></div></div></div> |
| <p> |
| 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?". |
| </p> |
| <p> |
| In this example we'll be using the data for ceramic strength from <a href="http://www.itl.nist.gov/div898/handbook/eda/section4/eda42a1.htm" target="_top">http://www.itl.nist.gov/div898/handbook/eda/section4/eda42a1.htm</a>. |
| 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. |
| </p> |
| <p> |
| The example program is <a href="../../../../../../../example/f_test.cpp" target="_top">f_test.cpp</a>, |
| program output has been deliberately made as similar as possible to the |
| DATAPLOT output in the corresponding <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda359.htm" target="_top">NIST |
| EngineeringStatistics Handbook example</a>. |
| </p> |
| <p> |
| We'll begin by defining the procedure to conduct the test: |
| </p> |
| <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">f_test</span><span class="special">(</span> |
| <span class="keyword">double</span> <span class="identifier">sd1</span><span class="special">,</span> <span class="comment">// Sample 1 std deviation |
| </span> <span class="keyword">double</span> <span class="identifier">sd2</span><span class="special">,</span> <span class="comment">// Sample 2 std deviation |
| </span> <span class="keyword">double</span> <span class="identifier">N1</span><span class="special">,</span> <span class="comment">// Sample 1 size |
| </span> <span class="keyword">double</span> <span class="identifier">N2</span><span class="special">,</span> <span class="comment">// Sample 2 size |
| </span> <span class="keyword">double</span> <span class="identifier">alpha</span><span class="special">)</span> <span class="comment">// Significance level |
| </span><span class="special">{</span> |
| </pre> |
| <p> |
| The procedure begins by printing out a summary of our input data: |
| </p> |
| <pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span> |
| <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">;</span> |
| |
| <span class="comment">// Print header: |
| </span><span class="identifier">cout</span> <span class="special"><<</span> |
| <span class="string">"____________________________________\n"</span> |
| <span class="string">"F test for equal standard deviations\n"</span> |
| <span class="string">"____________________________________\n\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">5</span><span class="special">);</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Sample 1:\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Number of Observations"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">N1</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Sample Standard Deviation"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">sd1</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Sample 2:\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Number of Observations"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">N2</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Sample Standard Deviation"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">sd2</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span> |
| </pre> |
| <p> |
| The test statistic for an F-test is simply the ratio of the square of |
| the two standard deviations: |
| </p> |
| <p> |
| F = s<sub>1</sub><sup>2</sup> / s<sub>2</sub><sup>2</sup> |
| </p> |
| <p> |
| where s<sub>1</sub> is the standard deviation of the first sample and s<sub>2</sub> |
| is the standard |
| deviation of the second sample. Or in code: |
| </p> |
| <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">F</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">sd1</span> <span class="special">/</span> <span class="identifier">sd2</span><span class="special">);</span> |
| <span class="identifier">F</span> <span class="special">*=</span> <span class="identifier">F</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Test Statistic"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">F</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span> |
| </pre> |
| <p> |
| 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: |
| </p> |
| <div class="informaltable"><table class="table"> |
| <colgroup> |
| <col> |
| <col> |
| </colgroup> |
| <thead><tr> |
| <th> |
| <p> |
| Hypothesis |
| </p> |
| </th> |
| <th> |
| <p> |
| Test |
| </p> |
| </th> |
| </tr></thead> |
| <tbody> |
| <tr> |
| <td> |
| <p> |
| The null-hypothesis: there is no difference in standard deviations |
| (two sided test) |
| </p> |
| </td> |
| <td> |
| <p> |
| Reject if F <= F<sub>(1-alpha/2; N1-1, N2-1)</sub> or F >= F<sub>(alpha/2; |
| N1-1, N2-1)</sub> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| The alternative hypothesis: there is a difference in means |
| (two sided test) |
| </p> |
| </td> |
| <td> |
| <p> |
| Reject if F<sub>(1-alpha/2; N1-1, N2-1)</sub> <= F <= F<sub>(alpha/2; |
| N1-1, N2-1)</sub> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| The alternative hypothesis: Standard deviation of sample 1 |
| is greater than that of sample 2 |
| </p> |
| </td> |
| <td> |
| <p> |
| Reject if F < F<sub>(alpha; N1-1, N2-1)</sub> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| The alternative hypothesis: Standard deviation of sample 1 |
| is less than that of sample 2 |
| </p> |
| </td> |
| <td> |
| <p> |
| Reject if F > F<sub>(1-alpha; N1-1, N2-1)</sub> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| Where F<sub>(1-alpha; N1-1, N2-1)</sub> 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)</sub> is the |
| upper critical value of the F distribution with degrees of freedom N1-1 |
| and N2-1. |
| </p> |
| <p> |
| The upper and lower critical values can be computed using the quantile |
| function: |
| </p> |
| <p> |
| F<sub>(1-alpha; N1-1, N2-1)</sub> = <code class="computeroutput"><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">fisher_f</span><span class="special">(</span><span class="identifier">N1</span><span class="special">-</span><span class="number">1</span><span class="special">,</span> |
| <span class="identifier">N2</span><span class="special">-</span><span class="number">1</span><span class="special">),</span> <span class="identifier">alpha</span><span class="special">)</span></code> |
| </p> |
| <p> |
| F<sub>(alpha; N1-1, N2-1)</sub> = <code class="computeroutput"><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">fisher_f</span><span class="special">(</span><span class="identifier">N1</span><span class="special">-</span><span class="number">1</span><span class="special">,</span> |
| <span class="identifier">N2</span><span class="special">-</span><span class="number">1</span><span class="special">),</span> <span class="identifier">alpha</span><span class="special">))</span></code> |
| </p> |
| <p> |
| In our example program we need both upper and lower critical values for |
| alpha and for alpha/2: |
| </p> |
| <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">ucv</span> <span class="special">=</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">dist</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">));</span> |
| <span class="keyword">double</span> <span class="identifier">ucv2</span> <span class="special">=</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">dist</span><span class="special">,</span> <span class="identifier">alpha</span> <span class="special">/</span> <span class="number">2</span><span class="special">));</span> |
| <span class="keyword">double</span> <span class="identifier">lcv</span> <span class="special">=</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">dist</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">);</span> |
| <span class="keyword">double</span> <span class="identifier">lcv2</span> <span class="special">=</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">dist</span><span class="special">,</span> <span class="identifier">alpha</span> <span class="special">/</span> <span class="number">2</span><span class="special">);</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Upper Critical Value at alpha: "</span> <span class="special"><<</span> <span class="string">"= "</span> |
| <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">ucv</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Upper Critical Value at alpha/2: "</span> <span class="special"><<</span> <span class="string">"= "</span> |
| <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">ucv2</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Lower Critical Value at alpha: "</span> <span class="special"><<</span> <span class="string">"= "</span> |
| <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">lcv</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Lower Critical Value at alpha/2: "</span> <span class="special"><<</span> <span class="string">"= "</span> |
| <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">scientific</span> <span class="special"><<</span> <span class="identifier">lcv2</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span> |
| </pre> |
| <p> |
| The final step is to perform the comparisons given above, and print out |
| whether the hypothesis is rejected or not: |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> |
| <span class="string">"Results for Alternative Hypothesis and alpha"</span> <span class="special"><<</span> <span class="string">"= "</span> |
| <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">4</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">fixed</span> <span class="special"><<</span> <span class="identifier">alpha</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Alternative Hypothesis Conclusion\n"</span><span class="special">;</span> |
| |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard deviations are unequal (two sided test) "</span><span class="special">;</span> |
| <span class="keyword">if</span><span class="special">((</span><span class="identifier">ucv2</span> <span class="special"><</span> <span class="identifier">F</span><span class="special">)</span> <span class="special">||</span> <span class="special">(</span><span class="identifier">lcv2</span> <span class="special">></span> <span class="identifier">F</span><span class="special">))</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span> |
| <span class="keyword">else</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span> |
| |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard deviation 1 is less than standard deviation 2 "</span><span class="special">;</span> |
| <span class="keyword">if</span><span class="special">(</span><span class="identifier">lcv</span> <span class="special">></span> <span class="identifier">F</span><span class="special">)</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span> |
| <span class="keyword">else</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span> |
| |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard deviation 1 is greater than standard deviation 2 "</span><span class="special">;</span> |
| <span class="keyword">if</span><span class="special">(</span><span class="identifier">ucv</span> <span class="special"><</span> <span class="identifier">F</span><span class="special">)</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span> |
| <span class="keyword">else</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">endl</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| </pre> |
| <p> |
| Using the ceramic strength data as an example we get the following output: |
| </p> |
| <pre class="programlisting">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 |
| </pre> |
| <p> |
| In this case we are unable to reject the null-hypothesis, and must instead |
| reject the alternative hypothesis. |
| </p> |
| <p> |
| By contrast let's see what happens when we use some different <a href="http://www.itl.nist.gov/div898/handbook/prc/section3/prc32.htm" target="_top">sample |
| data</a>:, 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). |
| </p> |
| <pre class="programlisting">____________________________________ |
| 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 |
| </pre> |
| <p> |
| 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 <span class="emphasis"><em>alpha</em></span> (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. |
| </p> |
| </div> |
| <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> |
| <td align="left"></td> |
| <td align="right"><div class="copyright-footer">Copyright © 2006 , 2007, 2008, 2009, 2010 John Maddock, Paul A. Bristow, |
| Hubert Holin, Xiaogang Zhang, Bruno Lalande, Johan Råde, Gautam Sewani and |
| Thijs van den Berg<p> |
| Distributed under the Boost Software License, Version 1.0. (See accompanying |
| file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) |
| </p> |
| </div></td> |
| </tr></table> |
| <hr> |
| <div class="spirit-nav"> |
| <a accesskey="p" href="cs_eg/chi_sq_size.html"><img src="../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../weg.html"><img src="../../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binom_eg.html"><img src="../../../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| </body> |
| </html> |