Different sequencing for different participants

PennController for IBEX Forums Support Different sequencing for different participants

Tagged: 

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #6978
    Rickyy
    Participant

    Hi,

    In my experiment, I have two different subexperiments which are not related to each other. Each has its own items, conditions, fillers etc. I want to include them in one experiment with a small break. What I want to do is having them in random order for each participant. More clearly, while a participants should see
    Sequence(“intro”,”consent”,”subexp1practice”,rshuffle(“subexp1items”,”subexp1fillers”),”break”,”subexp2practice”,randomize(“subexp2items”,”subexp2fillers”),”send”,”ending”);
    another participants should see
    Sequence(“intro”,”consent”,”subexp2practice”,randomize(“subexp2items”,”subexp2fillers”),”break”,”subexp1practice”,randomize(“subexp1items”,”subexp1fillers”),”send”,”ending”).
    Also, at the end, both groups must have the same number of participants (30 participants for SubExp1-SubExp2 and 30 participants for SubExp2-SubExp1 seq. for a total of 60 participants).
    I could not do this with grouping since sub experiments already have groupings. Similarly, I could not do it with withsquare=0 assigments. I have also thougt of shuffling all trials of sub experiments inside a shuffle command but I am afraid that I will not be able to distribute groups in a balanced order and then keep track of the groupings. Other than these, I have not been able to come up with a solution to this. I would appreciate any help on this. Thanks a lot!

    Best.

    #6980
    Jeremy
    Keymaster

    Hi,

    If you need perfectly balanced groups (30-30) you’ll have to assign participants manually. If I were you, I would run a first batch of 30 participants with Sequence("intro","consent","subexp1practice",rshuffle("subexp1items","subexp1fillers"),"break","subexp2practice",randomize("subexp2items","subexp2fillers"),"send","ending"), then run a second batch of 30 participants with Sequence("intro","consent","subexp2practice",randomize("subexp2items","subexp2fillers"),"break","subexp1practice",randomize("subexp1items","subexp1fillers"),"send","ending")

    If you want it to be random, you could simply do this, but then you won’t be certain you’ll end up with exactly 30 participants in each group:

    if (Math.random() >= 0.5)
      Sequence("intro","consent","subexp1practice",rshuffle("subexp1items","subexp1fillers"),"break","subexp2practice",randomize("subexp2items","subexp2fillers"),"send","ending")
    else
      Sequence("intro","consent","subexp2practice",randomize("subexp2items","subexp2fillers"),"break","subexp1practice",randomize("subexp1items","subexp1fillers"),"send","ending")

    NB: shouldn’t it be rshuffle or randomize everywhere? Right now you have rshuffle for exp1 in the first Sequence command only

    Jeremy

    #6987
    Rickyy
    Participant

    Hi Jeremy,

    Regarding rshuffle’s, yes indeed, as you say all of them are rshuffle. I don’t know why I typed them here incorrectly. 🙂

    The conditional with math.random has its problem, as you pointed, and this can result in problems for the experiment. So, I want to go with your first solution. I am not sure if I understood correctly: should I distribute the experiment with the first Sequence to the first 30 participants and then, change the Sequence in the script to the second one and distribute it to the remaining 30 participants like that? If so, I think this can be a problem because I want to make all participants start at the same time and I won’t be able to change the script.

    But still, based on your proposal, I have come up with an idea, for which I have not been able to find the way to implement due to my poor JavaScript skills. How about if I have these two Sequences in my script inside an if-else statement (just as in your second suggestion) and also, keep track of the Counter. But this time, the condition will be the Counter and when it hits 30, the else condition (the second sequence) will start to be given to the participants. And of course, I will update counter at the beginning of the script. I tried it with xVar commands and also with plain var but could not get the variable properly. Is this doable or do you suggest any other way? Thanks a lot.

    Best,

    #6988
    Jeremy
    Keymaster

    The counter is unfortunately not a solution: if you do not increment it as soon as a participant starts your study then you run the risk of running too many early participants in the same condition (for example, with rapid signups, it could be that the counter only increases after 40 participants have started). Even if you manage to increment the counter instantly, you end up with a number of participants who did not complete your study (maybe they decide to stop, or they encounter a fatal error, etc.)

    As you can imagine, this is not specific to how Ibex handles the counter. You could imagine more sophisticated algorithms (eg. initially increment with each click on the link, and switch to conditional assignment once you start receiving submissions) but in the end you will always have multiple participants taking your study in parallel at the same time, and you will never be certain that a given participant will complete your study

    This is why I suggested you handle this manually. The other reason why you don’t want to use the internal counter is that it is already used to subset your table to rows that share the same value in the Group/List column, so you would have a confounding factor here. Moreover, what you suggest (switching to the other sequence once the counter reaches 30) practically means that not all participants start at the same time, ie. one group of participants starts before the other one. If you’re ok with that, I don’t really see a problem with running 30 participants first, and another 30 participants after that

    If your recruiting solution gives you that option, you could generate two links that differ in the value of a specific parameter (eg. “seqOrder”: https://farm.pcibex.net/p/mySlug/?seqOrder=0 vs https://farm.pcibex.net/p/mySlug/?seqOrder=1) with your participants only allowed to click one of the two. Then you can do:

    if (GetURLParameter("seqOrder")==0)
      Sequence("intro","consent","subexp1practice",rshuffle("subexp1items","subexp1fillers"),"break","subexp2practice",rshuffle("subexp2items","subexp2fillers"),"send","ending")
    else
      Sequence("intro","consent","subexp2practice",rshuffle("subexp2items","subexp2fillers"),"break","subexp1practice",rshuffle("subexp1items","subexp1fillers"),"send","ending")

    Jeremy

    #6989
    Rickyy
    Participant

    Hi Jeremy,

    That works perfectly. I will have the chance to provide two groups of participants with two different links and seqOrder=0 with if-else does the job. Thanks a lot for the help.

    Best,

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.