Millisecond Forums

randomised location on screen does not work properly

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

By RBalas - 10/10/2017

Dear All,

I have a task that presents two visual stimuli at the same time one above the other. The specific stimulus location should be randomly assigned - at one trial, X should appear above Y, and on the other trial - the other way round.
Below I paste the part that should regulate this, but it doesn't. That means, that on most trials it works fine, but occasionally both X and Y appear in the same location. 

I cannot detect what I did wrong, Please help!

Robert

Now I did smth like this:

<item nonwords>
/1 = "KADIRGA"
/2 = "LOKANTA"
/3 = "NIJARON"
/4 = "FEVKANI"
</item>

<item positive_words>
/1 = "miłość"
/2 = "przyjaźń"
/3 = "uścisk"
/4 = "pokój"
/5 = "radość"
/6 = "uśmiech"
/7 = "kwiaty"
/8 = "muzyka"
/9 = "zabawa"
/10 = "sztuka"
/11= "dobro"
/12= "wakacje"
</item>

<item negative_words>
/1 = "zło"
/2 = "śmierć"
/3 = "choroba"
/4 = "rak"
/5 = "wróg"
/6 = "pistolet"
/7 = "wojna"
/8 = "wróg"
/9 = "przemoc"
/10 = "agresja"
/11 = "nieprzyjaciel"
/12 = "pogarda"
</item>

<text fixation>
/ items = ("X")
/ fontstyle = ("Arial", 5.04%, true, false, false, false, 5, 0)
/ txcolor = (220, 20, 60)
</text>

<text nonwords_pos>
/items = nonwords_pos
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text nonwords_neg>
/items = nonwords_neg
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text positive_words>
/items = positive_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<text negative_words>
/items = negative_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<counter position>
/ select = replace
/ selectionrate = always
/ items = (70,30)
</counter>

ounter position_affect>
/ select = replacenot(counter.position)
/ selectionrate = always
/ items = (70,30)
</counter>

<item nonwords_pos>
/1 = "KADIRGA"
/2 = "LOKANTA"
</item>

<item nonwords_neg>
/1 = "NIJARON"
/2 = "FEVKANI"
</item>

<trial non_pos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30;if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("j")
/ errormessage = (errortext,1500)
</trial>

<trial non_posneg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_neg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_negpos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30; if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<block condi>
/ preinstructions = (instrukcja_klasyfikacja)
/ trials = [1-40 = noreplace(non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_posneg, non_posneg,
non_neg, non_neg, non_negpos, non_negpos,non_negpos,non_negpos,non_negpos,non_negpos,non_negpos)]
</block>

<text errortext>
/ items = ("XXX")
/ fontstyle = ("Arial Unicode MS", 2.00%, false, false, false, false, 5, 0)
/ color = crimson
</text>

By Dave - 10/11/2017

RBalas - Wednesday, October 11, 2017
Dear All,

I have a task that presents two visual stimuli at the same time one above the other. The specific stimulus location should be randomly assigned - at one trial, X should appear above Y, and on the other trial - the other way round.
Below I paste the part that should regulate this, but it doesn't. That means, that on most trials it works fine, but occasionally both X and Y appear in the same location. 

I cannot detect what I did wrong, Please help!

Robert

Now I did smth like this:

<item nonwords>
/1 = "KADIRGA"
/2 = "LOKANTA"
/3 = "NIJARON"
/4 = "FEVKANI"
</item>

<item positive_words>
/1 = "miłość"
/2 = "przyjaźń"
/3 = "uścisk"
/4 = "pokój"
/5 = "radość"
/6 = "uśmiech"
/7 = "kwiaty"
/8 = "muzyka"
/9 = "zabawa"
/10 = "sztuka"
/11= "dobro"
/12= "wakacje"
</item>

<item negative_words>
/1 = "zło"
/2 = "śmierć"
/3 = "choroba"
/4 = "rak"
/5 = "wróg"
/6 = "pistolet"
/7 = "wojna"
/8 = "wróg"
/9 = "przemoc"
/10 = "agresja"
/11 = "nieprzyjaciel"
/12 = "pogarda"
</item>

<text fixation>
/ items = ("X")
/ fontstyle = ("Arial", 5.04%, true, false, false, false, 5, 0)
/ txcolor = (220, 20, 60)
</text>

<text nonwords_pos>
/items = nonwords_pos
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text nonwords_neg>
/items = nonwords_neg
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text positive_words>
/items = positive_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<text negative_words>
/items = negative_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<counter position>
/ select = replace
/ selectionrate = always
/ items = (70,30)
</counter>

ounter position_affect>
/ select = replacenot(counter.position)
/ selectionrate = always
/ items = (70,30)
</counter>

<item nonwords_pos>
/1 = "KADIRGA"
/2 = "LOKANTA"
</item>

<item nonwords_neg>
/1 = "NIJARON"
/2 = "FEVKANI"
</item>

<trial non_pos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30;if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("j")
/ errormessage = (errortext,1500)
</trial>

<trial non_posneg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_neg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_negpos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30; if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<block condi>
/ preinstructions = (instrukcja_klasyfikacja)
/ trials = [1-40 = noreplace(non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_posneg, non_posneg,
non_neg, non_neg, non_negpos, non_negpos,non_negpos,non_negpos,non_negpos,non_negpos,non_negpos)]
</block>

