ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
That was it! Dave, you're the best.
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 104K
|
> forgo the random counters altogether and just used4 separate picture "decks..."
This is one workable approach.
Problem:
<trial L_A1> / ontrialbegin = [values.probe_alc_pos = "L"; values.probe_nonalc_pos = "R"; values.probe_arrow_pos = "L"; values.image_name = picture.alc_picsL1.currentitem; values.image_cat = "ALC"] ... </trial>
As explained previously, currentitem will not reflect what you want when read /ontrialbegin. This belongs in /ontrialend to have the expected result, i.e., reflect *what was displayed in that instance of the trial*.
Once you fix that, everything should be fine.
|
|
|
ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
I even tried to forgo the random counters altogether and just used4 separate picture "decks..." Again, I must be doing something wrong...
|
|
|
ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
I see what you mean. Should I tie them to items? Get rid of the "noreplace"? Thank you for being patient with me, it's my first coding language ever.
|
|
|
ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
I see what you mean. Should I tie them to items? Get rid of the "noreplace"? Thank you for being patient with me, it's my first coding language ever.
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 104K
|
I've tried to explain this before in this thread. To quote the relevant portion:
"Furthermore, for the random on-screen position, you make no adjustments at all. You simply draw from two x/y positions randomly *without* replacement.
<counter type1pos> / items = (20%,80%) / select = noreplace </counter>
<counter type2pos> / items = (20%,80%) / not = (type1pos) / select = noreplace / selectionrate = trial </counter>
Here, too, there is no reason that ALC should appear equally often on the LEFT in arrowL trials as it does in arrowR trials."
You do *not* have any provisions at all as to where a specific image item should appear across X number of trials. You sample from *two* positions randomly *without* replacement. The positions are neither tied to any particular item nor a particular class of item (ALC or NONALC)
Suppose in the first trial 80% is selected in type1pos (and conversely 20% in type2pos). Then in the *next* trial -- since you are sampling without replacement -- 20% will be selected in type1pos and 80% necessarily.
The deck of cards analogy applies here as well, and it also applies to other selection modes (with replacement, etc.).
Hope this clarifies.
|
|
|
ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
That's super helpful, thanks so much for that. I'm now thinking the error must be somewhere in the selection or counter or my understanding thereof. I set the block to this: <block stimuli> / trials = [1-36 = noreplace(arrowL) </block>
Then I ran the monkey through it, then looked at the data, expecting that each of the 36 images should appear once. This wasn't the case, as soon pictures appeared 2-3x and some not at all. To be clear, I have 18 image pairs. I want each image to appear twice on the left, and twice on the right, with the arrow probe point L&R for each orientation. So ideally something like: ALC < NONALC ALC > NONALC NONALC < ALC NONALC > ALC For every single pair. It should be 72 trials, then. But I'm doing something totally wrong. When you look at the script, is it coded with that arrangement in mind? Or have I not set it up properly?
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 104K
|
P.S.: For a simple illustration that may clarify the above, see the example at https://www.millisecond.com/forums/FindPost16492.aspx .
|
|
|
Dave
|
|
Group: Administrators
Posts: 13K,
Visits: 104K
|
<trial arrowL> / ontrialbegin = [values.probe_alc_pos = picture.alc_picsL.hposition; values.probe_nonalc_pos = picture.nonalc_picsL.hposition; values.probe_arrow_pos = "L"] / ontrialbegin = [if (picture.alc_picsL.hposition == 20%) values.image_name = picture.alc_picsL.currentitem] / ontrialbegin = [if (picture.alc_picsL.hposition == 20%) values.image_cat = "ALC"] / ontrialbegin = [if (picture.nonalc_picsL.hposition == 20%) values.image_name = picture.nonalc_picsL.currentitem] / ontrialbegin = [if (picture.nonalc_picsL.hposition == 20%) values.image_cat = "NONALC"] / stimulustimes = [0 = fixation; 500 = erasefixation, alc_picsL, nonalc_picsL, arrowL; 700 = blankscreen, drink_nonalc, drink_alc] / validresponse = (200, 208) / iscorrectresponse = [(picture.alc_picsL.hposition == 20% && text.drink_alc.vposition == 35% && trial.arrowL.response == 200) || (picture.alc_picsL.hposition == 20% && text.drink_alc.vposition == 65% && trial.arrowL.response == 208)] / iscorrectresponse = [(picture.nonalc_picsL.hposition == 20% && text.drink_alc.vposition == 35% && trial.arrowL.response == 200) || (picture.nonalc_picsL.hposition == 20% && text.drink_alc.vposition == 65% && trial.arrowL.response == 208)] / correctmessage = (drink_alc_clicked, 500) / errormessage = (drink_nonalc_clicked, 500) / branch = [if (picture.alc_picsL.hposition == 20% && text.drink_nonalc.vposition == 35% && trial.arrowL.response == 200) trial.arrowL.error == true] / branch = [if (picture.nonalc_picsL.hposition == 20% && text.drink_nonalc.vposition == 65% && trial.arrowL.response == 208) trial.arrowL.error == true] / responsemessage = (0, blankscreen, 100) / timeout = 3700 / posttrialpause = 1000 </trial>
No. One of the problems (I'm not sure how many there are, because I'm not 100% clear on what "spread" exactly you expect or intend to achieve), is that the values where you record image name, etc., and which -- I think -- you rely on when "checking" the "spread", do *not* reflect what you think they reflect.
/ontrialbegin attributes are executed *before* any stimuli are selected, which only happens when /stimulustimes is prepared and executed. I.e.
/ ontrialbegin = [if (picture.alc_picsL.hposition == 20%) values.image_name = picture.alc_picsL.currentitem]
will *not* reflect the item that *will eventually be* selected in that <trial>'s given instance. It reflects the item *currently* selected for that <picture> element, which -- since selection in the current trial's instance hasn't happened yet -- reflects what *was* selected in the *previous* instance of the trial.
The same goes for the position stuff and the logic you base on that.
What you'll want to do to fix that is something along the lines of
<trial arrowL> / ontrialbegin = [picture.alc_picsL.hposition = counter.type1pos.selectedvalue; picture.nonalc_picsL.hposition = counter.type2pos.selectedvalue; ] / ontrialbegin = [values.probe_alc_pos = picture.alc_picsL.hposition; values.probe_nonalc_pos = picture.nonalc_picsL.hposition; values.probe_arrow_pos = "L"] / ontrialend = [if (picture.alc_picsL.hposition == 20%) values.image_name = picture.alc_picsL.currentitem] / ontrialend = [if (picture.alc_picsL.hposition == 20%) values.image_cat = "ALC"] / ontrialend = [if (picture.nonalc_picsL.hposition == 20%) values.image_name = picture.nonalc_picsL.currentitem] / ontrialend = [if (picture.nonalc_picsL.hposition == 20%) values.image_cat = "NONALC"] / stimulustimes = [0 = fixation; 500 = erasefixation, alc_picsL, nonalc_picsL, arrowL; 700 = blankscreen, drink_nonalc, drink_alc] / validresponse = (200, 208) / iscorrectresponse = [(picture.alc_picsL.hposition == 20% && text.drink_alc.vposition == 35% && trial.arrowL.response == 200) || (picture.alc_picsL.hposition == 20% && text.drink_alc.vposition == 65% && trial.arrowL.response == 208)] / iscorrectresponse = [(picture.nonalc_picsL.hposition == 20% && text.drink_alc.vposition == 35% && trial.arrowL.response == 200) || (picture.nonalc_picsL.hposition == 20% && text.drink_alc.vposition == 65% && trial.arrowL.response == 208)] / correctmessage = (drink_alc_clicked, 500) / errormessage = (drink_nonalc_clicked, 500) / branch = [if (picture.alc_picsL.hposition == 20% && text.drink_nonalc.vposition == 35% && trial.arrowL.response == 200) trial.arrowL.error == true] / branch = [if (picture.nonalc_picsL.hposition == 20% && text.drink_nonalc.vposition == 65% && trial.arrowL.response == 208) trial.arrowL.error == true] / responsemessage = (0, blankscreen, 100) / timeout = 3700 / posttrialpause = 1000 </trial>
|
|
|
ldobb
|
|
Group: Forum Members
Posts: 36,
Visits: 146
|
Are all of my selectionmodes correct? I probably have them wrong. Argh.
|
|
|