We now turn our attention to the topic of providing feedback. In many experimental designs, it is important that the participant receive feedback that lets them know things such as whether their last response was correct, or how long they took to respond. The RFV has a mechanism for providing such feedback. Before we continue however, we will first specify a new COMPONENT called ``Component 3'', and specify a block within it.
...
component( "Component 1"
...
)
component( "Component 2"
...
)
component( "Component 3"
block(
)
)
Within this new block, we will specify a DISPLAY containing a statement and a row consisting of two buttons. The buttons display ``TRUE'' and ``FALSE'', allowing a participant to make a choice about the validity of the statement.
...
component( "Component 3"
block(
display(
text_line("Rome was built in a day.")
v_space(80)
row(
button("TRUE")
h_space(100)
button("FALSE")
)
)
)
)
If we now run the RFV on the input file, then the block in ``Component 3'' will appear as is shown in Figure 27.
Figure 27. A simple two choice block.
When the participant responds to this block by selecting one of the buttons, we
may wish to inform them about whether not they selected the correct button. This
can be done by using the FEEDBACK parameter within the BLOCK parameter.
A FEEDBACK parameter takes as its first argument the label of the
button for which feedback is being provided. Therefore, if we wish to inform
the participant that they chose an incorrect response, we would specify a feedback
parameter for the ``TRUE'' button as follows.
This FEEDBACK parameter is now treated as a block that will appear if
the participant selects the button labelled ``TRUE''. Inside the FEEDBACK
parameter, after the relevant button label has been provided, it is possible
do almost anything that can be done inside a BLOCK parameter with the
following exceptions. The BUTTON and the STIMULUS parameters cannot
be defined inside the DISPLAY parameter of the feedback block, and a
feedback block itself cannot contain a FEEDBACK parameter. This is because a
feedback block is meant purely as a passive block providing information to the
participant. It is not meant to contain interactive elements that might
themselves require feedback.
Aside from these restrictions, feedback blocks can do anything else that can
be done in a normal block. In our example, we will use the feedback block
we have defined to inform the participant that their response was incorrect.
Now if we run the RFV, if when we get to the block in ``Component 3'' we
select the ``TRUE'' button, the RFV window should appear as in
Figure 28.
Figure 28. Feedback for an incorrect response.
You will have no doubt noted that the RFV does not require feedback for
every button defined. If the program is run again and the ``FALSE'' button is
selected, the program will then just go on with the next block, since there
is no feedback specified for this button response. Should we desire that
feedback is also given for a correct answer, we can do this by adding
another feedback block to the input file.
In the DISPLAY parameter of this new FEEDBACK block, we have used a
new parameter. This is the RESPONSE_TIME parameter. It works just like a
TEXT_LINE parameter, except that a label is not explicitly given. Instead,
the label automatically contains the total time the participant spent viewing
the block before giving a response,
measured in milliseconds. (This does not include the time taken to
load the block.) The RESPONSE_TIME parameter can only
be used within a feedback block, and just as with the TEXT_LINE parameter
it is possible to specify the FONT and the FOREGROUND colour of the
text.
Figure 29
provides an example of the RFV window when the
correct button has been selected after the block in
Figure 27
has
been visible for about three and half seconds.
Figure 29. Feedback that includes the time taken to respond.
If no buttons have been specified within a block, it is still possible to
assign feedback by using the NO_BUTTONS keyword in place of the label of a button
as the first argument of the FEEDBACK parameter. The RFV will give a
warning if a FEEDBACK parameter has been defined with an invalid or
irrelevant first argument, such as a label that does not match any button labels.
There is one more parameter that can be applied to a block that we have not
yet discussed. In many circumstances, it is desirable that a participant can only
see a certain block for a limited amount of time. The RFV allows this to be
specified by using the TIME_LIMIT parameter. This parameter takes as
its argument an integer that is the maximum number of milliseconds that the block
should be visible for. For example, we can make the block in ``Component 3''
visible for only five seconds by adding the following.
Although we have added the TIME_LIMIT parameter at the beginning of
the block, it could also have been placed after the DISPLAY parameter
or after the FEEDBACK parameters with the same effect. If the RFV is now
run on ``Component 3'', it is still possible to select one of the buttons
(and thus see the resulting feedback block) if the selection is made before
the time limit expires. However, if the time limit expires before a button
has been selected (or the mouse has been clicked anywhere if the block contains no
buttons), then the block will automatically end and the program will just
continue with the next block.
Of course, the participant may find it disconcerting to have the block
suddenly finish without them having done anything. Therefore, it may be
prudent to provide feedback when the time limit expires. This can be done
by specifying a feedback block with the TIME_LIMIT_EXPIRED keyword
in place of the label of a button as the first argument.
Now if we run the RFV and let the time limit expire on the block in ``Component 3'',
the RFV window will appear as shown in
Figure 30.
Figure 30. Feedback to indicate that the time limit expired.
Occasionally, we may want to force the participant to view a block for the
exact time limit; that is, we may not want to allow them to end the block
early by selecting a button, or if there are no buttons, clicking the mouse
anywhere in the RFV window. This can be done by adding the STRICT
keyword as an optional
argument to the TIME_LIMIT parameter, placing it after the integer that
specifies the number of milliseconds the block should be visible for.
If the RFV is now run on the input the file, the block specified within
``Component 3'' will be visible for exactly five seconds, regardless of
whether the a button is selected or not. As a result, the feedback block
that appears can only be the one with TIME_LIMIT_EXPIRED as the
first argument. Note that FEEDBACK blocks can also have a TIME_LIMIT
parameter defined as an argument. This can be convenient if the feedback is
only meant to be presented briefly before the participant continues on with
the next block.
In this example, we composed the input file a bit at a time, and then
tested it to make sure it did what we expected. This is a good approach
to take when creating input files. Also, if unsure about what effect a
particular parameter might have in a certain situation, try it and see.
If it doesn't work as expected, it is easy to remove it from the input
file or try it in a different place.
...
component( "Component 3"
block(
display(
text_line("Rome was built in a day.")
v_space(80)
row(
button("TRUE")
h_space(100)
button("FALSE")
)
)
feedback( "TRUE"
)
)
)
...
component( "Component 3"
block(
display(
...
)
feedback( "TRUE"
display(
text_line("Incorrect"
foreground(255 0 0) )
text_line("Rome wasn't built in a day!"
font("SansSerif" PLAIN 20) )
)
)
)
)
...
component( "Component 3"
block(
display(
...
)
feedback( "TRUE"
...
)
feedback( "FALSE"
display(
text_line("Correct")
response_time()
)
)
)
)
...
component( "Component 3"
block(
time_limit(5000)
display(
...
)
feedback( "TRUE"
...
)
feedback( "FALSE"
...
)
)
)
...
component( "Component 3"
block(
...
feedback( "TRUE"
...
)
feedback( "FALSE"
...
)
feedback( TIME_LIMIT_EXPIRED
display(
text_line("Sorry - the time limit expired")
)
)
)
)
...
component( "Component 3"
block(
time_limit(5000 STRICT)
display(
...
)
...
)
)
Back to Contents |
Previous Section |
Next Section