Millisecond Forums

Weighted target location and filler items

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

By Brabagazaa - 1/29/2018

Dear all,
At the moment I am trying to create an experiment that shows stimuli in a circle, but that presents the target more often at a specific location (this location should be the same for 1 participant, but balanced across all participants).

My initial strategy was to create a long list of locations, that simply included more of one specific location, and for each participant a different list was used. However, at the moment the shapes other then the target are determined by taking the next location in the location list, which will ensure that the other items (‘fillers’) are always placed around the target. But when I use a weighted list this strategy does not work anymore. Is there a simple way to increase the presentation of the target in 1 specific location while at the same time maintaining the possibility to place filler items neatly around this target location?

Any help is appreciated; down here an example of a stimulus display, and a balanced experiment showing how the locations of target +fillers are interdependent.
Roelof

<list hpos>
/items = (hposition_list_set7)
/selectionmode = values.listnumber
/selectionrate = always
</list>
<list hposition_list_set7>
/items =(50.0,  71.21,  80.0,    71.211,            50.01, 28.79,  20.01, 28.791)
/selectionrate = always
</list>
oude lijst, 7 items: (20, 26, 50, 73, 79, 63, 36, 50)
<list vposition_list_set7>
/items = (20.02, 28.792, 50.02, 71.212, 80.02, 71.2121, 50.021, 28.7921)
/selectionmode = list.hposition_list_set7.currentindex
/selectionrate = always
</list>

<trial set7_target_diamond_dis_form>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hpos.nextvalue;   values.vpos1 = list.vposition_list_set7.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1   = list.hpos.nextvalue; values.filler_position1_v = list.vposition_list_set7.nextvalue;
values.filler_position2   = list.hpos.nextvalue; values.filler_position2_v = list.vposition_list_set7.nextvalue;
values.filler_position3  = list.hpos.nextvalue; values.filler_position3_v = list.vposition_list_set7.nextvalue;
values.filler_position4   = list.hpos.nextvalue; values.filler_position4_v = list.vposition_list_set7.nextvalue;
values.filler_position5   = list.hpos.nextvalue;values.filler_position5_v = list.vposition_list_set7.nextvalue;
values.filler_position6   = list.hpos.nextvalue;values.filler_position6_v = list.vposition_list_set7.nextvalue;
values.filler_position7   = list.hpos.nextvalue;values.filler_position7_v = list.vposition_list_set7.nextvalue]

/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5));
 values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5));]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1,  vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,      vertical_line_slanted_right2,            vertical_line_slanted_left2,     horizontal_line_slanted_up_left2,      horizontal_line_slanted_up_right2,            vertical_line_slanted_right3,   vertical_line_slanted_left3,     horizontal_line_slanted_up_left3,            horizontal_line_slanted_up_right3,    vertical_line_slanted_right4,   vertical_line_slanted_left4,            horizontal_line_slanted_up_left4,      horizontal_line_slanted_up_right4,    vertical_line_slanted_right5,            vertical_line_slanted_left5,     horizontal_line_slanted_up_left5,      horizontal_line_slanted_up_right5,            vertical_line_slanted_right6,   vertical_line_slanted_left6,     horizontal_line_slanted_up_left6,            horizontal_line_slanted_up_right6,                            vertical_line_slanted_right7,            vertical_line_slanted_left7,     horizontal_line_slanted_up_left7,      horizontal_line_slanted_up_right7,                cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set7_target_diamond_dis_form.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
</trial>
By Dave - 1/30/2018

Brabagazaa - Tuesday, January 30, 2018
Dear all,
At the moment I am trying to create an experiment that shows stimuli in a circle, but that presents the target more often at a specific location (this location should be the same for 1 participant, but balanced across all participants).

My initial strategy was to create a long list of locations, that simply included more of one specific location, and for each participant a different list was used. However, at the moment the shapes other then the target are determined by taking the next location in the location list, which will ensure that the other items (‘fillers’) are always placed around the target. But when I use a weighted list this strategy does not work anymore. Is there a simple way to increase the presentation of the target in 1 specific location while at the same time maintaining the possibility to place filler items neatly around this target location?

