/*

   The following example is how you can do a F-test. Once again,

it is best if you have your numbers in a column and identify

them with a Group ID. That way you have the ability to run as

many sets as you would like. Change things around and see the

different result sets you can get.

   The following reference is a clear explanation of the mathematics

and the interpretation of the numbers. The code examples show how

you can calculate the numbers with some programming ideas involved.

   By C. Eric Cashon

Reference:

DeMuth J. E.,Basic Statistics and Pharmaceutical Statistical Applications,

Marcel Dekker, NY, 1999, P.207-210.

*/

 

USE tempdb

 

CREATE TABLE fTest(TestID INTEGER NOT NULL IDENTITY PRIMARY KEY,

        GroupID1 INTEGER, TestSample1 REAL)

 

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 277.3)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 280.3)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 279.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 275.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 273.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 276.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 281.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 278.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 278.4)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 272.9)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 274.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 276.8)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 269.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 276.3)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (1, 273.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 271.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 274.8)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 271.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 277.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 274.5)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 275.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 276.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 275.9)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 275.5)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 274.0)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 274.9)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 269.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 283.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 280.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (2, 274.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 275.5)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 274.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 267.5)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 274.2)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 270.5)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 284.4)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 275.6)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 277.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 272.3)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 273.4)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 275.1)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 273.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 268.7)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 275.0)

INSERT INTO fTest(GroupID1, TestSample1) VALUES (3, 268.3)

 

--Take a look at the table

SELECT * FROM fTest

 

--Find the Standard Deviation and Mean

SELECT STDEV(TestSample1) AS SD, AVG(TestSample1) AS Mean

   FROM fTest

   GROUP BY GroupID1

 

--Find MSw(mean squared within)

SELECT 14*(SUM(T1.SD)/42) AS MSw FROM

   (SELECT (SQUARE(STDEV(TestSample1))) AS SD

       FROM fTest

       GROUP BY GroupID1) T1

 

--Find Xg(pooled mean)

SELECT 15*(SUM(T1.Mean)/45) AS Xg FROM

   (SELECT (AVG(TestSample1)) AS Mean

       FROM fTest

       GROUP BY GroupID1) T1

                 

--Find MSb(mean squared between)

SELECT (15 * (SUM(SQUARE(Mean - Xg))))/ 2 AS MSb FROM

      (SELECT 1 AS JoinID,(AVG(TestSample1)) AS Mean

        FROM fTest

        GROUP BY GroupID1) AS T1 INNER JOIN

      (SELECT 1 AS JoinID, 15*(SUM(T2.Mean)/45) AS Xg

                   FROM

                   (SELECT (AVG(TestSample1)) AS Mean

                    FROM fTest

                    GROUP BY GroupID1)T2) AS T3

               ON T1.JoinID = T3.JoinID

 

--Put it all together and let the database system return the result.

--With a little more work you could even F-test subgroups down a

--column.

--alpha = .05, reject Ho if F > F(2,42)(.95) = 3.23

SELECT T6.MSw, T6.Xg, T6.MSb, (T6.MSb/T6.MSw)  AS Ftest FROM

              (SELECT DISTINCT (SELECT 14 * (SUM(T1.SD)/42) FROM

                  (SELECT (SQUARE(STDEV(TestSample1))) AS SD

                   FROM fTest

                   GROUP BY GroupID1) T1) AS MSw,

               (SELECT 15 * (SUM(T2.Mean)/ 45)

                    FROM

                   (SELECT (AVG(TestSample1)) AS Mean

                    FROM fTest

                    GROUP BY GroupID1)T2) AS Xg,

               (SELECT (15 * (SUM(SQUARE(Mean - Xg))))/ 2 FROM

                   (SELECT 1 AS JoinID,(AVG(TestSample1)) AS Mean

                    FROM fTest

                    GROUP BY GroupID1) AS T3 INNER JOIN

                   (SELECT 1 AS JoinID, 15 * (SUM(T4.Mean)/ 45) AS Xg

                    FROM

                   (SELECT (AVG(TestSample1)) AS Mean

                    FROM fTest

                    GROUP BY GroupID1)T4) AS T5

                    ON T3.JoinID = T5.JoinID) AS MSb        

             FROM fTest) T6

 

--Clean up

DROP TABLE fTest