. // Utility functions for admin pages require_once("../inc/util_ops.inc"); // get names of units of a given type function units_of_type($unit, $type) { $names = array(); if (get_class($unit) == $type) { $names[] = $unit->name; } if (is_subclass_of($unit, "BoltSet")) { foreach ($unit->units as $u) { $n = units_of_type($u, $type); $names = array_merge($names, $n); } } return array_unique($names); } // show a menu of select units // function choose_select($top_unit) { echo ""; } // show a menu of exercise sets // function choose_xset($top_unit) { echo ""; } // Find a unit of given name // function lookup_unit($top_unit, $name) { if ($top_unit->name == $name) return $top_unit; if (is_subclass_of($top_unit, "BoltSet")) { foreach ($top_unit->units as $child) { $u = lookup_unit($child, $name); if ($u) return $u; } } return null; } ////// Statistics // compute the mean and stdev of an array // function mean_stdev($array, &$mean, &$stdev) { $n = 0; $m = 0; $m2 = 0; foreach ($array as $x) { $n++; $delta = $x - $m; $m += $delta/$n; $m2 += $delta*($x-$m); } $mean = $m; $stdev = sqrt($m2/($n-1)); } // approximate the 90% confidence interval for the mean of an array // function conf_int_90($array, &$lo, &$hi) { $n = count($array); mean_stdev($array, $mean, $stdev); // I'm too lazy to compute the t distribution $t_90 = 1.7; $d = $t_90 * $stdev / sqrt($n); $lo = $mean - $d; $hi = $mean + $d; } function test_stats() { $a = array(1,1,1,1,0,1,1,1,3, 1, 1, 1, 1); mean_stdev($a, $mean, $stdev); echo "mean: $mean stdev: $stdev\n"; conf_int_90($a, $lo, $hi); echo "lo $lo hi $hi\n"; } //////////// graph drawing function compare_bar($title, $n, $width, $lo, $hi) { $x1 = $width*$lo; $x2 = $width*($hi-$lo); $a1 = number_format($lo*100); $a2 = number_format($hi*100); return " $title
($n students)
$a1 $a2
"; } function compare_bar_insuff($title, $width) { return " $title
Insufficient data
"; } function outcome_graph($x, $width) { $n = $x[0]+$x[1]+$x[2]; if (!$n) return empty_cell(); $x0 = $width*$x[1]/$n; $x1 = $width*$x[0]/$n; $x2 = $width*$x[2]/$n; if ($x[1]/$n>0.05) { $t0 = number_format(100*$x[1]/$n)."%"; } else { $t0 = ""; } $s = " "; if ($x0) { $s .= " "; } if ($x1) { $s .= " "; } if ($x2) { $s .= " "; } $s .= "
$t0

"; return $s; } function time_graph($t, $w) { if ($t == 0) return "---"; $x = (log10($t)+2)*$w/4; $t = number_format($t, 1); return "
$t sec
"; } function score_graph($t, $w) { if ($t == 0) return "---"; $x = $t*$w; $y = (1-$t)*$w; $t = number_format($t*100); $s = " "; if ($x) { $s .= " "; } if ($y) { $s .= " "; } $s .= "
$t%
"; return $s; } function empty_cell() { return "
"; } function empty_row() { return "
"; } function bolt_style() { echo " "; } ?>