Any help is appreciated; down here an example of a stimulus display, and a balanced experiment showing how the locations of target +fillers are interdependent.
Roelof

<list hpos>
/items = (hposition_list_set7)
/selectionmode = values.listnumber
/selectionrate = always
</list>
<list hposition_list_set7>
/items =(50.0,  71.21,  80.0,    71.211,            50.01, 28.79,  20.01, 28.791)
/selectionrate = always
</list>
oude lijst, 7 items: (20, 26, 50, 73, 79, 63, 36, 50)
<list vposition_list_set7>
/items = (20.02, 28.792, 50.02, 71.212, 80.02, 71.2121, 50.021, 28.7921)
/selectionmode = list.hposition_list_set7.currentindex
/selectionrate = always
</list>

<trial set7_target_diamond_dis_form>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hpos.nextvalue;   values.vpos1 = list.vposition_list_set7.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1   = list.hpos.nextvalue; values.filler_position1_v = list.vposition_list_set7.nextvalue;
values.filler_position2   = list.hpos.nextvalue; values.filler_position2_v = list.vposition_list_set7.nextvalue;
values.filler_position3  = list.hpos.nextvalue; values.filler_position3_v = list.vposition_list_set7.nextvalue;
values.filler_position4   = list.hpos.nextvalue; values.filler_position4_v = list.vposition_list_set7.nextvalue;
values.filler_position5   = list.hpos.nextvalue;values.filler_position5_v = list.vposition_list_set7.nextvalue;
values.filler_position6   = list.hpos.nextvalue;values.filler_position6_v = list.vposition_list_set7.nextvalue;
values.filler_position7   = list.hpos.nextvalue;values.filler_position7_v = list.vposition_list_set7.nextvalue]

/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5));
 values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5));]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1,  vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,      vertical_line_slanted_right2,            vertical_line_slanted_left2,     horizontal_line_slanted_up_left2,      horizontal_line_slanted_up_right2,            vertical_line_slanted_right3,   vertical_line_slanted_left3,     horizontal_line_slanted_up_left3,            horizontal_line_slanted_up_right3,    vertical_line_slanted_right4,   vertical_line_slanted_left4,            horizontal_line_slanted_up_left4,      horizontal_line_slanted_up_right4,    vertical_line_slanted_right5,            vertical_line_slanted_left5,     horizontal_line_slanted_up_left5,      horizontal_line_slanted_up_right5,            vertical_line_slanted_right6,   vertical_line_slanted_left6,     horizontal_line_slanted_up_left6,            horizontal_line_slanted_up_right6,                            vertical_line_slanted_right7,            vertical_line_slanted_left7,     horizontal_line_slanted_up_left7,      horizontal_line_slanted_up_right7,                cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set7_target_diamond_dis_form.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
</trial>

If I'm understanding your description correctly, you'll want separate <list>s:
- One weighted list for the target location(s), and
- One for the associated filler locations.

You can prevent the latter list from selecting the same location as the target (already chosen in the 1st list) by using a /not constraint.
By Brabagazaa - 1/30/2018

Dave - Tuesday, January 30, 2018
Brabagazaa - Tuesday, January 30, 2018
Dear all,
At the moment I am trying to create an experiment that shows stimuli in a circle, but that presents the target more often at a specific location (this location should be the same for 1 participant, but balanced across all participants).

My initial strategy was to create a long list of locations, that simply included more of one specific location, and for each participant a different list was used. However, at the moment the shapes other then the target are determined by taking the next location in the location list, which will ensure that the other items (‘fillers’) are always placed around the target. But when I use a weighted list this strategy does not work anymore. Is there a simple way to increase the presentation of the target in 1 specific location while at the same time maintaining the possibility to place filler items neatly around this target location?

Any help is appreciated; down here an example of a stimulus display, and a balanced experiment showing how the locations of target +fillers are interdependent.
Roelof

