# Statistics in Deal

One can, of course, implement statistical functions in pure Tcl, but the number crunching of Tcl is not particularly fast, so I've implemented two methods in C which do some rudimentary statistics.

The two procedures are sdev and correlate.

# The sdev declaration

The call:

    sdev fitstats

defines a new procedure, fitstats, which is used to accumulate data. After it is defined, we can add data to it:

    fitstats add 4
    fitstats add 5
    fitstats add 6

Then we can dump the data with:

    set average [fitstats average]
    set deviation [fitstats sdev]

In Deal 3.1 you might write:

    # Determine the avearge spade length of north if south has
    # five spades.

    #
    # Use "format/none" because we are not interested in specific
    # deals.
    #
    source format/none

    #
    # Declare the statistical collector
    #
    sdev fitstats

    main {
      reject unless {[spades south]==5}

      fitstats add [spades north]

      accept
    }

    deal_finished {
      puts "Count=[fitstats count]"
      puts "Average=[fitstats average]"
      puts "Deviation=[fitstats sdev]"
    }

The code in deal_finished is executed once, after the appropriate set of deals are generated. Saving this code to the file "fit.tcl" we can run it:

    \deal30> deal -i fit.tcl 100000
    Count=100000
    Average=2.67254
    Deviation=1.20679325006

# The correlation declaration

The correlation declaration defines a routine much like the sdev correlation. It computes the linear correlation between two data bits. In tclsh, with iDeal:

    % correlation baz
    % baz add 10 20
    % baz add 20 30
    % baz add 30 40
    % baz add 40 50
    % baz correlate
    1.0
    %

| Thomas Andrews (deal@thomasoandrews.com) Copyright 1996-2010. Deal is covered by the GNU General Public License. Plane Dealing graphic above created using POV-Ray.