adopted Columbia Card Task


Author
Message
minin72704
minin72704
Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)
Group: Forum Members
Posts: 51, Visits: 189
Moreover, there was always the same feedback presented. How can i make three kinds of feedbacks present alternately? for example, A feedback presents after 1st press, B feedback presents after 2nd press, etc.

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: 13K, Visits: 104K
#1: You can have multiple /responsemessage attributes tied to the same response.
#2: You present different feedback images just like you always do: Have multiple items in the <picture> element and select them sequentially or via a variable (a <values> entry):

<picture peerfeedback>
/ items = ("peerfeedback.jpg", "perfeedback2.jpg", "perfeedback3.jpg")
/ hposition = 50%
/ vposition = 50%
/ select = sequence
</picture>

or, more flexibly,


<picture peerfeedback>
/ items = ("peerfeedback.jpg", "perfeedback2.jpg", "perfeedback3.jpg")
/ hposition = 50%
/ vposition = 50%
/ select = values.feedbackitem
</picture>

where you set the feedbackitem value via conditional logic as needed.

#3: If you want to display the feedback after turn-over, you need to display it via the <trial>'s /stimulustimes *before* displaying the cards or via a dedicated feedback <trial> invoked via /branch.

minin72704
minin72704
Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)
Group: Forum Members
Posts: 51, Visits: 189
Thanks for your instruction. I hae another problem, that is, I set timeout to 10s in <trial pickcard1> in CCT_cold, but it is lasting 20s. Could you help me point out what is the problem in my script? Thank you.

Attachments
CCT_Cold_formal reward.iqx (703 views, 28.00 KB)
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: 13K, Visits: 104K
If you want the trial to have a fixed duration, do
<trial pickcard1>

/ stimulusframes = [1=roundinfo1, debuginfo,
    CR1C1_cold, CR1C2_cold, CR1C3_cold, CR1C4_cold, CR1C5_cold, CR1C6_cold,
    00,01,02,03,04,05,06]

/ validresponse = (2,3,4,5,7,8,9)

/ ontrialend = [if(startswith(trial.pickcard1.response,"0"))values.ncards1=substring(trial.pickcard1.response,1,1)
    else values.ncards1=trial.pickcard1.response]

/ branch = [if(values.gameround1=="8")trial.mean]
/ ontrialend = [values.totalscore1+=values.score1]

/ responsemessage = (2, number00, 1)
/ responsemessage = (3, number01, 1)
/ responsemessage = (4, number02, 1)
/ responsemessage = (5, number03, 1)
/ responsemessage = (7, number04, 1)
/ responsemessage = (8, number05, 1)
/ responsemessage = (9, number06, 1)
/ trialduration= 10000
</trial>

instead of

<trial pickcard1>

/ stimulusframes = [1=roundinfo1, debuginfo,
    CR1C1_cold, CR1C2_cold, CR1C3_cold, CR1C4_cold, CR1C5_cold, CR1C6_cold,
    00,01,02,03,04,05,06]

/ validresponse = (2,3,4,5,7,8,9)

/ ontrialend = [if(startswith(trial.pickcard1.response,"0"))values.ncards1=substring(trial.pickcard1.response,1,1)
    else values.ncards1=trial.pickcard1.response]

/ branch = [if(values.gameround1=="8")trial.mean]
/ ontrialend = [values.totalscore1+=values.score1]

/ responsemessage = (2, number00, 1)
/ responsemessage = (3, number01, 1)
/ responsemessage = (4, number02, 1)
/ responsemessage = (5, number03, 1)
/ responsemessage = (7, number04, 1)
/ responsemessage = (8, number05, 1)
/ responsemessage = (9, number06, 1)
/ timeout = 10000
/ posttrialpause = trial.pickcard1.timeout-trial.pickcard1.elapsedtime

</trial>

Your getcondition trial has also has a fixed duration of 10s:

<trial getcondition1>
/ ontrialbegin = [values.trialtype1=list.trialtype1.nextvalue; values.score1=0;
    values.gameround1+=1; values.ncards1=0;
    reset(list.cardnumber1)]
/ ontrialbegin = [if(values.trialtype1==1)values.losscards1=list.losscards1.nextvalue
    else values.losscards1=noreplace(1)]
/ ontrialbegin = [if(values.trialtype1==1)values.gainamount1=list.gainamount1.nextvalue
    else values.gainamount1=noreplace(12)]
/ ontrialbegin = [if(values.trialtype1==1)values.lossamount1=list.lossamount1.nextvalue
    else values.lossamount1=noreplace(250,750)]
/ ontrialbegin = [if(values.trialtype1==1)values.score1=40]
/ ontrialbegin = [if(values.trialtype1==1)values.nsafecards1=6-values.losscards1]
/ stimulusframes = [1=BlankScreen, roundinfo1]

/ validresponse = (noresponse)
/ trialduration = 10000
/ recorddata = false
/ branch = [trial.pickcard1]
/ showmousecursor = false
</trial>

That adds up to 20 seconds per round.

