--- loncom/interface/statistics/lonproblemanalysis.pm 2004/10/29 15:27:39 1.97 +++ loncom/interface/statistics/lonproblemanalysis.pm 2004/10/29 16:10:30 1.99 @@ -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.99 2004/10/29 16:10:30 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,18 @@ 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); + &Apache::lonnet::logthis('correct['.$i.']='.$correct[$i]); + $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 +700,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; } } #