Millisecond Forums

select subset of stimuli on a basis of participants' ratings

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

By RBalas - 3/26/2009

Hi there,

I've got something I cannot work out for a while. Here's the thing:

My experiment consists of two general phases. First, a pretest is supposed to select a subset of stimuli on a basis of participants' responses. Second, a test has to use this subset.

Now, a pretest has 50 pictures. Each of them is evaluated on a scale from -5 to +5. Second option is to use a slider.

Let's stick to the scale for now. Having defined valid responses on a keyboard I have to track the participants evaluations. How does Inquisit register response values attached to particular keys? And how those responses are stored together with a stimuli that elicited them?

On the end of the pretest I need to select a subset of pretested stimuli. Now, here the true issue. I want to select (out of 50) 3 stimuli that got lowest ratings, another 3 with greatest ratings, and yet another 3 with ratings as close to the middle of a scale as possible. Those would then be used throughout the rest of experiment.

I'll appreciate any hints or ready-made solutions,
Robert
By Dave - 3/27/2009

Robert,

a few ideas: If I'm not mistaken, your scale has 11 values (-5, -4, -3, -2, -1, 0, +1. +2, +3, +4, +5). A participant will assign one of these 11 values to each of the 50 pictures. Set up 11 empty <item> elements - one for each possible value on the scale - and write the picture files to these item elements based on the subject's response (think of it as putting the pictures in different bins). For the 2nd phase of the study draw your items from the bins you're interested in: 3 from the -5 bin, 3 from the 0 bin, 3 from the +5 bin. You'll also have to implement a few safeguards in case the respective bin contains less than three items, but that should be doable.

Hope this helps,
~Dave
By RBalas - 4/1/2009

Dear Dave,

I've tried to follow your suggestions, but I guess I must have done sth badly, cause it doesn't seem to work at all.

Could you have a quick look on the attached script? I did the pretest of stimuli (pictures) rated by pressing corresponding keyboard. what I wanted to have are the stimuli sorted into item sets based on participants responses. I've implemented page that is supposed to report how many items there are in particular item sets. Very simple, but doesn't do what it is supposed to.

Am I missing sth in the script?

All the best,
Robert
By Dave - 4/1/2009

Robert,

you'll have to use *keyboard scancodes* rather than the literal key values (i.e. letters) in your '/ ontrialend' attributes. If you write

===pretest trial
<trial pic_pretest>
/ stimulusframes = [1=noreplace(CS_US_pretest); 61=skala_pretest]
/ responseframe = 61
/ response = timeout(3000)
/ validresponse = ("a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'")
/ ontrialend = [if (trial.pic_pretest.response == "30") item.pret.min5.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "31") item.pret.min4.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "32") item.pret.min3.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "33") item.pret.min2.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "34") item.pret.min1.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "35") item.pret.0.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "36") item.pret.1.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "37") item.pret.2.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "38") item.pret.3.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "51") item.pret.4.item = text.CS_US_pretest.currentitem]
/ ontrialend = [if (trial.pic_pretest.response == "43") item.pret.5.item = text.CS_US_pretest.currentitem]
/ trialcode = "pretest_bodzcow"
</trial>

the script should work as intended (please make sure you double-check these scancodes I inserted).

Best,
~Dave
By RBalas - 4/2/2009

Dave,

Thanks - that works fine now.

Cheers,
Robert
By Dave - 4/2/2009

Cool - please keep me posted about your progress. This is an interesting, little problem and I'd really like to see the result once it's finished.

Cheers,
~Dave
By Dave - 5/5/2009

Hey Robert,

any progress with this? I might be doing something similar fairly soon, so if you could share your experiences (or even your script if that's possible) that would be very helpful.

Thanks,
~Dave
By RBalas - 6/16/2009

Dave,

I'm sorry that I did not respond to this. Just to much work - hope that never happens again.

the thing is that I resigned from having participant based selection of stimuli to the study. It seemed to me too much of a task to solve as for the inquisit beginner.

I'll will return to the issue shortly though. I'll keep you posted on this....

All the best,
Robert
By mario - 10/24/2011

Hi Community,


I'm interested if there are any solutions for the problem in this old post by now. Any ideas how to implement safeguards in case of bins with less than 3 items?


I was thinking about putting something like this in the block that is presenting the selected items:


/ onblockbegin = [if (item.pret.min5.item.1 == "") item.pret.min5.item= item.pret.min4.item.1]
/ onblockbegin = [if (item.pret.min5.item.2 == "") item.pret.min5.item= item.pret.min4.item.2]
/ onblockbegin = [if (item.pret.min5.item.3 == "") item.pret.min5.item= item.pret.min4.item.3]


But that seems not to be a very smart solution and would be a lot of code to apply to all possible cases...


I'm especially interested in a solution that would even work with a scale of higher resolution like a slider with values from -100 to +100.


Thanks for any ideas.


Mario

By Dave - 10/24/2011

You'll probably want to use the 'itemcount' property. See the documentation for details.


<block myblock>
/ trials = [1-10=mylikert]
</block>

<likert mylikert>
/ ontrialend = [if(likert.mylikert.response=="1")item.r1.item=text.mytext.currentitem]
/ ontrialend = [if(likert.mylikert.response=="2")item.r2.item=text.mytext.currentitem]
/ ontrialend = [if(likert.mylikert.response=="3")item.r3.item=text.mytext.currentitem]
/ ontrialend = [if(likert.mylikert.response=="4")item.r4.item=text.mytext.currentitem]
/ ontrialend = [if(likert.mylikert.response=="5")item.r5.item=text.mytext.currentitem]
/ stimulusframes = [1=mytext,debug]
/ anchorwidth = (4%)
</likert>

<text mytext>
/ items = myitems
/ position = (50%, 40%)
</text>

<item myitems>
/ 1 = "A"
/ 2 = "B"
/ 3 = "C"
/ 4 = "D"
/ 5 = "E"
/ 6 = "F"
/ 7 = "G"
/ 8 = "H"
/ 9 = "I"
/ 10 = "J"
</item>

<text debug>
/ items = ("R1=<%item.r1.itemcount%>|R2=<%item.r2.itemcount%>|R3=<%item.r3.itemcount%>|R4=<%item.r4.itemcount%>|R5=<%item.r5.itemcount%>")
/ position = (50%, 30%)
</text>

<item r1>
</item>

<item r2>
</item>

<item r3>
</item>

<item r4>
</item>

<item r5>
</item>


Regards,


~Dave

By mario - 11/23/2011

Thanks Dave,


the itemcount property helped a lot!



What I'm still interested in is how to make it when the rating is done with a slider. The solution with an empty itemlist for every possible response works fine with my -5 to +5 scale but is not very applicable for a slider from -100 to +100 with an increment of 1.


Any ideas if there's a way to do that with inquisit?



best, Mario


By Dave - 11/23/2011

The approach would be the same, although perhaps you'd want to base things on certain ranges, i.e. put all items with responses between, say, -100 to -90 in a single bin, etc.
Regards,
~Dave