<list hpos>
/items = (hposition_list_set7)
/selectionmode = values.listnumber
/selectionrate = always
</list>
<list hposition_list_set7>
/items =(50.0,  71.21,  80.0,    71.211,            50.01, 28.79,  20.01, 28.791)
/selectionrate = always
</list>
oude lijst, 7 items: (20, 26, 50, 73, 79, 63, 36, 50)
<list vposition_list_set7>
/items = (20.02, 28.792, 50.02, 71.212, 80.02, 71.2121, 50.021, 28.7921)
/selectionmode = list.hposition_list_set7.currentindex
/selectionrate = always
</list>

<trial set7_target_diamond_dis_form>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hpos.nextvalue;   values.vpos1 = list.vposition_list_set7.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1   = list.hpos.nextvalue; values.filler_position1_v = list.vposition_list_set7.nextvalue;
values.filler_position2   = list.hpos.nextvalue; values.filler_position2_v = list.vposition_list_set7.nextvalue;
values.filler_position3  = list.hpos.nextvalue; values.filler_position3_v = list.vposition_list_set7.nextvalue;
values.filler_position4   = list.hpos.nextvalue; values.filler_position4_v = list.vposition_list_set7.nextvalue;
values.filler_position5   = list.hpos.nextvalue;values.filler_position5_v = list.vposition_list_set7.nextvalue;
values.filler_position6   = list.hpos.nextvalue;values.filler_position6_v = list.vposition_list_set7.nextvalue;
values.filler_position7   = list.hpos.nextvalue;values.filler_position7_v = list.vposition_list_set7.nextvalue]

/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5));
 values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5));]
/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1,  vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,      vertical_line_slanted_right2,            vertical_line_slanted_left2,     horizontal_line_slanted_up_left2,      horizontal_line_slanted_up_right2,            vertical_line_slanted_right3,   vertical_line_slanted_left3,     horizontal_line_slanted_up_left3,            horizontal_line_slanted_up_right3,    vertical_line_slanted_right4,   vertical_line_slanted_left4,            horizontal_line_slanted_up_left4,      horizontal_line_slanted_up_right4,    vertical_line_slanted_right5,            vertical_line_slanted_left5,     horizontal_line_slanted_up_left5,      horizontal_line_slanted_up_right5,            vertical_line_slanted_right6,   vertical_line_slanted_left6,     horizontal_line_slanted_up_left6,            horizontal_line_slanted_up_right6,                            vertical_line_slanted_right7,            vertical_line_slanted_left7,     horizontal_line_slanted_up_left7,      horizontal_line_slanted_up_right7,                cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set7_target_diamond_dis_form.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
</trial>

If I'm understanding your description correctly, you'll want separate <list>s:
- One weighted list for the target location(s), and
- One for the associated filler locations.

You can prevent the latter list from selecting the same location as the target (already chosen in the 1st list) by using a /not constraint.

Thank you Dave, that does indeed sound like what I would need, however, I cannot find any documentation on the 'not constraint', and the following primitive attempt makes a mess of the locations, is there any example I could model this after?


############# lists #####################
### positions:::::::::::::::::
<list hpos>
/items = (hposition_list_set8)
/selectionmode = values.listnumber
/selectionrate = always
</list>
#list for filler items with 'not' contraint
<list hpos_filler>
/items = (hposition_list_set8)
/selectionmode = values.listnumber
/selectionrate = always
/not = (values.hpos1)
</list>
#weighted hpos list for target: --> note this had to be both vertical and horiztonatl positions
<list hposition_list_set8>
/items =(50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,50.0,71.21,80.0,71.211, 50.01, 28.79,20.01, 28.791)
/selectionrate = always
</list>
#weighted vpos_list for target
<list vposition_list_set8>
/items = (20.02,20.02,20.02,20.02,20.02,20.02,20.02,20.02,20.02, 28.792, 50.02, 71.212, 80.02, 71.2121, 50.021, 28.7921)
/selectionmode = list.hposition_list_set8.currentindex
/selectionrate = always
</list>
#vpos for fillers:
<list vposition_list_set8_filler>
/items = (20.02, 28.792, 50.02, 71.212, 80.02, 71.2121, 50.021, 28.7921)
/selectionmode = list.hposition_list_set8.currentindex
/selectionrate = always
/= not(values.vpos1)
</list>
#end lists
#end lists


