--- loncom/interface/statistics/lonproblemanalysis.pm 2004/10/29 15:27:39 1.97
+++ loncom/interface/statistics/lonproblemanalysis.pm 2004/10/29 16:13:45 1.100
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.97 2004/10/29 15:27:39 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.100 2004/10/29 16:13:45 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -390,11 +390,15 @@ sub radio_response_analysis {
my $foildata = $problem_analysis->{'_Foils'};
my ($table,$foils,$concepts) = &build_foil_index($problem_analysis);
#
+ my %true_foils;
my $num_true = 0;
- foreach my $foil (@$foils) {
- if ($foildata->{$foil}->{'value'} eq 'true') {
- $num_true++;
+ if (! $problem_analysis->{'answercomputed'}) {
+ foreach my $foil (@$foils) {
+ if ($foildata->{$foil}->{'value'} eq 'true') {
+ $true_foils{$foil}++;
+ }
}
+ $num_true = scalar(keys(%true_foils));
}
#
$analysis_html .= $table;
@@ -433,7 +437,6 @@ sub radio_response_analysis {
#
$analysis_html.='
';
for (my $plot_num = 1;$plot_num<=$ENV{'form.NumPlots'};$plot_num++) {
- &Apache::lonnet::logthis('plot num = '.$plot_num);
# classify data ->correct foil -> selected foil
my ($restriction_function,
$correct_foil_title,$incorrect_foil_title,
@@ -509,7 +512,8 @@ sub radio_response_analysis {
if ($problem_analysis->{'answercomputed'} || $num_true > 1) {
($stacked_plot,$count_by_foil) =
&RR_create_stacked_selection_plot($foils,$foil_choice_data,
- $incorrect_foil_title);
+ $incorrect_foil_title,
+ \%true_foils);
}
#
if ($concept_plot ne '' ||
@@ -627,14 +631,18 @@ sub RR_concept_plot {
sub RR_create_percent_selected_plot {
my ($concepts,$foils,$foil_data,$title) = @_;
#
- my %foil_selections;
- my %true;
+ if ($foil_data->{'_count'} == 0) { return ''; };
+ my %correct_selections;
+ my %incorrect_selections;
foreach my $foil (@$foils) {
# foil_data has format $foil_data->{true_foil}->{selected foil}
next if (! exists($foil_data->{$foil}));
- $true{$foil}++;
while (my ($f,$count)= each(%{$foil_data->{$foil}})) {
- $foil_selections{$f}+=$count;
+ if ($f eq $foil) {
+ $correct_selections{$foil} += $count;
+ } else {
+ $incorrect_selections{$foil} += $count;
+ }
}
}
#
@@ -643,24 +651,17 @@ sub RR_create_percent_selected_plot {
my @correct;
my @incorrect;
#
- my $total =0;
+ my $total = $foil_data->{'_count'};
for (my $i=0;$i[$i];
- if ($true{$foil}) {
- $correct[$i] = $foil_selections{$foil};
- $incorrect[$i] = 0;
- } else {
- $correct[$i] = 0;
- $incorrect[$i] = $foil_selections{$foil};
- }
- $total+=$foil_selections{$foil};
+ $correct[$i] = $correct_selections{$foil};
+ $incorrect[$i] = $incorrect_selections{$foil};
}
- if ($total == 0) { return ''; };
for (my $i=0;$i<=$#correct;$i++) {
- $correct[$i] = sprintf('%0f',$correct[$i]/$total*100);
+ $correct[$i] = sprintf('%2f',$correct[$i]/$total*100);
}
for (my $i=0;$i<=$#incorrect;$i++) {
- $incorrect[$i] = sprintf('%0f',$incorrect[$i]/$total*100);
+ $incorrect[$i] = sprintf('%2f',$incorrect[$i]/$total*100);
}
#
# Put a blank in the data sets between concepts, if there are concepts
@@ -698,23 +699,29 @@ sub RR_create_percent_selected_plot {
}
sub RR_create_stacked_selection_plot {
- my ($foils,$foil_data,$title)=@_;
+ my ($foils,$foil_data,$title,$true_foils)=@_;
#
my @dataset; # array of array refs - multicolor rows $datasets[row]->[col]
my @labels;
my $count;
my %column; # maps foil name to column in @datasets
for (my $i=0;$i[$i];
+ if (defined($true_foils) && scalar(keys(%$true_foils)) > 0 ) {
+ next if (! $true_foils->{$foil} );
+ push(@labels,$i+1);
+ } else {
+ next if (! exists($foil_data->{$foil}));
+ push(@labels,$i+1);
+ }
next if (! exists($foil_data->{$foils->[$i]}));
- my $correct_foil = $foils->[$i];
- push(@labels,$i+1);
- $column{$correct_foil}= $count++;
+ $column{$foil}= $count++;
for (my $j=0;$j{$correct_foil}->{$foils->[$j]};
+ $value += $foil_data->{$foil}->{$foils->[$j]};
}
- $dataset[$j]->[$column{$correct_foil}]=$value;
+ $dataset[$j]->[$column{$foil}]=$value;
}
}
#
@@ -1226,7 +1233,6 @@ sub OR_time_process_data {
if ($end_index == scalar(@$performance_data)-1) {
$end_index++;
}
- &Apache::lonnet::logthis(' '.$begin_index.':'.$end_index);
my $count;
for (my $i=$begin_index;$i<$end_index;$i++) {
my $attempt = $performance_data->[$i];
@@ -1246,7 +1252,6 @@ sub OR_time_process_data {
}
}
}
- &Apache::lonnet::logthis('count = '.$count);
return (\%processed_time_data,$correct,$data_count,
scalar(keys(%distinct_students)));
}