Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

randomize_order produces unexpected results #2783

Closed
matanmazor opened this issue Sep 22, 2022 · 5 comments
Closed

randomize_order produces unexpected results #2783

matanmazor opened this issue Sep 22, 2022 · 5 comments
Assignees

Comments

@matanmazor
Copy link

Dear Josh and team,

I'm using JsPsych for all my online experiments (🙏), and today for the first time I noticed an unexpected behaviour: when using 'randomize_order' to randomize trial order within a block, randomization seems to constrain the max number of consecutive trials in a row to 2. I always thought randomizing this way should result in an entirely pseudo-randomized trial order, without any constraints.

I was wondering if there's a way to relax this constraint, and whether this behaviour is expected/documented (I couldn't find it in the docs but maybe I'm searching in the wrong place).

Here's a code snipped that should reproduce this behaviour, adapted from the demo experiment in the tutorial:

var timeline = [];

  /* define fixation and test trials */
      var number = {
        type: jsPsychHtmlKeyboardResponse,
        stimulus: jsPsych.timelineVariable('stimulus'),
        trial_duration: 50
      };

      var test_stimuli = [
            { stimulus: "1"},
            { stimulus: "2"}
          ];

      /* define test procedure */
      var test_procedure = {
        timeline: [number],
        timeline_variables: test_stimuli,
        repetitions: 50,
        randomize_order: true
      };
      timeline.push(test_procedure);

(the number of switches between 1 and 2 is around 75% and not 50% as expected by chance alone).

Many thanks!!
-Matan

@jodeleeuw
Copy link
Member

Hi @matanmazor,

The repetitions parameter causes the entire timeline to repeat. On each repetition, a new random order will be generated when randomize_order is true. So with this configuration you will always get blocks of two trials where each block contains 1 and 2, though 1 will come before 2 ~50% of the time in each block.

The way to do what you are after is using the sample parameter, and specifically the fixed-repetitions option. The documentation for this option contains a helpful example.

Cheers!

@matanmazor
Copy link
Author

Thanks @jodeleeuw, that's very helpful.
I will make sure to change this for my future studies, and let my current and former labmates know (I think they also used the randomize_order approach). I wonder if it would be helpful to flag this in the "Demo Experiment: Simple Reaction Time Task", since I imagine many people would start there and adapt the experiment to their needs step by step. Maybe also worth a tweet?
Again many many thanks!

@jodeleeuw
Copy link
Member

@becky-gilbert if you are still working on docs updates what do you think about adding some clarification to the tutorial to cover this point?

@becky-gilbert
Copy link
Collaborator

@matanmazor! sorry about the confusion over how this works, and thanks for flagging it!

There's now a note about this in the documentation Simple RT Task tutorial. It's in the box called "Info: Randomizing timeline variables".

I didn't wait for feedback on this new info box because I was making some other docs changes alongside this one that I wanted to get out quickly. But if you have suggestions for improving the docs on this, please let us know!

@becky-gilbert
Copy link
Collaborator

Also @jodeleeuw @bjoluc you might've noticed this already, but in case not: I also made a few other changes to the RT Task docs alongside this one:

  • added titles to the info boxes
  • made the info boxes collapsible, and initially rendered them collapsed
  • fixed a info box formatting problem
  • fixed a few typos and links

See 540046b.

I went ahead with these changes because I figured they were pretty uncontroversial, but just let me know if you want me to change anything, or feel free to edit directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants