In this post, we discuss the two cases of testing variances. One is testing whether a population variance or standard deviation is equal to some assumed variance. The second case is testing whether two populations have the same variance. By taking samples from the population and computing the sample
variance, we should be able to form decisions whether the hypothesis should be accepted or not.
| Case | Null | Test statistic | df |
|---|---|---|---|
| single sample | $\sigma^2 = \sigma_0^2$ | $\chi^2 =(n-1) \frac{s^2}{\sigma_0^2}$ | $df = n-1$ |
| two sample | $\sigma_1^2=\sigma_2^2$ | $f= \frac{s_1^2}{s_2^2}$ | $df1 =n1-1, df2= n2-1$ |
Our file "testofvariances.py" consist of two functions to implement the above cases of testing
variances. For case 1, we call vartest, and for case 2, we call twovartest. Both functions return
a tuple (p-value, test stat, critical value(s)), and both functions allows for three alternatives:left-sided, double sided and right-sided tests.
"""
file testofvariances.py
author dr.ernesto p. adorio
U.P. Clark
Clark Field, Pampanga
"""
from math import *
from rstats import *
def vartest(svar, pvar0, n, alpha, side=1):
"""
Performs a basic chisq test for variance with
H0: sigma^2 = \sigma_0^2
Arguments:
svar - sample variance
pvar0 - \sigma_0^2 assumed population variance
n - sample size
"""
teststat = svar/pvar0 * (n -1)
df = n-1
if side == 0:
crit1 = qchisq(alpha/2, df)
crit2 = qchisq(1-alpha/2,df)
pvalue = p(teststat, df)
if pvalue > 0.5:
pvalue = 1-0.5
pvalue *=2
return pvalue, teststat, (crit1, crit2)
elif side == -1:
crit = qchisq(alpha, df)
pvalue = p(teststat, df)
return pvalue, teststat, crit
else:
crit = qchisq(1-alpha, df)
pvalue = 1- pchisq(teststat, df)
return pvalue, teststat, crit
def twovartest(svar1, n1, svar2, n2, alpha, side):
"""
Performs an F-test for testing the null pvar_1 = pvar2
"""
df1 = n1-1
df2 = n2-1
fteststat = float(svar1)/svar2
if side == 0:
#print fteststat, df1, df2
crit1 = qf(alpha/2.0, df1, df2)
crit2 = qf(1-alpha/2.0, df1, df2)
pvalue = pf(fteststat, df1, df2)
if pvalue > 0.5:
pvalue = 1-0.5
pvalue *=2
return pvalue, fteststat, (crit1, crit2)
elif side == -1:
crit = qf(alpha, df1, df2 )
pvalue = pf(fteststat, df1, df2)
else:
crit = qf(1-alpha, df1, df2 )
pvalue = pf(fteststat, df1, df2)
return pvalue, fteststat, crit
def Walpole_tests():
print "Example 8, p.320"
print vartest(1.2**2, 0.9 * 0.9, 10, alpha= 0.05, side=1)
print
print "Example 9, p.322"
print twovartest(16, 12, 25, 10, alpha= 0.10, side = 0)
print
if __name__=="__main__":
Walpole_tests()
When the above file is run under the Python interpreter, it returns the following output:
toto@toto-laptop:~/Blogs/statistics$ python testofvariances.py Example 8, p.320 (0.066881587774126672, 16.0, 16.918977604620448) Example 9, p.322 (0.47864961042191279, 0.64000000000000001, (0.34527730855736571, 3.1024854075283774))
The results looks ok with us at the moment.
No comments:
Post a Comment