minin72704
minin72704
Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)
Group: Forum Members
Posts: 51, Visits: 189
Thanks for your help. In addition, I have another question about BARTY (Youth Balloon Analogue Risk Task). My question is I would like to change trials to 12 rather than 30, so I revise <values> totalballoons to 12, but the program closed after 1 trial (please see attachment).  
Attachments
BARTY.iqx (663 views, 34.00 KB)
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: 13K, Visits: 104K
The script works as expected for me. A partial data file is attached. As you can see by looking at the values.ballooncount column, it does not stop after the 1st "trial" (i.e. balloon).

Attachments
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: 13K, Visits: 104K
I should add that there *is* one condition that will lead to the script terminating *prior* to completing 12 balloons. This is due to a flaw in your programming logic. You've set a fixed /trialduration in <trial choice>. This of course means that a participant can opt to *not respond* at all -- the trial will terminate after 15 seconds anyway. Your /branch attributes, however, don't cover that case. I.e., the script has nowhere to go from there and will terminate (that's what you instructed it to do, intentionally or not).

<trial choice>
/ ontrialbegin = [values.countchoice += 1]


/ stimulustimes = [0=balloon, rewardmeter,rewardmeter_fill, smallprize, middleprize, bigprize, bonus, fillmeter, pumpballoon, pumpcount, countballoon]
/ validresponse = (8, 7)
/responsemessage = (8,fillmeter_chosen, 200)
/responsemessage = (7, pumpballoon_selected, 200)

/ ontrialend = [if (trial.choice.response == "7" && values.countchoice == 1)
                        values.timebefore1stpump = trial.choice.latency ]
/ ontrialend = [if (trial.choice.response == "7"  && values.countchoice > 1)
                        {values.timebtwpumps = trial.choice.latency;
                        values.sum_timebtwpumps += values.timebtwpumps }]
/ ontrialend = [if (trial.choice.response == "8" && values.countchoice == 1)
                        values.timebeforecollectwithoutpump =  trial.choice.latency ]
/ ontrialend = [if (trial.choice.response == "8" && values.countchoice > 1)
                        values.timebtwlastpumpandcollect =  trial.choice.latency ]

/ ontrialend = [if (trial.choice.response == "7") picture.balloon.width += values.balloonsizeincrement]
/ ontrialend = [if (trial.choice.response == "7")picture.balloon.height += values.balloonsizeincrement]
/ ontrialend = [if (trial.choice.response == "7")shape.blank.width = picture.balloon.width]
/ ontrialend = [if (trial.choice.response == "7")shape.blank.height = picture.balloon.height]
/ ontrialend = [if (trial.choice.response == "7")values.pumpcount += 1]

/ ontrialend = [if (trial.choice.response == "7")values.totalpumpcount += 1]
/ ontrialend = [if (trial.choice.response == "7" && values.ballooncount < 11) values.totalpumpcount_10 += 1]
/ ontrialend = [if (trial.choice.response == "7" && values.ballooncount > 10 && values.ballooncount <21 ) values.totalpumpcount_20 += 1]
/ ontrialend = [if (trial.choice.response == "7" && values.ballooncount > 20 && values.ballooncount <31 ) values.totalpumpcount_30 += 1]

/ ontrialend = [if (trial.choice.response == "7" && values.pumpcount >1) values.mean_timebtwpumps = values.sum_timebtwpumps / (values.pumpcount-1) ]

/ ontrialend = [trial.choice.resetstimulusframes()]
 
/ branch = [if (values.pumpcount == values.explosionpoint && trial.choice.response == "7") trial.pop]
/ branch = [if ( trial.choice.response == "7") {trial.choice}]
/ branch = [if ( trial.choice.response == "8") trial.collect]
/ trialduration = 15000



</trial>

So, you ought to specify the *no response* case. Where do you want the script to go from there? To trial.collect? Then do

<trial choice>
...
/ branch = [if (values.pumpcount == values.explosionpoint && trial.choice.response == "7") trial.pop]
/ branch = [if ( trial.choice.response == "7") {trial.choice}]
/ branch = [if ( trial.choice.response == "8" || trial.choice.response == "0") trial.collect]
/ trialduration = 15000


</trial>

If you want it to do something else, specify that accordingly instead.

minin72704
minin72704
Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)
Group: Forum Members
Posts: 51, Visits: 189
It seems resulting in 15s wait after each press (pumpballoon). If i want that participants can press any times they want to within fixed 15s duration (for a balloon) before they press "collect" or balloon explored. How can I do it?

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: 13K, Visits: 104K
> It seems resulting in 15s wait after each press (pumpballoon).

Yes. That's what you instructed the script to do.

> If i want that participants can press any times they want to within fixed 15s duration (for a balloon) before they press "collect" or
> balloon explored. How can I do it?

Create a new <values> entry. Set it to 15000 in <trial init>. Use it in <trial choice>'s /timeout attribute. At the end of <trial choice> subtract the trial's latency from it.

minin72704
minin72704
Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)Distinguished Member (4.9K reputation)
Group: Forum Members
Posts: 51, Visits: 189
I set choicetimeout=15000 in <values> and set it (values.choicetimeout) in <trial.init>'s /timeout attribute then subtract the trial's latency from it at the end of <trial choice> (/ timeout = values.choicetimeout-trial.choice.latency). But, it still didn't work (please see attachment).

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search