Millisecond Forums

Go/No-Go Task: Presenting pictures and group randomization

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

By kimsobania - 11/19/2017

Hi,

I'm working on an alcohol-specific version of the Go/No-Go Task.

I have 40 different pictures either framed yellow or blue. Depending on the color of the frame the participants have to either react or not.
Now I have to problems:
1) I tried to create two groups in order to counterbalance the colors. Group 1 (go=yellow; no-go=blue) seems to work just fine. As soon as I want to run the experiment with group two (go=blue; no-go) the experiment won't run because it is "Unable to initialize <picture stimuli> item number 0. Verify the item exists and is correctly defined." My stimulus value right now is 0.

2) I have 320 trials in total and want to present every picture exactly 6 times as a go-trial and 2 times as a no-go-trial. The order of the presented pictures should be random.

Thank you for your help!

<expt GoNoGoTask1>
/ subjects = (1 of 2)
/ groupassignment = groupnumber
/ onblockbegin = [values.expcondition = 1]
/ onexptbegin = [values.format1 = "gelb"; values.format2 = "blau"]
/ preinstructions = (intro)
/ postinstructions = (end)
/ blocks = [1=practiceblock; 2=testblock]
/onexptend = [values.completed = 1]
</expt>

<expt GoNoGoTask2>
/ subjects = (2 of 2)
/ groupassignment = groupnumber
/ onblockbegin = [values.expcondition = 2]
/ onexptbegin = [values.format1 = "blau"; values.format2 = "gelb"]
/ preinstructions = (intro)
/ postinstructions = (end)
/ blocks = [1=practiceblock; 2=testblock]
/onexptend = [values.completed = 1]
</expt>

<block testblock>
/ trials = [1-320=noreplace(notarget, notarget, notarget, notarget, notarget, notarget, target,target)]
/ preinstructions = (Experiment)
/ onblockbegin = [values.targettype = 0; values.correctresp = 0; values.trialcount = 0; values.correctcount = 0; values.count_go = 0; values.correct_go = 0; values.count_nogo = 0; values.correct_nogo = 0; values.commissionerror = 0; values.sumrt = 0; values.omissionerrors = 0]
</block>

<picture stimuli >
/ items = stimuli
/ select = values.stimulus
/ position = (50%,50%)
/ size = (30%,30%)
/erase = false
</picture>

<trial target>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.t1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.t2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]
/ stimulustimes = [0=blankscreen; 1=stimuli; 250=blankscreen; 1150=blankscreen]
/ validresponse = (57, noresponse)
/ correctresponse = (noresponse)
/ beginresponsetime = 1
/ posttrialpause = 500
/ response = timeout(1000)
/ ontrialend = [if (trial.target.correct) values.correctcount += 1 else values.commissionerror += 1]
/ ontrialend = [if (trial.target.correct) values.correct_nogo += 1]
/ recorddata = true
</trial>

<trial notarget>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.nt1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.nt2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]
/ stimulustimes = [0=blankscreen; 1=stimuli; 250=blankscreen; 1150=blankscreen]
/ validresponse = (57, noresponse)
/ correctresponse = (57)
/ beginresponsetime = 1
/ posttrialpause = 500
/ response = timeout(1000)
/ ontrialend = [if (trial.notarget.correct) values.correctcount += 1]
/ ontrialend = [if (trial.notarget.correct) {values.correct_go += 1; values.sumrt += trial.notarget.latency}]
/ ontrialend = [if (trial.notarget.error) values.omissionerrors += 1]
/ recorddata = true
</trial>


By Dave - 11/20/2017

kimsobania - Sunday, November 19, 2017
Hi,

I'm working on an alcohol-specific version of the Go/No-Go Task.

I have 40 different pictures either framed yellow or blue. Depending on the color of the frame the participants have to either react or not.
Now I have to problems:
1) I tried to create two groups in order to counterbalance the colors. Group 1 (go=yellow; no-go=blue) seems to work just fine. As soon as I want to run the experiment with group two (go=blue; no-go) the experiment won't run because it is "Unable to initialize <picture stimuli> item number 0. Verify the item exists and is correctly defined." My stimulus value right now is 0.

