Voice input with the Wisconsin Card Sorting test: working with the original version, not with the...


Author
Message
s.laborde
s.laborde
Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)
Group: Forum Members
Posts: 8, Visits: 7

Hi, 

I’m conducting an experiment with the Wisconsin Card Sorting Test, andfor the purpose of the experiment I need to switch mouse input to voice input.I managed to do so successfully with the script of the original WCST, found onthe Inquisit website, but not with the Modified Card Sort Test, also found onthe Inquisit website, that I would prefer to use. For the Modified CST, Inquisitseems just not to react to the voice (it is not a microphone input problem,because the original WCST works perfectly with voice input with the samesettings). I add that when I run the Monkey for the modified CST, it goesperfectly through all trials.

The only difference between the original WCSTand the modified CST scripts is that in the first case (working), the function« correctresponse » is used, and in the second case (not working),the function « iscorrectresponse » is used.

Below I copied a trial example of both tests, manythanks in advance if you could tell me what I need to change in the modifiedCST to get it working with voice input.

Note « eins, zwei, drei, vier »stand for « one, two, three, four » in German ; the participanthaving to indicate which deck he/she is choosing, from left to right.

Scriptof a trial for the Original Wisconsin Card Sorting Test (working with voiceinput)

<trial color_GreenTriangle1>

/ inputdevice = voice

/ correctmessage = true(right,400)

/ errormessage = true(wrong,400)

/ correctresponse = ("zwei")

/ validresponse = ("eins","zwei", "drei", "vier")

/ stimulusframes = [1=green_triangle1,RedTriangle1, GreenStar2, YellowCross3, BlueCircle4]

/ ontrialend = [if (values.OldRuleWindow == 1&& trial.color_GreenTriangle1.response == "eins")

                                                                                    values.OldRuleResponse= values.OldRuleResponse + 1]

/ ontrialend = [if (values.OldRuleWindow == 1&& trial.color_GreenTriangle1.response != "eins")

                                                                                    {values.OldRuleWindow= 0; values.OldRuleResponse =0}]

</trial>


Scriptof a trial for the Modified Wisconsin (currently not working with voice input) 

***No ambiguity:1***

<trial GreenTriangle3>

/ inputdevice = voice

/ correctmessage = true(right,400)

/ errormessage = true(wrong,400)

/ ontrialbegin = [if (values.category == 1)values.colortrialcount += 1]

/ ontrialbegin = [if (values.category == 2)values.formtrialcount += 1]

/ ontrialbegin = [if (values.category == 3)values.numbertrialcount += 1]

/ ontrialbegin = [if(values.showRuleChangeAlert && values.RuleChange == 1)

                                                                                                {text.RuleChangeAlert.textcolor= black}]

/ stimulusframes = [1=playcard, RedTriangle1,GreenStar2, YellowCross3, BlueCircle4, deck, RuleChangeAlert]

/ validresponse = ("eins","zwei", "drei", "vier")

/ iscorrectresponse = [(values.category == 1&& trial.GreenTriangle3.response == "zwei") ||

                                                                                                (values.category== 2 && trial.GreenTriangle3.response == "eins") ||

                                                                                                (values.category== 3 && trial.GreenTriangle3.response == "drei") ]

/ ontrialend = [if (values.correctstreak >=values.setmaintainthreshold  &&trial.GreenTriangle3.error)

                                                                        values.Sum_FailureMaintainSet+= 1]

/ ontrialend = [if(trial.GreenTriangle3.correct)

                                                                                                {values.correctstreak += 1;

                                                                                                values.totalcorrect= values.totalcorrect +1}

                                                                        else

                                                                                                {values.correctstreak= 0;

                                                                                                values.errorsum_block+= 1;

                                                                                                values.totalerror+= 1 }]

 

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 1 && trial.GreenTriangle3.response =="drei")

                                                                        {values.PerseverativeResponse= 1;

                                                                        values.Sum_PerseverativeResponses+= 1}]

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 2 && trial.GreenTriangle3.response =="zwei")

                                                                        {values.PerseverativeResponse= 1;

                                                                        values.Sum_PerseverativeResponses+= 1}]

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 3 && trial.GreenTriangle3.response =="eins")

                                                                        {values.PerseverativeResponse= 1;

                                                                        values.Sum_PerseverativeResponses+= 1}]

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 1 && trial.GreenTriangle3.response !="drei")

                                                                                    values.OldRuleWindow= 0]

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 2 && trial.GreenTriangle3.response !="zwei")

                                                                                    values.OldRuleWindow= 0]

