Sophie

Sophie

distrib > Fedora > 14 > i386 > by-pkgid > 623999701586b0ea103ff2ccad7954a6 > files > 7356

boost-doc-1.44.0-1.fc14.noarch.rpm

<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">&lt;&lt;</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">&lt;&lt;</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">&lt;&lt;</span> <span class="string">"Sample 1:\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Number of Observations"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span> <span class="special">&lt;&lt;</span> <span class="identifier">N1</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Sample Standard Deviation"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sd1</span> <span class="special">&lt;&lt;</span> <span class="string">"\n\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Sample 2:\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Number of Observations"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span> <span class="special">&lt;&lt;</span> <span class="identifier">N2</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Sample Standard Deviation"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sd2</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Test Statistic"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span> <span class="special">&lt;&lt;</span> <span class="identifier">F</span> <span class="special">&lt;&lt;</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 &lt;= F<sub>(1-alpha/2; N1-1, N2-1)</sub> or F &gt;= 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> &lt;= F &lt;= 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 &lt; 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 &gt; 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">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Upper Critical Value at alpha: "</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span>
   <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">scientific</span> <span class="special">&lt;&lt;</span> <span class="identifier">ucv</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Upper Critical Value at alpha/2: "</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span>
   <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">scientific</span> <span class="special">&lt;&lt;</span> <span class="identifier">ucv2</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Lower Critical Value at alpha: "</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span>
   <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">scientific</span> <span class="special">&lt;&lt;</span> <span class="identifier">lcv</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="string">"Lower Critical Value at alpha/2: "</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span>
   <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">scientific</span> <span class="special">&lt;&lt;</span> <span class="identifier">lcv2</span> <span class="special">&lt;&lt;</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">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">55</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span>
   <span class="string">"Results for Alternative Hypothesis and alpha"</span> <span class="special">&lt;&lt;</span> <span class="string">"=  "</span>
   <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">4</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">fixed</span> <span class="special">&lt;&lt;</span> <span class="identifier">alpha</span> <span class="special">&lt;&lt;</span> <span class="string">"\n\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Alternative Hypothesis                                    Conclusion\n"</span><span class="special">;</span>

<span class="identifier">cout</span> <span class="special">&lt;&lt;</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">&lt;</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">&gt;</span> <span class="identifier">F</span><span class="special">))</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
<span class="keyword">else</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>

<span class="identifier">cout</span> <span class="special">&lt;&lt;</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">&gt;</span> <span class="identifier">F</span><span class="special">)</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
<span class="keyword">else</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>

<span class="identifier">cout</span> <span class="special">&lt;&lt;</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">&lt;</span> <span class="identifier">F</span><span class="special">)</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
<span class="keyword">else</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>
<span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span> <span class="special">&lt;&lt;</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 &lt; 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 &#169; 2006 , 2007, 2008, 2009 John Maddock, Paul A. Bristow,
      Hubert Holin, Xiaogang Zhang, Bruno Lalande, Johan R&#229;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>