WeBWorK Main Forum

multi-part problems and avoid guessing

multi-part problems and avoid guessing

by Joel Trussell -
Number of replies: 5
In many of the engineering problems we ask for and analytic solution (formula, function, etc.) then ask questions about attributes of the solution or perhaps have the student identify a graph of the function. These second parts are multiple choice.
We find that many students try to guess the answers to the multiple choice parts without working the analytic part. This uses up attempts but is a reasonable strategy for maximizing points in the problem.
One way around this is a scaffold problem where access to the second part depends on getting the first part correct. This stops the student cold if s/he runs out of attempts and we don't get to test if the student can determine the attributes or 2nd parts.
There may be other ways but I"m not aware of them. It would be nice to carry the parameters acorss to a continuation problem and start the grading afresh.
Another option, which would be useful in many other cases would be to allow varying attempts for different parts of the problem - 10 attempts for the analytic part but only 1 or 2 for the multiple choice parts. I know this is not currently possible but I wonder if it is even feasible within the Webworik framework.
At the moment, I"ll pursue the scaffold approach.
Thanks
Joel

In reply to Joel Trussell

Re: multi-part problems and avoid guessing

by Danny Glin -
We have run into this same issue with some of our statistics questions (e.g. hypothesis tests, where the final question is whether or not to reject the null hypothesis).

Giving a different number of attempts to each part of a question poses some technical issues right now, because WeBWorK only stores one value of max attempts for the whole question.

Your suggestion about carrying parameters across to a continuation problem has been discussed historically, but I'm not sure was ever well implemented. One way to do this is to manually set the seed on the continuation problem to match the seed on the initial problem, and then have the same code in both, but with different questions. Unfortunately there is no automated way to do this in the interface, so right now it would probably involve either going through students one by one, or running a database query immediately after assigning the set to users.

A couple of suggestions on ways to mitigate the guessing on the second part:

You can use the MultiAnswer functionality to only give credit for the second part if the first part is correct. One variation of this that we have used is to give credit for the second part based on the answer the student gave in the first part. This way, if the student gets the first part wrong, they can still get credit for the second part if their answer is correct based on what they entered for the first part.

Another thing you can do (either independently or with the above) is vary the weighting of the final part of the question. You can make the multiple choice parts worth a smaller portion of the score on the question, which gives less reward for guessing on the latter part without completing the longer part.

I realize that neither of these completely accomplish what you desire, but they should at least reduce the reward for guessing.
In reply to Danny Glin

Re: multi-part problems and avoid guessing

by Joel Trussell -
Thanks - the weighted parts looks like a good first approach. If you make the multiple choice parts sufficiently small, they will figure out that thye shouldn't waste attempts on them. The multipart problem look intriguing and we'll investigate.
I tried the weighted part method unsuccessfully. I tried a weighting of 80/10/10 and got parts b and c correct - but Webwork said the test student got 67%, not 80% as I'd expected.
WEIGHTED_ANS($F5->cmp(), 80 );
WEIGHTED_ANS( $popup->cmp(), 10 );
WEIGHTED_ANS( $popupc->cmp(), 10 );


the problem is copied below

# DESCRIPTION
# Problem from 'Mathematics: The Language of Electrical and Computer Engineering', Viniotis and Trussell, 3rd ed.
# WeBWorK problem written by Joel Trussell, <hjt@ncsu.edu>
# ENDDESCRIPTION

## DBsubject(Electrical Engineering)
## DBchapter(Fourier Series)
## DBsection(Problems)
## Institution(North Carolina State University)
## Author(H. J. Trussell)
## TitleText1('Mathematics: The Language of Electrical and Computer Engineering')
## AuthorText1('Viniotis and Trussell')
## EditionText1('3')
## Problem1('9.31')


#################################
# Initialization

DOCUMENT();

loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"PGchoicemacros.pl",
"PGgraphmacros.pl",
"parserPopUp.pl",
"unionTables.pl",
"weightedGrader.pl"
);

$refreshCachedImages=1;

TEXT(beginproblem());


################################
# Setup

