Millisecond Forums

Visual analogue scales - confirming response

https://forums.millisecond.com/Topic16192.aspx

By helzbelz1984 - 4/30/2015

Hi,
I was just wondering whether there is a way to change the following script so that it doesn't move on to the next question until the participant has clicked a 'next' button (or something to confirm their response). Additionally, I would like to make it so the participant can change their mind and select a different part of the scale if they wish, rather than automatically just taking their first response.
Any help would be REALLY appreciated!
Thank you!!

<defaults>

/ fontstyle = ("Arial", -19, true, false, false, false, 5, 0)

</defaults>

<data>

/ columns = [subject, date, time, blockcode, trialcode, trialnum, latency, text.question.currentitem, expressions.correctedscore]

</data>

*** Response Scoring Routines ***

<expressions>

/ correctionvalue = (display.width - shape.line.width) / 2

/ correctedscore = (trial.VisualAnalogueScale.responsex - expressions.correctionvalue) / shape.line.width * 100

/ roundedvalue = format("%.2f", expressions.correctedscore)

</expressions>

*** Block Definition ***

<block VAS>

/ trials = [1-2=VisualAnalogueScale]

</block>

*** Trial Definitions ***

<trial VisualAnalogueScale>

/ stimulusframes = [1=question, line, leftanchor, rightanchor]

/ inputdevice = mouse

/ validresponse = (line)

/ branch = [trial.showresponse]

</trial>

<trial showresponse>

/ stimulusframes = [1=X]

/ inputdevice = mouse

/ validresponse = (noresponse)

/ timeout = 1500

/ recorddata = false

</trial>

*** Scale Items ***

<shape line>

/ shape = rectangle

/ color = (0, 0, 0)

/ size = (700, 6)

/ position = (50, 75)

/ erase = false

</shape>

<text question>

/ items = ("Please indicate how hungry you feel right now by clicking on the scale at the appropriate point. Please ensure that you use the full range of the scale", "Please indicate how full you feel right now by clicking on the scale at the appropriate point."))

/ position = (50, 25)

/ select = sequence

</text>

<text leftanchor>

/ items = ("Not at all")

/ position = (25, 75)

/ size = (50, 50)

/ erase = false

</text>

<text rightanchor>

/ items = ("Extremely")

/ position = (75, 75)

/ size = (50, 50)

/ erase = false

</text>

*** Response Indicator ***

<text X>

/ fontstyle = ("Arial", -35, true, false, false, false, 5, 0)

/ items = ("X")

/ txcolor = (255, 0, 0)

/ txbgcolor = (transparent)

/ hposition = (trial.VisualAnalogueScale.responsex / display.width) * 100

/ vposition = shape.line.vposition

</text>

*** End Of File ***

By Dave - 4/30/2015

You would do something along the following lines:

<defaults>
/ fontstyle = ("Arial", -19, true, false, false, false, 5, 0)
</defaults>

<data>
/ columns = [subject, date, time, blockcode, trialcode, trialnum, latency, text.question.currentitem, expressions.correctedscore]
</data>

<values>
/ question = 0
</values>

*** Response Scoring Routines ***
<expressions>
/ correctionvalue = (display.width - shape.line.width) / 2
/ correctedscore = (trial.VisualAnalogueScale.responsex - expressions.correctionvalue) / shape.line.width * 100
/ roundedvalue = format("%.2f", expressions.correctedscore)
</expressions>

*** Block Definition ***

<block VAS>
/ trials = [1-2=VisualAnalogueScale]
</block>

*** Trial Definitions ***

<trial VisualAnalogueScale>
/ ontrialbegin = [if (trial.showresponse.response != "change") values.question = counter.questionitems.selectedvalue]
/ stimulusframes = [1=question, line, leftanchor, rightanchor]
/ inputdevice = mouse
/ validresponse = (line)
/ branch = [trial.showresponse]
</trial>

<trial showresponse>
/ stimulusframes = [1=question, line, leftanchor, rightanchor,X, change, submit]
/ inputdevice = mouse
/ validresponse = (change, submit)
/ branch = [if (trial.showresponse.response == "change") trial.visualanaloguescale]
</trial>

*** Scale Items ***
<shape line>
/ shape = rectangle
/ color = (0, 0, 0)
/ size = (700, 6)
/ position = (50, 75)
/ erase = false
</shape>

