Homogeneity Of Variances Tests in IronPython QuickStart Sample

Illustrates how to test a collection of variables for equal variances using classes in the Extreme.Statistics.Tests namespace in IronPython.

View this sample in: C# Visual Basic F#

```Python
import numerics

from Extreme.Mathematics import *

from Extreme.Statistics import *
from Extreme.Statistics.Tests import *

# Illustrates how to perform a goodness of fit test
# using the classes in the Extreme.Statistics.Tests
# namespace.

# One of the underlying assumptions of Analysis of Variance
# (ANOVA) is that the variances in the different groups are
# identical. This QuickStart Sample shows how to use
# the two tests are available that can verify this assumption.

# The data for this QuickStart Sample is measurements of
# the diameters of gears from 10 different batches.
# Two variables are provided:

# batchVariable contains the batch number of each measurement:
batchVariable = CategoricalVariable("batch", [ \
	1,1,1,1,1,1,1,1,1,1, \
    2,2,2,2,2,2,2,2,2,2, \
    3,3,3,3,3,3,3,3,3,3, \
    4,4,4,4,4,4,4,4,4,4, \
    5,5,5,5,5,5,5,5,5,5, \
    6,6,6,6,6,6,6,6,6,6, \
    7,7,7,7,7,7,7,7,7,7, \
    8,8,8,8,8,8,8,8,8,8, \
    9,9,9,9,9,9,9,9,9,9, \
    10,10,10,10,10,10,10,10,10,10 ])

# diameterVariable contains the actual measurements:
diameterVariable = NumericalVariable("diameter", Vector([ \
	1.006, 0.996, 0.998, 1.000, 0.992, 0.993, 1.002, \
    0.999, 0.994, 1.000, 0.998, 1.006, 1.000, 1.002, \
    0.997, 0.998, 0.996, 1.000, 1.006, 0.988, 0.991, \
    0.987, 0.997, 0.999, 0.995, 0.994, 1.000, 0.999, \
    0.996, 0.996, 1.005, 1.002, 0.994, 1.000, 0.995, \
    0.994, 0.998, 0.996, 1.002, 0.996, 0.998, 0.998, \
    0.982, 0.990, 1.002, 0.984, 0.996, 0.993, 0.980, \
    0.996, 1.009, 1.013, 1.009, 0.997, 0.988, 1.002, \
    0.995, 0.998, 0.981, 0.996, 0.990, 1.004, 0.996, \
    1.001, 0.998, 1.000, 1.018, 1.010, 0.996, 1.002, \
    0.998, 1.000, 1.006, 1.000, 1.002, 0.996, 0.998, \
    0.996, 1.002, 1.006, 1.002, 0.998, 0.996, 0.995, \
    0.996, 1.004, 1.004, 0.998, 0.999, 0.991, 0.991, \
    0.995, 0.984, 0.994, 0.997, 0.997, 0.991, 0.998, \
    1.004, 0.997 ]))

# To prepare the data, we first create a CellArray made up
# of the two variables:
cells = CellArray(diameterVariable, batchVariable)
# We then use the GetCellVariables method to obtain 
# individual variables for each value  of the categorical
# variable:
variables = cells.GetCellVariables()

#
# Bartlett's test
#

# Bartlett's test is relatively fast, but has the drawback that 
# it requires the data in the groups to be normally distributed, # and it is not very robust against departures from normality.
# What this means in practice is that the test can't distinguish
# between rejection because of non-homogeneity of variances
# and violation of the normality assumption.

print "Bartlett's test."
			
# We pass the array of variables to the constructor:
bartlett = BartlettTest(variables)

# We can obtan the value of the test statistic through the Statistic property, # and the corresponding P-value through the Probability property:
print "Test statistic: {0:.4f}".format(bartlett.Statistic)
print "P-value:        {0:.4f}".format(bartlett.PValue)

print "Critical value: {0:.4f} at 90%".format(bartlett.GetUpperCriticalValue(0.10))
print "Critical value: {0:.4f} at 95%".format(bartlett.GetUpperCriticalValue(0.05))
print "Critical value: {0:.4f} at 99%".format(bartlett.GetUpperCriticalValue(0.01))

# We can now print the test results:
print "Reject null hypothesis?", "yes" if bartlett.Reject() else "no"

#
# Levene's Test
#

# Levene's test is slower than Bartlett's test, but is generally more reliable.
# It comes in three variants, depending on the measure of location used.
# The default is that the group median is used.

print "\nLevene's Test"

# Once again, we pass an array of Variable objects to the constructor.
# The LeveneTest constructor is overloaded: you can specify
# the type of mean (mean, median, or trimmed mean):
levene = LeveneTest(variables, LeveneTestLocationMeasure.Median)

# We can obtan the value of the test statistic through the Statistic property, # and the corresponding P-value through the Probability property:
print "Test statistic: {0:.4f}".format(levene.Statistic)
print "P-value:        {0:.4f}".format(levene.PValue)

# We can obtain critical values for various significance levels:
print "Critical value: {0:.4f} at 90%".format(levene.GetUpperCriticalValue(0.10))
print "Critical value: {0:.4f} at 95%".format(levene.GetUpperCriticalValue(0.05))
print "Critical value: {0:.4f} at 99%".format(levene.GetUpperCriticalValue(0.01))

# We can now print the test results:
print "Reject null hypothesis?", "yes" if levene.Reject() else "no"
```