3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Chi-Square Test for the Standard Deviation</title>
5 <link rel="stylesheet" href="../../../../../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="../../../../../index.html" title="Math Toolkit">
8 <link rel="up" href="../cs_eg.html" title="Chi Squared Distribution Examples">
9 <link rel="prev" href="chi_sq_intervals.html" title="Confidence Intervals on the Standard Deviation">
10 <link rel="next" href="chi_sq_size.html" title="Estimating the Required Sample Sizes for a Chi-Square Test for the Standard Deviation">
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../../../../more/index.htm">More</a></td>
22 <div class="spirit-nav">
23 <a accesskey="p" href="chi_sq_intervals.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs_eg.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="chi_sq_size.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a>
25 <div class="section math_toolkit_dist_stat_tut_weg_cs_eg_chi_sq_test">
26 <div class="titlepage"><div><div><h6 class="title">
27 <a name="math_toolkit.dist.stat_tut.weg.cs_eg.chi_sq_test"></a><a class="link" href="chi_sq_test.html" title="Chi-Square Test for the Standard Deviation">Chi-Square
28 Test for the Standard Deviation</a>
29 </h6></div></div></div>
31 We use this test to determine whether the standard deviation of a sample
32 differs from a specified value. Typically this occurs in process change
33 situations where we wish to compare the standard deviation of a new
34 process to an established one.
37 The code for this example is contained in <a href="../../../../../../../../example/chi_square_std_dev_test.cpp" target="_top">chi_square_std_dev_test.cpp</a>,
38 and we'll begin by defining the procedure that will print out the test
41 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">chi_squared_test</span><span class="special">(</span>
42 <span class="keyword">double</span> <span class="identifier">Sd</span><span class="special">,</span> <span class="comment">// Sample std deviation</span>
43 <span class="keyword">double</span> <span class="identifier">D</span><span class="special">,</span> <span class="comment">// True std deviation</span>
44 <span class="keyword">unsigned</span> <span class="identifier">N</span><span class="special">,</span> <span class="comment">// Sample size</span>
45 <span class="keyword">double</span> <span class="identifier">alpha</span><span class="special">)</span> <span class="comment">// Significance level</span>
46 <span class="special">{</span>
49 The procedure begins by printing a summary of the input data:
51 <pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span>
52 <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>
54 <span class="comment">// Print header:</span>
55 <span class="identifier">cout</span> <span class="special"><<</span>
56 <span class="string">"______________________________________________\n"</span>
57 <span class="string">"Chi Squared test for sample standard deviation\n"</span>
58 <span class="string">"______________________________________________\n\n"</span><span class="special">;</span>
59 <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>
60 <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">N</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span>
61 <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">Sd</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span>
62 <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">"Expected True Standard Deviation"</span> <span class="special"><<</span> <span class="string">"= "</span> <span class="special"><<</span> <span class="identifier">D</span> <span class="special"><<</span> <span class="string">"\n\n"</span><span class="special">;</span>
65 The test statistic (T) is simply the ratio of the sample and "true"
66 standard deviations squared, multiplied by the number of degrees of
67 freedom (the sample size less one):
69 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">t_stat</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">N</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">Sd</span> <span class="special">/</span> <span class="identifier">D</span><span class="special">)</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">Sd</span> <span class="special">/</span> <span class="identifier">D</span><span class="special">);</span>
70 <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">t_stat</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span>
73 The distribution we need to use, is a Chi Squared distribution with
74 N-1 degrees of freedom:
76 <pre class="programlisting"><span class="identifier">chi_squared</span> <span class="identifier">dist</span><span class="special">(</span><span class="identifier">N</span> <span class="special">-</span> <span class="number">1</span><span class="special">);</span>
79 The various hypothesis that can be tested are summarised in the following
82 <div class="informaltable"><table class="table">
103 The null-hypothesis: there is no difference in standard deviation
104 from the specified value
109 Reject if T < χ<sup>2</sup><sub>(1-alpha/2; N-1)</sub> or T > χ<sup>2</sup><sub>(alpha/2; N-1)</sub>
116 The alternative hypothesis: there is a difference in standard
117 deviation from the specified value
122 Reject if χ<sup>2</sup><sub>(1-alpha/2; N-1)</sub> >= T >= χ<sup>2</sup><sub>(alpha/2; N-1)</sub>
129 The alternative hypothesis: the standard deviation is less
130 than the specified value
135 Reject if χ<sup>2</sup><sub>(1-alpha; N-1)</sub> <= T
142 The alternative hypothesis: the standard deviation is greater
143 than the specified value
148 Reject if χ<sup>2</sup><sub>(alpha; N-1)</sub> >= T
155 Where χ<sup>2</sup><sub>(alpha; N-1)</sub> is the upper critical value of the Chi Squared distribution,
156 and χ<sup>2</sup><sub>(1-alpha; N-1)</sub> is the lower critical value.
159 Recall that the lower critical value is the same as the quantile, and
160 the upper critical value is the same as the quantile from the complement
161 of the probability, that gives us the following code to calculate the
164 <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>
165 <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>
166 <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>
167 <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>
168 <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>
169 <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>
170 <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>
171 <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>
172 <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>
173 <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>
174 <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>
175 <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>
178 Now that we have the critical values, we can compare these to our test
179 statistic, and print out the result of each hypothesis and test:
181 <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>
182 <span class="string">"Results for Alternative Hypothesis and alpha"</span> <span class="special"><<</span> <span class="string">"= "</span>
183 <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>
184 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Alternative Hypothesis Conclusion\n"</span><span class="special">;</span>
186 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard Deviation != "</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">fixed</span> <span class="special"><<</span> <span class="identifier">D</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
187 <span class="keyword">if</span><span class="special">((</span><span class="identifier">ucv2</span> <span class="special"><</span> <span class="identifier">t_stat</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">t_stat</span><span class="special">))</span>
188 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
189 <span class="keyword">else</span>
190 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>
192 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard Deviation < "</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">fixed</span> <span class="special"><<</span> <span class="identifier">D</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
193 <span class="keyword">if</span><span class="special">(</span><span class="identifier">lcv</span> <span class="special">></span> <span class="identifier">t_stat</span><span class="special">)</span>
194 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
195 <span class="keyword">else</span>
196 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>
198 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard Deviation > "</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">fixed</span> <span class="special"><<</span> <span class="identifier">D</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
199 <span class="keyword">if</span><span class="special">(</span><span class="identifier">ucv</span> <span class="special"><</span> <span class="identifier">t_stat</span><span class="special">)</span>
200 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"ACCEPTED\n"</span><span class="special">;</span>
201 <span class="keyword">else</span>
202 <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"REJECTED\n"</span><span class="special">;</span>
203 <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>
206 To see some example output we'll use the <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda3581.htm" target="_top">gear
207 data</a> from the <a href="http://www.itl.nist.gov/div898/handbook/" target="_top">NIST/SEMATECH
208 e-Handbook of Statistical Methods.</a>. The data represents measurements
209 of gear diameter from a manufacturing process. The program output is
210 deliberately designed to mirror the DATAPLOT output shown in the <a href="http://www.itl.nist.gov/div898/handbook/eda/section3/eda358.htm" target="_top">NIST
211 Handbook Example</a>.
213 <pre class="programlisting">______________________________________________
214 Chi Squared test for sample standard deviation
215 ______________________________________________
217 Number of Observations = 100
218 Sample Standard Deviation = 0.00628
219 Expected True Standard Deviation = 0.10000
221 Test Statistic = 0.39030
222 CDF of test statistic: = 1.438e-099
223 Upper Critical Value at alpha: = 1.232e+002
224 Upper Critical Value at alpha/2: = 1.284e+002
225 Lower Critical Value at alpha: = 7.705e+001
226 Lower Critical Value at alpha/2: = 7.336e+001
228 Results for Alternative Hypothesis and alpha = 0.0500
230 Alternative Hypothesis Conclusion
231 Standard Deviation != 0.100 ACCEPTED
232 Standard Deviation < 0.100 ACCEPTED
233 Standard Deviation > 0.100 REJECTED
236 In this case we are testing whether the sample standard deviation is
237 0.1, and the null-hypothesis is rejected, so we conclude that the standard
238 deviation <span class="emphasis"><em>is not</em></span> 0.1.
241 For an alternative example, consider the <a href="http://www.itl.nist.gov/div898/handbook/prc/section2/prc23.htm" target="_top">silicon
242 wafer data</a> again from the <a href="http://www.itl.nist.gov/div898/handbook/" target="_top">NIST/SEMATECH
243 e-Handbook of Statistical Methods.</a>. In this scenario a supplier
244 of 100 ohm.cm silicon wafers claims that his fabrication process can
245 produce wafers with sufficient consistency so that the standard deviation
246 of resistivity for the lot does not exceed 10 ohm.cm. A sample of N
247 = 10 wafers taken from the lot has a standard deviation of 13.97 ohm.cm,
248 and the question we ask ourselves is "Is the suppliers claim correct?".
251 The program output now looks like this:
253 <pre class="programlisting">______________________________________________
254 Chi Squared test for sample standard deviation
255 ______________________________________________
257 Number of Observations = 10
258 Sample Standard Deviation = 13.97000
259 Expected True Standard Deviation = 10.00000
261 Test Statistic = 17.56448
262 CDF of test statistic: = 9.594e-001
263 Upper Critical Value at alpha: = 1.692e+001
264 Upper Critical Value at alpha/2: = 1.902e+001
265 Lower Critical Value at alpha: = 3.325e+000
266 Lower Critical Value at alpha/2: = 2.700e+000
268 Results for Alternative Hypothesis and alpha = 0.0500
270 Alternative Hypothesis Conclusion
271 Standard Deviation != 10.000 REJECTED
272 Standard Deviation < 10.000 REJECTED
273 Standard Deviation > 10.000 ACCEPTED
276 In this case, our null-hypothesis is that the standard deviation of
277 the sample is less than 10: this hypothesis is rejected in the analysis
278 above, and so we reject the manufacturers claim.
281 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
282 <td align="left"></td>
283 <td align="right"><div class="copyright-footer">Copyright © 2006-2010 John Maddock, Paul A. Bristow, Hubert Holin, Xiaogang Zhang, Bruno
284 Lalande, Johan Råde, Gautam Sewani, Thijs van den Berg and Benjamin Sobotta<p>
285 Distributed under the Boost Software License, Version 1.0. (See accompanying
286 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>)
291 <div class="spirit-nav">
292 <a accesskey="p" href="chi_sq_intervals.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../cs_eg.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="chi_sq_size.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a>