Context("Numeric");
Context()->flags->set( reduceConstants=>0 );
Context()->variables->are( t=> "Real" );
Context()->flags->set(
tolerance => 0.001,
tolType => "absolute",
);

#
# Part A
#

$T = random(1,6,1);
$w0 = 2*pi/$T;
$f = random(2,8,1);
$f2 = 2 * $f;
$Ymax = 1.5*$f;
$Ymin = -1.5*$f;

$F1 = Compute("$f/2 + $f2/pi cos($w0 t)");
$F3 = Compute("$f/2 + $f2/pi cos($w0 t) - $f2/(3 pi) cos(3 $w0 t) ");
$F5 = Compute("$f/2 + $f2/pi cos($w0 t) - $f2/(3 pi) cos(3 $w0 t) + $f2/(5 pi) cos(5 $w0 t)");

#
# Part B
#

$g1 = $F3;
$g2 = Compute("$f/2 + $f2/pi sin($w0 t) - $f2/(3 pi) sin(3 $w0 t)");
#$g2 = Compute("$f/2 + $f2/pi cos($w0 t) - $f2/(3 pi) cos(3 $w0 t) ");;
$g3 = -($F5);

$g[0] = "$F5 for t in <-$T,$T> using color:red and weight:2";
$gr[0] = init_graph(-$T,$Ymin,$T,$Ymax,'axes'=>[0,0]);
$gr[0]->lb('reset');
$gr[0]->lb(new Label(5.25,0.25,'t','black','center','middle'));
$gr[0]->lb(new Label(0.25,5.25,'y','black','center','middle'));

$g[1] = "$g1 for t in <-$T,$T> using color:red and weight:2";
$gr[1] = init_graph(-$T,$Ymin,$T,$Ymax,'axes'=>[0,0]);
$gr[1]->lb('reset');
$gr[1]->lb(new Label(5.25,0.25,'t','black','center','middle'));
$gr[1]->lb(new Label(0.25,5.25,'y','black','center','middle'));

$g[2] = "$g2 for t in <-$T,$T> using color:red and weight:2";
$gr[2] = init_graph(-$T,$Ymin,$T,$Ymax,'axes'=>[0,0]);
$gr[2]->lb('reset');
$gr[2]->lb(new Label(5.25,0.25,'t','black','center','middle'));
$gr[2]->lb(new Label(0.25,5.25,'y','black','center','middle'));

$g[3] = "$g3 for t in <-$T,$T> using color:red and weight:2";
$gr[3] = init_graph(-$T,$Ymin,$T,$Ymax,'axes'=>[0,0]);
$gr[3]->lb('reset');
$gr[3]->lb(new Label(5.25,0.25,'t','black','center','middle'));
$gr[3]->lb(new Label(0.25,5.25,'y','black','center','middle'));


for $i (0..3) {
# use ($fin) to make graphs smooth - note you need the parentheses
($f1n) = plot_functions( $gr[$i], $g[$i]);
$f1n->steps(100);
$fig[$i]=image(insertGraph($gr[$i]),
width=>200,height=>200,tex_size=>450);
}

$k = 0;

@perm = shuffle(4);
@fig = @fig[@perm];
@inv = invert(@perm);

@letter = ("A", "B", "C", "D");

$popup = PopUp(["?","A","B","C","D"], $letter[$inv[$k]]);

#
# Part C
#

@ftex = ();

$ftex[0] =
"
\left\lbrace
\begin{array}{rrr}
0, && -T/2 \leq t < -T/4,
\\
$f, && -T/4 \leq t \leq T/4,
\\
0, && T/4 < t \leq T/2.
\end{array}
\right.
";


$ftex[1] =
"
\left\lbrace
\begin{array}{rrr}
0, && -T/2 \leq t < -T/4,
\\
-$f, && -T/4 \leq t \leq T/4,
\\
0, && T/4 < t \leq T/2.
\end{array}
\right.
";

$ftex[2] =
"
\left\lbrace
\begin{array}{rrr}
-$f, && -T/2 \leq t < 0,
\\
$f, && 0 \leq t \leq T/2.
\end{array}
\right.
";

