Skip to content

Likert block in random order

Present a block of likert questions in a fresh random order per participant, with the answer options in a fixed order.

Use this for questionnaire blocks where a fixed item order could colour the answers, as when early statements set a frame that later ones are judged against. The obvious fix of shuffling every row goes wrong, because a plain shuffle does not respect page structure and will happily bury the instructions among the questions. Anchoring the instructions and shuffling only the question rows gives each participant a fresh order on an intact page. If the items share one scale and should read as a compact grid, use a matrix question instead of separate rows.

typecontentheadresponseTyperesponseOptionsrandombutton1
instructionsRate how much you agree with each statement.NEXT
formI enjoy meeting new people.likertStrongly disagree;Disagree;Neutral;Agree;Strongly agree1
formI prefer quiet evenings at home.likertStrongly disagree;Disagree;Neutral;Agree;Strongly agree1
formI feel energised after social events.likertStrongly disagree;Disagree;Neutral;Agree;Strongly agree1
formI find it easy to start conversations.likertStrongly disagree;Disagree;Neutral;Agree;Strongly agree1
formI avoid large gatherings when I can.likertStrongly disagree;Disagree;Neutral;Agree;Strongly agree1

Each statement is one type=form row: head carries the statement, responseType set to likert renders rating buttons, and responseOptions supplies the scale labels (the button count comes from the number of labels). Because the form rows are consecutive, they all render on one survey page.

random set to 1 on every question row shuffles those rows into a fresh order for each participant. The instructions row’s random cell is left genuinely empty, which anchors it in place: an empty cell is a run boundary, so the shuffle run only spans the question rows. Do not put a value on the instructions row, because the plain shuffle does not break at type changes and the instructions screen would be shuffled in among the questions. After shuffling, the question rows are still consecutive in presentation order, so they still group onto a single page.

The options order stays fixed simply because responseOptionsRandom is not used; responseOptions displays in written order by default.

Two silent traps to know about. random treats any non-empty value as “shuffle”, so 0 does not mean off, only an empty cell does. And responseType values are matched case-sensitively: Likert renders a display-only text row with nothing to answer, without any warning.

  • Shuffle the answer options too by adding responseOptionsRandom with 1 on the question rows; responseCode in the results still counts positions in the order written in responseOptions.
  • Present a random subset by moving the group to trialOrder, the column sampling specs live in. A file cannot use random and trialOrder at once, so the group moves rather than gains a second column: 1: shuffle in trialOrder is exactly the plain shuffle above, and 1: sample 3 keeps 3 of the 5 statements instead. Write the spec on any one row of the group (each group takes exactly one spec row) and the bare tag 1 on the others.
  • Split the block into two independently shuffled sets by giving the second set a different random tag (2); adjacent runs with different values shuffle separately.
  • Force an answer to every statement by adding required with 1 on the question rows.