mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			221 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			221 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | [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). | ||
|  | ] | ||
|  | 
 |