/ ontrialend = [if (values.OldRuleWindow == 1&& values.category == 3 && trial.GreenTriangle3.response !="eins")

                                                                                    values.OldRuleWindow= 0]

/ ontrialend = [if (trial.GreenTriangle3.response== "zwei") values.ResponseCategory = "C" ]

/ ontrialend = [if(trial.GreenTriangle3.response == "eins")  values.ResponseCategory = "F" ]

/ ontrialend = [if(trial.GreenTriangle3.response == "drei")  values.ResponseCategory = "N" ]

/ ontrialend = [if(trial.GreenTriangle3.response != "eins" &&trial.GreenTriangle3.response != "zwei" &&

                                                                        trial.GreenTriangle3.response!= "drei")

                                                                         values.ResponseCategory = "O" ]

/ ontrialend = [values.RuleChange = 0;text.RuleChangeAlert.textcolor = white]

/ branch = [trial.selectcard]

</trial>

 


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 108K
Voice input won't work with complex validation logic via the /iscorrectresponse attribute where the correct response in a given <trial> is not known in advance. For voice input to work, the response *must* be known in advance (and thus given in the /correctresponse attribute) as in the simple WCST script.

Why, may I ask, do you need to use voice input for these tasks?

s.laborde
s.laborde
Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)
Group: Forum Members
Posts: 8, Visits: 7
Thanks for your quick answer Dave. I imagine that getting the modified CST with the /correctresponse attribute would require a full reprogramming of the task. 

Regarding my experiment I got my participants doing exercise at the same time they perform the task, and it is not easy to use effectively the mouse in these conditions, this is why I'm using a headset to get their answers.


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 108K
> I imagine that getting the modified CST with the /correctresponse attribute would require a full reprogramming of the task.

Yes, it would require quite substantial re-programming (I'm not even sure it'd be actually possible).

> I got my participants doing exercise at the same time they perform the task, and it is not easy to use effectively the mouse in these conditions, this is why I'm using a headset to get their answers.

#2: I assume you are conducting one-person-sessions with an experimenter or research assistant in attendance, then? If so, there is a simple, low-tech solution: Have your exercising participant call out her response and have the attending experimenter act as a proxy and submit the response for her via traditional means (i.e., the mouse).

Hope this helps.

s.laborde
s.laborde
Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)
Group: Forum Members
Posts: 8, Visits: 7
Thanks Dave, indeed having the research assistant entering the participant's answer might be an option, though I might have to decrease the focus on response time.
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 108K
> [...] having the research assistant entering the participant's answer might be an option, though I might have to decrease the focus on response time.                               


I would, in fact, argue the exact opposite: With participants exercising, you are working under pretty noisy conditions which may cause automatically determined speech onset latencies to be spurious in all sorts of ways (e.g. heavy breathing or a cough may cause premature triggering, etc.). The same argument would hold for response accuracy also, not just response latency.

Human beings are far superior as recognizers of speech compared to computers, even more so under difficult, noisy conditions.

Another thing you can do if you really want to focus on speech onset latencies: Record audio of the entire session and have each trial's beginning be signaled by an audible beep. You can then determine extremely precise speech onset latencies by determining the difference in time between the beep (i.e., the start of a given trial) and the onset of the participant's recorded vocal response. This is commonly done in language research / psycholinguistics.

s.laborde
s.laborde
Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)Expert (1.1K reputation)
Group: Forum Members
Posts: 8, Visits: 7
thanks for the tips Dave!
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search