<text question>
/ items = ("Please indicate how hungry you feel right now by clicking on the scale at the appropriate point. Please ensure that you use the full range of the scale", "Please indicate how full you feel right now by clicking on the scale at the appropriate point.")
/ position = (50, 25)
/ size = (80%,20%)
/ select = values.question
</text>

<counter questionitems>
/ items = (1,2)
/ select = sequence
</counter>

<text leftanchor>
/ items = ("Not at all")
/ position = (25, 75)
/ size = (50, 50)
/ erase = false
</text>

<text rightanchor>
/ items = ("Extremely")
/ position = (75, 75)
/ size = (50, 50)
/ erase = false
</text>

*** Response Indicator ***
<text X>
/ fontstyle = ("Arial", -35, true, false, false, false, 5, 0)
/ items = ("X")
/ txcolor = (255, 0, 0)
/ txbgcolor = (transparent)
/ hposition = (trial.VisualAnalogueScale.responsex / display.width) * 100
/ vposition = shape.line.vposition
</text>

<text change>
/ items = ("CHANGE")
/ position = (40%, 90%)
</text>

<text submit>
/ items = ("SUBMIT")
/ position = (60%, 90%)
</text>
*** End Of File ***
By helenr - 5/5/2015

That's great, thanks a lot!
I was also wondering whether there is a way to stop it recording the data that was 'changed' (i.e. if participants change their minds, then I only want to know their final response, not their previous).
Thank you!!

Helen
By Dave - 5/5/2015

Yes, there is:

<defaults>
/ fontstyle = ("Arial", -19, true, false, false, false, 5, 0)
</defaults>

<data>
/ columns = [subject, date, time, blockcode, trialcode, trialnum, text.question.currentitem, trial.visualanaloguescale.latency, expressions.correctedscore]
</data>

<values>
/ question = 0
</values>

*** Response Scoring Routines ***
<expressions>
/ correctionvalue = (display.width - shape.line.width) / 2
/ correctedscore = (trial.VisualAnalogueScale.responsex - expressions.correctionvalue) / shape.line.width * 100
/ roundedvalue = format("%.2f", expressions.correctedscore)
</expressions>

*** Block Definition ***

<block VAS>
/ trials = [1-2=VisualAnalogueScale]
</block>

*** Trial Definitions ***

<trial VisualAnalogueScale>
/ ontrialbegin = [if (trial.showresponse.response != "change") values.question = counter.questionitems.selectedvalue]
/ stimulusframes = [1=question, line, leftanchor, rightanchor]
/ inputdevice = mouse
/ validresponse = (line)
/ branch = [trial.showresponse]
/ recorddata = false
</trial>

<trial showresponse>
/ stimulusframes = [1=question, line, leftanchor, rightanchor,X, change, submit]
/ inputdevice = mouse
/ validresponse = (change, submit)
/ branch = [if (trial.showresponse.response == "change") trial.visualanaloguescale else trial.recordresult]
/ recorddata = false
</trial>

<trial recordresult>
/ trialduration = 0
/ validresponse = (0)
</trial>


*** Scale Items ***
<shape line>
/ shape = rectangle
/ color = (0, 0, 0)
/ size = (700, 6)
/ position = (50, 75)
/ erase = false
</shape>

<text question>
/ items = ("Please indicate how hungry you feel right now by clicking on the scale at the appropriate point. Please ensure that you use the full range of the scale", "Please indicate how full you feel right now by clicking on the scale at the appropriate point.")
/ position = (50, 25)
/ size = (80%,20%)
/ select = values.question
</text>

<counter questionitems>
/ items = (1,2)
/ select = sequence
</counter>

<text leftanchor>
/ items = ("Not at all")
/ position = (25, 75)
/ size = (50, 50)
/ erase = false
</text>

<text rightanchor>
/ items = ("Extremely")
/ position = (75, 75)
/ size = (50, 50)
/ erase = false
</text>

*** Response Indicator ***
<text X>
/ fontstyle = ("Arial", -35, true, false, false, false, 5, 0)
/ items = ("X")
/ txcolor = (255, 0, 0)
/ txbgcolor = (transparent)
/ hposition = (trial.VisualAnalogueScale.responsex / display.width) * 100
/ vposition = shape.line.vposition
</text>

<text change>
/ items = ("CHANGE")
/ position = (40%, 90%)
</text>

<text submit>
/ items = ("SUBMIT")
/ position = (60%, 90%)
</text>
*** End Of File ***