  Let me begin by confessing that I wrote this in part as an exercise in
programming the TI-92.  It's based on a similar program that I wrote for the
TI-85 which in turn was written out of a need to have some way to analyze final
exam scores for large classes (e.g. 500+ students) when there was no computer
available at the grading site (when is there ever one??).  When I finished with
this program I decided that it was worth sharing with others.

  There are three items contained in the group file grdanlze.92g which when
transferred to the TI-92 will all be in the main folder (see note 3 below if you
wish to either use them from or move them to another folder ). The first item is
the primary program, ganalyze().  This is the program you will run to do all the
work for you -- drawing histograms, finding the stats, grouping different classes
scores together, removing outlying scores, and so on.  The second is an ancillary
program, condense(), which is used by ganalyze() and is also of a slight amount
of use in its own right: it takes a list of repeated scores and rewrites them as
an equivalent data variable.  The third is a function, concat(), which is used by
ganalyze() and is also very useful by itself: it takes two given lists and
concatenates them.


  RUNNING ganalyze():

  The program is straightforward: choices are made via the toolbar and menus, and
input is given thru dialog boxes.  The main thing to be aware of is that the
scores you wish to work with should already be saved as lists BEFORE you begin to
run the program (e.g., {20, 34, 42, 48} -> exam2).  You will not be given the
opportunity to enter any actual scores while you are running ganalyze(), however,
you WILL be able to combine different sets of scores, as well as to eliminate
outlying scores that you think should not be included in any statistical
analysis.

  Once you have started the program you will need to enter the name of the list
of scores that you will be initially working with (e.g., exam2 from the above
note).  If you make a mistake you can enter the name again (error checking to
look for accidental and/or careless mistakes is present throughout the program).
After the name has been entered you will be presented with the main toolbar which
has five selections, two of which have menu items beneath.  From left to right,
here is what each does:

     Stat:  Does a one variable statistical analysis of the scores.  Use the
up/down arrow to see all the data.

     Plot:  Displays a menu of five items, all related to graphical plots of the
data:

          Histogram:  Graphs a histogram of the scores.  You will be asked to
give a bucket/bar width, with the default being the minimal possible for a graph
to be constructed

          Box:  Draws a box plot of the current scores.

          Trace:  Allows you to trace the last drawn plot using the left/right
arrow keys. Use ESC when done.

          Alter window height:  The algorithm I use for the window height (ymax)
can often give a display which is inadequate (i.e. not tall enough).  This item
will present you with a dialog box to change the height, with the default being
the current value for ymax.

          Save as pic:  Allows you to give a name to save the current plot under
so that you can recall it later.  The picture is saved in whatever folder you
were in when you started ganalyze().

     Modify:  This allows you to specify two values, a lower bound and an upper
bound, and then the program proceeds to toss out all scores that don't lie in the
range [lower bound, upper bound].  The original set of scores is NOT affected by
this --- just the internal set the program is using.

     New Grades:  Has a menu with two choices beneath it:

          Single Set:  Lets you choose a new set of grades to work with.

          Multiple Sets:  Lets you specify several lists of grades (no limit on
how many) that are to be combined into a new set to work with.  This new list
will be available to you when ganalyze() finishes (it's a global variable) so
that you can continue to work with it in the future.  Because of this it is
important to think about what name you give this new list --- you don't want to
replace a list that already exists.

     Quit:  This should be self-explanatory.


  NOTES for ganalyze():
    1. There is no upper limit (other than memory) on how large a list you can
use in ganalyze(). However, the larger the list the longer you have to wait for
some operations.  I have tried to speed things up by using a data variable (see
condense() below) but that can take time to set up.  For example, a list of 650
items takes one minute to process.  The positive side is that histograms etc. go
much faster (without processing, each histogram for the 650 item list would take
over a minute).
    2.  There is no limit on what values the grades can take.  You can use
ganalyze() for 100 pt exams or 500 point exams --- it makes no difference.
    3.  If you are going to use ganalyze() from a different folder than the one
it is stored in, you will need to modify the code (where it calls condense and
concat) to include the proper path name.  All this really amounts to is placing
<folder name\> in front of each call of condense and concat


  RUNNING condense(origlist,datastr):

  Origlist is a list of numeric values, datastr the name to give to the data
variable to place the result in.  The list of values is sorted and repeats
removed with the result being placed in the first column of the data variable.  A
count of how often each value occurs is kept and placed in the second column of
the data variable, so that when both the columns are read as (value, freq) they
end up describing the original list.


  RUNNING concat(list1, list2)

  list1 and list2 are lists (no limits on types of entries). They are
concatenated (list1 first) and the resulting list is returned.


  QUESTIONS?
  My e-mail address is rlittle@math.utk.edu; I also subscribe to the graph-ti
mailing list.
