[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 22 Feb 2005 05:28:22 -0000
matthew Tue Feb 22 00:28:22 2005 EDT
Modified files:
/loncom/interface/statistics lonproblemanalysis.pm
Log:
So the last commit of code for &numerical_plot_percent was stupid for
plotting percents, but much better in &numerical_plot_differences, which
now works well.
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.112 loncom/interface/statistics/lonproblemanalysis.pm:1.113
--- loncom/interface/statistics/lonproblemanalysis.pm:1.112 Mon Feb 21 23:32:46 2005
+++ loncom/interface/statistics/lonproblemanalysis.pm Tue Feb 22 00:28:21 2005
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.112 2005/02/22 04:32:46 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.113 2005/02/22 05:28:21 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -303,9 +303,17 @@
#
my $total = $stats->{'submission_count'};
return '' if ($total == 0);
- my $min_bin_size = $stats->{'min_abs'};
+ my $min_bin_size = $stats->{'min_percent'};
my $low_bin = $stats->{'lowest_ans'}-$stats->{'max_bin_size'};
my $high_bin = $stats->{'highest_ans'}+$stats->{'max_bin_size'};
+ if ($high_bin > 0 && $low_bin > -$high_bin) {
+ $low_bin = -$high_bin;
+ } elsif ($low_bin < 0 && $high_bin < -$low_bin) {
+ $high_bin = -$low_bin;
+ }
+ if (($high_bin -$low_bin)/$min_bin_size > 1000) {
+ $min_bin_size = abs($high_bin - $low_bin) / 1000;
+ }
my @bins;
for (my $num = $low_bin;$num <= $high_bin;$num+=($min_bin_size/2)) {
push(@bins,$num);
@@ -317,7 +325,7 @@
while (my ($ans,$submissions) = each(%$responses)) {
while (my ($submission,$counts) = each(%$submissions)) {
my ($correct_count,$incorrect_count) = @$counts;
- my $scaled_value = abs(($submission-$ans)/$ans);
+ my $scaled_value = ($submission-$ans)/$ans;
my $bin=0;
for ($bin=0;$bin<$#bins;$bin++) { # not <= for a reason
last if ($bins[$bin]>$scaled_value);
@@ -352,7 +360,7 @@
$plot_incorrect[$i] *= 100/$total;
}
#
- my $title = &mt('Distribution by Percent');
+ my $title = &mt('Percent Difference');
my @labels = (1..scalar(@bins));
my $graph = &Apache::loncommon::DrawBarGraph
($title,'Percent difference from correct','Number of answers',
@@ -369,42 +377,50 @@
#
my $total = $stats->{'submission_count'};
return '' if ($total == 0);
- #
+ my $max_bins = 50;
+ my $min_bin_size = $stats->{'min_abs'};
+ my $low_bin = $stats->{'lowest_ans'}-$stats->{'max_bin_size'};
+ my $high_bin = $stats->{'highest_ans'}+$stats->{'max_bin_size'};
+ if ($high_bin > 0 && $low_bin > -$high_bin) {
+ $low_bin = -$high_bin;
+ } elsif ($low_bin < 0 && $high_bin < -$low_bin) {
+ $high_bin = -$low_bin;
+ }
+ if (($high_bin -$low_bin)/$min_bin_size * 2 > $max_bins) {
+ $min_bin_size = abs($high_bin - $low_bin) / $max_bins * 2;
+ }
my @bins;
- my @labels;
- # Hmmmm, should switch to absolute difference
- for (my $i=1;$i<=20;$i++) {
- push(@bins,$i/2);
- push(@labels,$i);
+ for (my $num = $low_bin;$num <= $high_bin;$num+=($min_bin_size/2)) {
+ push(@bins,$num);
}
#
my @correct;
my @incorrect;
my @count;
while (my ($ans,$submissions) = each(%$responses)) {
- next if ($ans =~ /^_/);
while (my ($submission,$counts) = each(%$submissions)) {
my ($correct_count,$incorrect_count) = @$counts;
- my $value = abs($submission-$ans);
+ my $scaled_value = $submission-$ans;
my $bin=0;
for ($bin=0;$bin<$#bins;$bin++) { # not <= for a reason
- last if ($bins[$bin]>$value);
+ last if ($bins[$bin]>$scaled_value);
}
$correct[$bin]+=$correct_count;
$incorrect[$bin]+=$incorrect_count;
$count[$bin]+=$correct_count+$incorrect_count;
}
}
- #
- my @plot_correct;
- my @plot_incorrect;
+ my @plot_correct = @correct;
+ my @plot_incorrect = @incorrect;
for (my $i=0;$i<=$#bins;$i++) {
- $plot_correct[$i] = $correct[$i]*100/$total;
- $plot_incorrect[$i] = $incorrect[$i]*100/$total;
+ $plot_correct[$i] *= 100/$total;
+ $plot_incorrect[$i] *= 100/$total;
}
- my $title = &mt('Distribution by Magnitude');
+ #
+ my $title = &mt('Difference between submission and correct');
+ my @labels = (1..scalar(@bins));
my $graph = &Apache::loncommon::DrawBarGraph
- ($title,'magnitude difference from correct','Number of answers',
+ ($title,'Difference from Correct','Number of answers',
100,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,
{xskip=>1});
#
@@ -528,14 +544,9 @@
'<th>'.&mt('Correct').'</th>'.
'<th>'.&mt('Count').'</th>'.
'</tr>'.$/;
- for (my $i=0;$i<scalar(@{$bins});$i++) {
- my $lownum;
- if ($i == 0) {
- $lownum = 0;
- } else {
- $lownum = $bins->[$i-1];
- }
- my $highnum = $bins->[$i];
+ for (my $i=0;$i<scalar(@{$bins}-1);$i++) {
+ my $lownum = $bins->[$i];
+ my $highnum = $bins->[$i+1];
$table .=
'<tr>'.
'<td>'.$labels->[$i].'</td>'.