PennController for IBEX › Forums › Support › Randomization of presentation of columns in trial with last column always last
- This topic has 2 replies, 2 voices, and was last updated 2 years, 9 months ago by gg110.
-
AuthorPosts
-
February 14, 2022 at 9:14 pm #7756gg110Participant
Hi Jeremy,
I’m trying to randomize the order of the presentation of some stimuli in such a ways that interference words are presented in some random order, and the target stimulus is presented at the end.
The structure of the .csv file that I’m using with Template isset1, set2, set3, set4, target aa, bb, cc, dd, could gore ee, ff, gg, hh, deep cot ii, jj, kk, ll, keen lap
and so I want for any given participant, for example, to be presented with set4, set2, set3, set1, target or set2, set3, set1, set4, target, etc.
The rows are randomized with randomize(), but I can’t figure out how to randomize the set_ columns.
I have the following:
Sequence( "consent", "intro", "local_recorder", "Checking_audio", "Checking_recording", "instructions", sepWith("sendAsync",randomize("repetition")), "questionnaire", "sendSoon", SendResults() , "final" ) Template("speecherrors.csv", row => newTrial("repetition", defaultText .css("p") .center() .print() , newText("Please repeat the following sets of words as fast as you can when they appear on the screen. Press start to display them.") .css("p") , newButton("Start") .log() .center() .print() .wait() .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set1", "audio") .log() .record() , newText( "blank line" ) .hidden() , newText("set1", row.set1) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set1").stop()) .start() .wait() , getText("set1") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set2", "audio") .log() .record() , newText("set2", row.set2) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set2").stop()) .start() .wait() , getText("set2") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set3", "audio") .log() .record() , newText("set3", row.set3) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set3").stop()) .start() .wait() , getText("set3") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set4", "audio") .log() .record() , newText("set4", row.set4) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set4").stop()) .start() .wait() , getText("set4") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_target", "audio") .log() .record() , newText("target", row.target) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_target").stop()) .start() .wait() , getText("target") .remove() ) ) Template( "autismquotient.csv", row => newTrial("questionnaire", newText("<p>Please choose the response that <strong>best</strong> describes how strongly the statement applies to you.</p>") .center() .print() , newText("q", row.aquestions) .log() .center() .print() , newText("blank line") .print() .hidden() , newScale("rating", "Strongly agree", "Slightly agree", "Slightly disagree", "Strongly disagree") .log() .center() .css("border", "solid 1px black") .labelsPosition("right") .print() .wait() , newText("blank line") .print() .hidden() , newButton("click", "Submit") .center() .print() .wait() ) )
https://upenn.pcibex.net/r/imWBEL/
So right now, the presentation of the stimuli is just filler (hard-coded sequentially), because I want them to be presented randomly but I wasn’t sure what to use to present those specific columns in a random order.
Also, the reason I coded it the way above is because I want the user to only need to click Start once at the beginning of a trial to present all items one at a time without needing to click to move forward to the next pair until a new trial begins.- This topic was modified 2 years, 9 months ago by gg110.
February 15, 2022 at 1:02 pm #7759JeremyKeymasterHi,
You can reference the keys
set1
,set2
,set3
andset4
in an array and shuffle it using Ibex’sfisherYates
:Template("speecherrors.csv", row => newTrial("repetition", defaultText .css("p") .center() .print() , newText("Please repeat the following sets of words as fast as you can when they appear on the screen. Press start to display them.") .css("p") , newButton("Start") .log() .center() .print() .wait() .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set1", "audio") .log() .record() , newText( "blank line" ) .hidden() , row.sets = ["set1","set2","set3","set4"], // array of keys fisherYates(row.sets) // shuffle the array , newText("set1", row[row.sets[0]]) // use the first (shuffled) key .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set1").stop()) .start() .wait() , getText("set1") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set2", "audio") .log() .record() , newText("set2", row[row.sets[1]]) // use the second (shuffled) key .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set2").stop()) .start() .wait() , getText("set2") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set3", "audio") .log() .record() , newText("set3", row[row.sets[2]]) // use the third (shuffled) key .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set3").stop()) .start() .wait() , getText("set3") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_set4", "audio") .log() .record() , newText("set4", row[row.sets[3]]) // use the fourth (shuffled) key .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_set4").stop()) .start() .wait() , getText("set4") .remove() , newTimer("wait", 1000) .log() .start() .wait() , newMediaRecorder("speech_target", "audio") .log() .record() , newText("target", row.target) .log() , newTimer("wait", 3000) .log() .callback(getMediaRecorder("speech_target").stop()) .start() .wait() , getText("target") .remove() ) .log("first", row[row.sets[0]]) // log the first shuffled key .log("second", row[row.sets[1]]) // log the second shuffled key .log("third", row[row.sets[2]]) // log the third shuffled key .log("fourth", row[row.sets[3]]) // log the fourth shuffled key .log("target", row.target) // log the target word too )
Jeremy
February 15, 2022 at 2:06 pm #7760gg110ParticipantGreat! Thank you for your help.
-
AuthorPosts
- You must be logged in to reply to this topic.