select subset of stimuli on a basis of participants' ratings


Author
Message
Robert Balas
Robert Balas
Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)
Group: Forum Members
Posts: 38, Visits: 85
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
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
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
Robert Balas
Robert Balas
Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)
Group: Forum Members
Posts: 38, Visits: 85
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
Attachments
EC_part_chooses.zip (338 views, 770 bytes)
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
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

Robert Balas
Robert Balas
Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)
Group: Forum Members
Posts: 38, Visits: 85
Dave,

Thanks - that works fine now.

Cheers,
Robert
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
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

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K
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

Robert Balas
Robert Balas
Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)Guru (5.4K reputation)
Group: Forum Members
Posts: 38, Visits: 85
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
mario
mario
Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)Partner Member (772 reputation)
Group: Forum Members
Posts: 7, Visits: 1

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


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

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


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search