$ftex[3] =
"
\left\lbrace
\begin{array}{rrr}
$f, && -T/2 \leq t < 0,
\\
-$f, && 0 \leq t \leq T/2.
\end{array}
\right.
";


$k = 0;

@permc = shuffle(4);
@ftex = @ftex[@permc];
@invc = invert(@permc);

@functionname = ("s1(t)", "s2(t)", "s3(t)", "s4(t)");

$popupc = PopUp(["?","s1(t)","s2(t)","s3(t)","s4(t)"], $functionname[$invc[$k]]);



Context()->texStrings;
BEGIN_TEXT
This problem is related to Problem 9.31 in the text
(a) A signal, \( s(t) \), with period \( T = $T\), is approximated by using the first few terms in the frequency domain by the following non-zero (complex) Fourier coefficients (all others are zero):
\( \displaystyle S(0) = \frac{$f}{2} \),
\( \displaystyle S(1) = S(-1) = \frac{$f}{\pi} \),
\( \displaystyle S(3) = S(-3) = -\frac{$f}{3 \pi} \),
\( \displaystyle S(5) = S(-5) = \frac{$f}{5 \pi} \).
Find the approximation \( \hat{s}(t) \), where $BR
\[\hat{s}(t) = \sum_{n = -5}^5 S(n) e^{jn\omega_0 t} = \sum_{n = 0}^5 C(n) cos(n\omega_0 t + \theta_n).\] (See Section 9.1.2 of the text.)
$BR
Write the answer as the sum of cosines with phase. There should be no complex numbers in your formula.
$PAR
\( \hat{s}(t) = \) \{ ans_rule(70) \}
$BR
$BR
(b) Using a MATLAB, graph the Fourier approximation
\( \hat{s}(t) \) and then select the letter of the graph which
most closely resembles your graph. \{ $popup->menu() \}
$BR
Note that the scales on the graphs below are not needed to answer this question. You may use any \( \omega_0 \) that you desire for your plot.
$BR
\{
$BCENTER.
BeginTable().
AlignedRow([$fig[0],$fig[1],$fig[2],$fig[3]]).
TableSpace(5,0).
AlignedRow(["A","B","C","D"]).
EndTable().
$BR.
"(Click on a graph to enlarge it.)" .
$ECENTER
\}
$BR
$BR
(c) Which signal given below could the signal that is being approximated?
\( s(t) \) model? \{ $popupc->menu() \}
$BR
$BR
\{
$BCENTER.
BeginTable().
AlignedRow([ "\( \displaystyle s_1(t) = $ftex[0] \)", "\( \displaystyle s_2(t) = $ftex[1] \)" ]).
TableSpace(25,0).
AlignedRow([ "\( \displaystyle s_3(t) = $ftex[2] \)", "\( \displaystyle s_4(t) = $ftex[3] \)" ]).
EndTable().
$ECENTER
\}
END_TEXT
Context()->normalStrings;

$showPartialCorrectAnswers = 1;


WEIGHTED_ANS($F5->cmp(), 80 );

WEIGHTED_ANS( $popup->cmp(), 10 );

WEIGHTED_ANS( $popupc->cmp(), 10 );

COMMENT('MathObject version');
ENDDOCUMENT();

In reply to Joel Trussell

Re: multi-part problems and avoid guessing

by Danny Glin -
It looks like you are missing the line that tells WeBWorK to use the weighted grader. Try adding the following line somewhere early on:

install_weighted_grader();

Some documentation for the weighted grader is available at http://webwork.maa.org/wiki/WeightedGrader
In reply to Danny Glin

Re: multi-part problems and avoid guessing

by Joel Trussell -
OK - that was the problem.
It appears that while each part can be weighted differently, that only way for the student to know this is for the instructor/problem maker to manually insert the weighting in the problem text - is this correct?
thanks

In reply to Joel Trussell

Re: multi-part problems and avoid guessing

by Danny Glin -
That is correct. The weights are not automatically communicated to the student.

There may be a message at the bottom saying that the problem uses the weighted grader, but it won't indicate the weights.