<text errortext>
/ items = ("XXX")
/ fontstyle = ("Arial Unicode MS", 2.00%, false, false, false, false, 5, 0)
/ color = crimson
</text>


You are oversampling your position <counter>. The selectedvalue property performs a selection from the counter; the counters are set to selectionrate=always. Thus, a selection occurs every time you use it. In other words, you are selecting as many as three times from a given <counter>, per your references to selectedvalue in your /ontrialbegin logic and _additionally_ per the references in the stimuli's /position attributes. It actually does not make sense to use /selectionrate=always in your case. As far as I can see, you want one sample from the counter per trial. Thus you can simply use /selectionrate=trial and your problem should go away.

<counter position>
/ select = replace
/ selectionrate = trial
/ items = (70,30)
</counter>
By RBalas - 10/12/2017

Dave - Wednesday, October 11, 2017
RBalas - Wednesday, October 11, 2017
Dear All,

I have a task that presents two visual stimuli at the same time one above the other. The specific stimulus location should be randomly assigned - at one trial, X should appear above Y, and on the other trial - the other way round.
Below I paste the part that should regulate this, but it doesn't. That means, that on most trials it works fine, but occasionally both X and Y appear in the same location. 

I cannot detect what I did wrong, Please help!

Robert

Now I did smth like this:

<item nonwords>
/1 = "KADIRGA"
/2 = "LOKANTA"
/3 = "NIJARON"
/4 = "FEVKANI"
</item>

<item positive_words>
/1 = "miłość"
/2 = "przyjaźń"
/3 = "uścisk"
/4 = "pokój"
/5 = "radość"
/6 = "uśmiech"
/7 = "kwiaty"
/8 = "muzyka"
/9 = "zabawa"
/10 = "sztuka"
/11= "dobro"
/12= "wakacje"
</item>

<item negative_words>
/1 = "zło"
/2 = "śmierć"
/3 = "choroba"
/4 = "rak"
/5 = "wróg"
/6 = "pistolet"
/7 = "wojna"
/8 = "wróg"
/9 = "przemoc"
/10 = "agresja"
/11 = "nieprzyjaciel"
/12 = "pogarda"
</item>

<text fixation>
/ items = ("X")
/ fontstyle = ("Arial", 5.04%, true, false, false, false, 5, 0)
/ txcolor = (220, 20, 60)
</text>

<text nonwords_pos>
/items = nonwords_pos
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text nonwords_neg>
/items = nonwords_neg
/select = noreplace
/position = (50, counter.position.selectedvalue)
/txcolor = (255, 0, 0)
</text>

<text positive_words>
/items = positive_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<text negative_words>
/items = negative_words
/select = noreplace
/position = (50, 30)
/txcolor = (255, 0, 0)
</text>

<counter position>
/ select = replace
/ selectionrate = always
/ items = (70,30)
</counter>

ounter position_affect>
/ select = replacenot(counter.position)
/ selectionrate = always
/ items = (70,30)
</counter>

<item nonwords_pos>
/1 = "KADIRGA"
/2 = "LOKANTA"
</item>

<item nonwords_neg>
/1 = "NIJARON"
/2 = "FEVKANI"
</item>

<trial non_pos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30;if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("j")
/ errormessage = (errortext,1500)
</trial>

<trial non_posneg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_pos ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_neg>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.negative_words.vposition = 30; if(counter.position.selectedvalue == 30) text.negative_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = negative_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<trial non_negpos>
/ontrialbegin = [if(counter.position.selectedvalue == 70) text.positive_words.vposition = 30; if(counter.position.selectedvalue == 30) text.positive_words.vposition = 70 ]
/ pretrialpause = 1000]
/ pretrialpause = 1000
/ stimulustimes = [1 = fixation; 50 = nonwords_neg ; 200 = positive_words]
/ validresponse = ("j", "f")
/ correctresponse = ("f")
/ errormessage = (errortext,1500)
</trial>

<block condi>
/ preinstructions = (instrukcja_klasyfikacja)
/ trials = [1-40 = noreplace(non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_pos, non_posneg, non_posneg,
non_neg, non_neg, non_negpos, non_negpos,non_negpos,non_negpos,non_negpos,non_negpos,non_negpos)]
</block>

<text errortext>
/ items = ("XXX")
/ fontstyle = ("Arial Unicode MS", 2.00%, false, false, false, false, 5, 0)
/ color = crimson
</text>


You are oversampling your position <counter>. The selectedvalue property performs a selection from the counter; the counters are set to selectionrate=always. Thus, a selection occurs every time you use it. In other words, you are selecting as many as three times from a given <counter>, per your references to selectedvalue in your /ontrialbegin logic and _additionally_ per the references in the stimuli's /position attributes. It actually does not make sense to use /selectionrate=always in your case. As far as I can see, you want one sample from the counter per trial. Thus you can simply use /selectionrate=trial and your problem should go away.

<counter position>
/ select = replace
/ selectionrate = trial
/ items = (70,30)
</counter>

Dave,

Once again - you saved my... :)

thanks!

Robert