Two-Way Anova in IronPython QuickStart Sample
Illustrates how to use the TwoWayAnovaModel class to perform a two-way analysis of variance in IronPython.
View this sample in: C# Visual Basic F#
```Python import numerics from System import Array from Extreme.Statistics import * # Illustrates the use of the TwoWayAnovaModel class for performing # a two-way analysis of variance. # This example investigates the effect of the color and shape # of packages on the sales of the product. The data comes from # 12 stores. Packages can be either red, green or blue in color. # The shape can be either square or rectangular. # Set up the data in an ADO.NET data table. import clr clr.AddReference('System.Data') from System.Data import DataTable dataTable = DataTable() dataTable.Columns.Add("Store", int) dataTable.Columns.Add("Color", str) dataTable.Columns.Add("Shape", str) dataTable.Columns.Add("Sales", float) dataTable.Rows.Add(Array[object]([1, "Blue", "Square", 6])) dataTable.Rows.Add(Array[object]([2, "Blue", "Square", 14])) dataTable.Rows.Add(Array[object]([3, "Blue", "Rectangle", 19])) dataTable.Rows.Add(Array[object]([4, "Blue", "Rectangle", 17])) dataTable.Rows.Add(Array[object]([5, "Red", "Square", 18])) dataTable.Rows.Add(Array[object]([6, "Red", "Square", 11])) dataTable.Rows.Add(Array[object]([7, "Red", "Rectangle", 20])) dataTable.Rows.Add(Array[object]([8, "Red", "Rectangle", 23])) dataTable.Rows.Add(Array[object]([9, "Green", "Square", 7])) dataTable.Rows.Add(Array[object]([10, "Green", "Square", 11])) dataTable.Rows.Add(Array[object]([11, "Green", "Rectangle", 18])) dataTable.Rows.Add(Array[object]([12, "Green", "Rectangle", 10])) # Construct the OneWayAnova object. anova = TwoWayAnovaModel(dataTable, "Color", "Shape", "Sales") # Verify that the design is balanced: if not anova.IsBalanced: print "The design is not balanced." # Perform the calculation. anova.Compute() # The AnovaTable property gives us a classic anova table. # We can write the table directly to the console: print anova.AnovaTable print # A Cell object represents the data in a cell of the model, # i.e. the data related to one combination of levels of each factor. # We can use it to access the group means of our color groups. # First we get the CategoricalScale object so we can easily iterate # through the levels: colorFactor = anova.GetFactor(0) for level in colorFactor.GetLevels(): print "Mean for square boxes group '{0}': {1:.4f}".format(level, anova.Cells[level, "Square"].Mean) # We could have accessed the cells directly as well: print "Variance for red, rectangular packages:", anova.Cells["Red", "Rectangle"].Variance print # The special index Cell.All permits us to summarize the data # over all levels of a factor. For example, to get the means # of the shape groups, we use: shapeFactor = anova.GetFactor(1) for level in shapeFactor.GetLevels(): print "Mean for group '{0}': {1:.4f}".format(level, anova.Cells[Cell.All, level].Mean) print # We can get the summary data for the entire model # by using the 'Cell.All' value for both indices: totalSummary = anova.Cells[Cell.All, Cell.All] print "Summary data:" print "# observations:", totalSummary.Count print "Grand mean: ", totalSummary.Mean ```