Millisecond Forums

Setting stimuli set at block level, as opposed to trial level

https://www.millisecond.com/forums/Topic20678.aspx

By sdandeneau - 2/9/2017

I'm running a task that requires counterbalancing stimuli sets across participants. Ex. Part. 1 gets. set 1 for bloc 1 and set 2 for block 2, whereas Part. 2 get set 2 for bloc 1 and set 1 for block 2. 

My question: instead of creating trial1 and trial 2 - and block 1(which runs trial 1) and block 2 (which runs bloc 2). Both trials are the same the blocks... the only difference is that stimuli used to run the trial. Is it possible to define the Trial once, but in the Block defining the stimuli set that should be used to run the trial?

Something like: 
<block 1>
/ trials = [1-4=trial]
/ values.stimuliset = 1
</block>

<block 2>
/ trials = [1-4=trial]
/ values.stimuliset = 2
</block>

Thanks in advance
Stéphane
By Dave - 2/9/2017

sdandeneau - Thursday, February 9, 2017
I'm running a task that requires counterbalancing stimuli sets across participants. Ex. Part. 1 gets. set 1 for bloc 1 and set 2 for block 2, whereas Part. 2 get set 2 for bloc 1 and set 1 for block 2. 

My question: instead of creating trial1 and trial 2 - and block 1(which runs trial 1) and block 2 (which runs bloc 2). Both trials are the same the blocks... the only difference is that stimuli used to run the trial. Is it possible to define the Trial once, but in the Block defining the stimuli set that should be used to run the trial?

Something like: 
<block 1>
/ trials = [1-4=trial]
/ values.stimuliset = 1
</block>

<block 2>
/ trials = [1-4=trial]
/ values.stimuliset = 2
</block>

Thanks in advance
Stéphane

Yes, you can achieve that by using nested <list> elements:

//counterbalancing:
//set 1 first
<expt>
/ subjects = (1 of 2)
/ groupassignment = groupnumber
/ blocks = [1=set1; 2=set2]
</expt>

//set 2 first
<expt>
/ subjects = (2 of 2)
/ groupassignment = groupnumber
/ blocks = [1=set2; 2=set1]
</expt>

<block set1>
/ onblockbegin = [values.set = 1]
/ trials = [1-4=mytrial]
</block>

<block set2>
/ onblockbegin = [values.set = 2]
/ trials = [1-4=mytrial]
</block>

<trial mytrial>
/ stimulusframes = [1=mytext]
/ validresponse = (57)
</trial>

<text mytext>
/ items = myitems
/ select = list.setlist.nextvalue
</text>

<item myitems>
/ 1 = "Set 1 Item 1"
/ 2 = "Set 1 Item 2"
/ 3 = "Set 1 Item 3"
/ 4 = "Set 1 Item 4"

/ 5 = "Set 2 Item 1"
/ 6 = "Set 2 Item 2"
/ 7 = "Set 2 Item 3"
/ 8 = "Set 2 Item 4"
</item>

//list of lists returns an item number fromt the set list indicated by values.set
<list setlist>
/ items = (list.set1items.nextvalue, list.set2items.nextvalue)
/ selectionmode = values.set
</list>

//set 1 are item numbers 1 to 4
<list set1items>
/ items = (1,2,3,4)
</list>

//set 2 are item numbers 5 to 8
<list set2items>
/ items = (5,6,7,8)
</list>

<values>
/ set = 1
</values>


By sdandeneau - 2/10/2017

Dave - Thursday, February 9, 2017
sdandeneau - Thursday, February 9, 2017
I'm running a task that requires counterbalancing stimuli sets across participants. Ex. Part. 1 gets. set 1 for bloc 1 and set 2 for block 2, whereas Part. 2 get set 2 for bloc 1 and set 1 for block 2. 

My question: instead of creating trial1 and trial 2 - and block 1(which runs trial 1) and block 2 (which runs bloc 2). Both trials are the same the blocks... the only difference is that stimuli used to run the trial. Is it possible to define the Trial once, but in the Block defining the stimuli set that should be used to run the trial?

Something like: 
<block 1>
/ trials = [1-4=trial]
/ values.stimuliset = 1
</block>

<block 2>
/ trials = [1-4=trial]
/ values.stimuliset = 2
</block>

Thanks in advance
Stéphane

Yes, you can achieve that by using nested <list> elements:

//counterbalancing:
//set 1 first
<expt>
/ subjects = (1 of 2)
/ groupassignment = groupnumber
/ blocks = [1=set1; 2=set2]
</expt>

//set 2 first
<expt>
/ subjects = (2 of 2)
/ groupassignment = groupnumber
/ blocks = [1=set2; 2=set1]
</expt>

<block set1>
/ onblockbegin = [values.set = 1]
/ trials = [1-4=mytrial]
</block>

<block set2>
/ onblockbegin = [values.set = 2]
/ trials = [1-4=mytrial]
</block>

<trial mytrial>
/ stimulusframes = [1=mytext]
/ validresponse = (57)
</trial>

<text mytext>
/ items = myitems
/ select = list.setlist.nextvalue
</text>

<item myitems>
/ 1 = "Set 1 Item 1"
/ 2 = "Set 1 Item 2"
/ 3 = "Set 1 Item 3"
/ 4 = "Set 1 Item 4"

/ 5 = "Set 2 Item 1"
/ 6 = "Set 2 Item 2"
/ 7 = "Set 2 Item 3"
/ 8 = "Set 2 Item 4"
</item>

//list of lists returns an item number fromt the set list indicated by values.set
<list setlist>
/ items = (list.set1items.nextvalue, list.set2items.nextvalue)
/ selectionmode = values.set
</list>

//set 1 are item numbers 1 to 4
<list set1items>
/ items = (1,2,3,4)
</list>

//set 2 are item numbers 5 to 8
<list set2items>
/ items = (5,6,7,8)
</list>

<values>
/ set = 1
</values>



Thanks! That'll do the trick for me!