2) I have 320 trials in total and want to present every picture exactly 6 times as a go-trial and 2 times as a no-go-trial. The order of the presented pictures should be random.

Thank you for your help!

<expt GoNoGoTask1>
/ subjects = (1 of 2)
/ groupassignment = groupnumber
/ onblockbegin = [values.expcondition = 1]
/ onexptbegin = [values.format1 = "gelb"; values.format2 = "blau"]
/ preinstructions = (intro)
/ postinstructions = (end)
/ blocks = [1=practiceblock; 2=testblock]
/onexptend = [values.completed = 1]
</expt>

<expt GoNoGoTask2>
/ subjects = (2 of 2)
/ groupassignment = groupnumber
/ onblockbegin = [values.expcondition = 2]
/ onexptbegin = [values.format1 = "blau"; values.format2 = "gelb"]
/ preinstructions = (intro)
/ postinstructions = (end)
/ blocks = [1=practiceblock; 2=testblock]
/onexptend = [values.completed = 1]
</expt>

<block testblock>
/ trials = [1-320=noreplace(notarget, notarget, notarget, notarget, notarget, notarget, target,target)]
/ preinstructions = (Experiment)
/ onblockbegin = [values.targettype = 0; values.correctresp = 0; values.trialcount = 0; values.correctcount = 0; values.count_go = 0; values.correct_go = 0; values.count_nogo = 0; values.correct_nogo = 0; values.commissionerror = 0; values.sumrt = 0; values.omissionerrors = 0]
</block>

<picture stimuli >
/ items = stimuli
/ select = values.stimulus
/ position = (50%,50%)
/ size = (30%,30%)
/erase = false
</picture>

<trial target>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.t1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.t2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]
/ stimulustimes = [0=blankscreen; 1=stimuli; 250=blankscreen; 1150=blankscreen]
/ validresponse = (57, noresponse)
/ correctresponse = (noresponse)
/ beginresponsetime = 1
/ posttrialpause = 500
/ response = timeout(1000)
/ ontrialend = [if (trial.target.correct) values.correctcount += 1 else values.commissionerror += 1]
/ ontrialend = [if (trial.target.correct) values.correct_nogo += 1]
/ recorddata = true
</trial>

<trial notarget>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.nt1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.nt2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]
/ stimulustimes = [0=blankscreen; 1=stimuli; 250=blankscreen; 1150=blankscreen]
/ validresponse = (57, noresponse)
/ correctresponse = (57)
/ beginresponsetime = 1
/ posttrialpause = 500
/ response = timeout(1000)
/ ontrialend = [if (trial.notarget.correct) values.correctcount += 1]
/ ontrialend = [if (trial.notarget.correct) {values.correct_go += 1; values.sumrt += trial.notarget.latency}]
/ ontrialend = [if (trial.notarget.error) values.omissionerrors += 1]
/ recorddata = true
</trial>



<trial target>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.t1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.t2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]

...
</trial>

<trial notarget>
/ ontrialbegin = [if(values.expcondition == 1) values.stimulus=list.nt1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2 ||
if(values.expcondition == 2) values.stimulus=list.nt2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2]

...
</trial>

The above is not valid syntax. Things ought to read


<trial target>
/ ontrialbegin = [if (values.expcondition == 1) {values.stimulus=list.t1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2} else if (values.expcondition == 2) {values.stimulus=list.t2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2}]
...
</trial>

<trial notarget>
/ ontrialbegin = [if (values.expcondition == 1) {values.stimulus=list.nt1_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2} else if (values.expcondition == 2) {values.stimulus=list.nt2_stimuli.nextvalue;values.trialcount += 1; values.count_nogo += 1; values.targettype = 2}]
...
</trial>

> 2) I have 320 trials in total and want to present every picture exactly 6 times as a go-trial and 2 times as a no-go-trial.
> The order of the presented pictures should be random.

You need to set up separate stimulus selection for your "go" and "no go" trials accordingly then. The code excerpts you posted don't speak to that.
By kimsobania - 11/20/2017

all right thanks! 

I think I found a solution for the stimuli presentation. I created several lists and added /replace = false. So far this seems to work the way I want it to.