########## trials::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
<surveypage codepage>
/ showpagenumbers = false
/ showquestionnumbers = false
/ questions = [1=codebox]
</surveypage>
<textbox codebox>
/ caption = "Select and copy the following code: THE KEYBOARD DOES NOT WORK: copy the code using the mouse"
/ defaultresponse = values.code
/txcolor = (255, 200, 0)
/position = (50,50)
</textbox>


#-----------------#TRIAL TYPES:: -------------------------------------------------
FORMFORMFORMFORMFORMFORMFORM
777777777777777777777777777777777777777777777777777
<trial set8_target_diamond_dis_form>
/ontrialbegin = [values.listnumber = 1; values.hpos1 = list.hpos.nextvalue; values.vpos1 = list.vposition_list_set8.nextvalue;
values.distractor_position_random = floor(rand(1,8));
values.filler_position1 = list.hpos_filler.nextvalue; values.filler_position1_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position2 = list.hpos_filler.nextvalue; values.filler_position2_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position3 = list.hpos_filler.nextvalue; values.filler_position3_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position4 = list.hpos_filler.nextvalue; values.filler_position4_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position5 = list.hpos_filler.nextvalue;values.filler_position5_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position6 = list.hpos_filler.nextvalue;values.filler_position6_v = list.vposition_list_set8_filler.nextvalue;
values.filler_position7 = list.hpos_filler.nextvalue;values.filler_position7_v = list.vposition_list_set8_filler.nextvalue]

/ontrialbegin = [values.line_ori_target = floor(rand(1,3)); values.line_ori_filler1 = floor(rand(1,5)); values.line_ori_filler2 = floor(rand(1,5)); values.line_ori_filler3 = floor(rand(1,5));values.line_ori_filler4 = floor(rand(1,5));
values.line_ori_filler5 = floor(rand(1,5)); values.line_ori_filler6 = floor(rand(1,5)); values.line_ori_filler7 = floor(rand(1,5));]

/ontrialbegin = [if(values.line_ori_target==1)values.correct_response=(44) else values.correct_response =(50)]
/stimulusframes = [1=target_shape, horizontal_line1, vertical_line1,filler_1, filler_2, filler_3, filler_4, filler_5, filler_6, filler_7, distractor_1, horizontal_line_slanted_up_left1, horizontal_line_slanted_up_right1, vertical_line_slanted_left1, vertical_line_slanted_right1,vertical_line_slanted_right2,vertical_line_slanted_left2,horizontal_line_slanted_up_left2,horizontal_line_slanted_up_right2,vertical_line_slanted_right3,vertical_line_slanted_left3,horizontal_line_slanted_up_left3,horizontal_line_slanted_up_right3,vertical_line_slanted_right4,vertical_line_slanted_left4,horizontal_line_slanted_up_left4,horizontal_line_slanted_up_right4,vertical_line_slanted_right5,vertical_line_slanted_left5,horizontal_line_slanted_up_left5,horizontal_line_slanted_up_right5,vertical_line_slanted_right6,vertical_line_slanted_left6,horizontal_line_slanted_up_left6,horizontal_line_slanted_up_right6, vertical_line_slanted_right7,vertical_line_slanted_left7,horizontal_line_slanted_up_left7,horizontal_line_slanted_up_right7,cover_picture]
/validresponse = ("z","m")
/iscorrectresponse = [trial.set8_target_diamond_dis_form.response == values.correct_response]
/timeout = values.time_out
/posttrialpause = values.post_trial_pause
/pretrialpause = floor(rand(values.jitter_low,values.jitter_high))
</trial>