[[Rotation]]
Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


Rotation

Von Rotation spricht man, wenn die Items oder Optionen einer Frage jedem Teilnehmer in eine anderen (i.d.R. zufälligen) Reihenfolge dargeboten werden – oder wenn gar die Reihenfolge von Fragen zufällig variiert wird.

Eine Rotation wird gerne verwendet, um Reihenstellungseffekten zu begegnen. Sehr bekannt sind der Primacy- und Recency-Effekt sowie Kontrast- und Konsistenzeffekte: Die Rotation kommt also speziell dann zum Einsatz, wenn die Reihenfolge von Fragen oder Items das Antwortverhalten in der Gesamtstichprobe maßgeblich verzerren dürfte. Die tatsächlich im Einzelfall verwendete Reihenfolge fließt bei der Rotation in aller Regel nicht in die Auswertung ein.

In Abgrenzung zur Rotation gibt es die Randomisierung, bei welche Teilnehmer zufällig in Experimentalgruppen eingeteilt werden. Auch dort kann die Reihenfolge von Fragen gezielt variiert werden – dann ist diese Reihenfolge aber für die Auswertung i.d.R. hochrelevant.

Tipp: Lesen Sie zum Verständnis der komplexeren Code-Beispiele (unten) die Kapitel Einführung in PHP-Code und Einführung in Arrays.

Sinn und Unsinn der Rotation

Vorsicht: Nicht immer ist eine Rotation sinnvoll. Mit rotierten Items kann man sich ebenso problematische Messfehler einhandeln.

Sinnvoll ist eine Rotation dann, wenn man das Aggregat auf die Grundgesamtheit hochrechnen möchte. Wenn man also z.B. vergleichen will, welche Option in einer Mehrfachauswahl die meisten Kreuzchen bekommt oder welches Item in einer Skala am höchsten bewertet wird. Dann gleichen sich Verzerrungen durch die Reihenstellungseffekte im Aggregat statistisch gesehen wahrscheinlich aus.

Nicht sinnvoll ist die Rotation, wenn man die Teilnehmer untereinander vergleichen möchte. Das ist bei nahezu allen Spielarten der Korrelation der Fall, also z.B. bei der Frage ob die Zufriedenheit mit einem Fernsehgenre (in einer Fragebatterie/Skala mit anderen Items zusammen erhoben) auf die Fernsehnutzungsdauer schließen lässt. Rotiert man hier die Items der Skala, so sind einige Teilnehmer nur aufgrund von Reihenstellungseffekten mit dem Fernsehprogramm scheinbar zufriedener. Man handelt sich also durch die Rotation einen Messfehler ein.

Der Messfehler durch Rotation sinkt mit der Anzahl an Items, mit denen man ein Konstrukt misst. In der BFI-S Persönlichkeitsskala mit 3 Items je Persönlichkeitsfaktor fällt der Messfehler geringer aus als im obigen Beispiel mit einem Item. Sofern man sowohl Korrelationen rechnen will als auch die Items untereinander vergleichen, muss man die Vor- und Nachteile abwägen. Vor Einsatz der Rotation sollte man nur eben kurz innehalten und über sein Ziel nachdenken.

Rotation der Items oder Optionen

Rotation in einer Frage

Die Randomisierung oder Rotation von Items in einer Frage wird wie folgt aktiviert:

  • Öffnen Sie die Frage im Fragenkatalog
  • Im Abschnitt Auswahloptionen bzw. Items wählen Sie den Karteireiter Einstellungen.
  • Bei der Einstellung Reihenfolge wählen Sie die Option „Zufällig rotieren/mischen“.
  • Speichern Sie die Frage, in der Vorschau können Sie anschließend die Randomisierung prüfen.

Falls einzelne Items (z.B. ein „Sonstiges“ mit Texteingabe) von der Rotation ausgenommen werden sollen, öffnen Sie dieses Item im Fragenkatalog oder mit dem Bearbeiten-Symbol und aktiviert die Option Dieses Item beim Mischen der Items ausnehmen.

Hinweis: Die Rotation betrifft natürlich nur die Darstellung im Fragebogen. Die Antworten des Befragten auf ein bestimmtes Item werden immer unter derselben Kennung gespeichert.

Hinweis: In welcher Reihenfolge die Items im Fragebogen angezeigt werden, wird nicht im Datensatz abgespeichert. Falls Sie diese Information benötigen, rotieren Sie die Items mittels PHP-Code (s. unten).

Manuelle Rotation von Items oder Optionen

Sie können die Items bzw. Optionen einer Frage auch mittels PHP-Code rotieren. Dazu wird zunächst mittels getItems() eine Liste der Items/Optionen abgerufen, dann per shuffle() gemischt und schließlich wird die Frage mittels question() mit der gewünschten Item-Abfolge als Parameter angezeigt.

$items = getItems('AB01', 'all');
shuffle($items);
question('AB01', $items);

Dieses Vorgehen bietet die Möglichkeit, die angezeigte Reihenfolge im Datensatz abzuspeichern. Dies erfolgt mithilfe interner Variablen und dem Befehl put().

Beachten Sie allerdings, dass sich hier (anders als bei der Rotation per Knopfdruck) die Reihenfolge ändert, sobald der Teilnehmer die Seite neu lädt oder den Zurück-Knopf im Fragebogen verwendet. Verwenden Sie registerVarible() und isset(), um dies zu verhindern. So wird die Zufallsabfolge nur beim ersten Laden der Seite gewürfelt – beim nächsten laden ist die Variable $itemsAB bereits gesetzt (isset() steht für „is set“) und der Teil wird übersprungen.

if (!isset($itemsAB)) {
  $itemsAB = getItems('AB01', 'all');
  shuffle($itemsAB);
  registerVariable($itemsAB);
}
question('AB01', $itemsAB);

Hinweis: Nach eine mittels registerVariable() gespeicherte Variable auf allen Seiten des Fragebogens verfügbar ist, können Sie denselben PHP-Code nicht verwenden, um die Items einer anderen Frage zu rotieren. Denn die Variable ist ja bereits gesetzt. Verwenden Sie für die andere Frage einfach einen anderen Variablen-Namen (z.B. $itemsCD).

Parallele Rotation von Items in zwei Fragen

Mit der manuellen Rotation (s. oben) können Sie in zwei oder mehr Fragen dieselbe rotierte Item-Abfolge verwenden. Falls die Fragen auf unterschiedlichen Seiten stehen, verwenden Sie auch hierfür registerVariable() – genau wie im Beispiel oben – um die Abfolge für weitere PHP-Code-Elemente verfügbar zu machen.

if (!isset($itemsAB)) {
  $itemsAB = getItems('AB01', 'all');
  shuffle($itemsAB);
  registerVariable($itemsAB);
}
question('AB01', $itemsAB);

Auf derselben oder späteren Seiten kann die Reihenfolge, wie sie in $itemsAB gespeichert ist, einfach für andere Fragen verwendet werden.

question('AB02', $itemsAB);

Rotation von Items über mehrere Seiten

Falls Sie in einer Frage sehr viele Items haben, möchten Sie diese vielleicht auf mehrere Seiten verteilen. Normalerweise würden Sie das erledigen, indem Sie die Frage beim Fragebogen zusammenstellen mehrfach einfügen und jeweils bei den Anzeige-Einstellungen (Anzeige-Einstellungen-Knopf) unterschiedliche Items angeben, z.B. „1-10“, „11-20“, etc.

Falls Sie die Verteilung der Items mit einer Randomisierung kombinieren möchten, benötigen Sie ein paar Zeilen PHP-Code.

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsAB01)) {
  // Alle Items der Frage AB01 auflisten
  $itemsAB01 = getItems('AB01', 'all');
  // Liste Mischen
  shuffle($itemsAB01);
  // Die Liste in Teillisten à 20 Items teilen
  $itemsAB01 = array_chunk($itemsAB01, 20);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable($itemsAB01);
}
 
// Die Items über mehrere Seiten verteilt anzeigen
$i = loopPage(count($itemsAB01));
question('AB01', $itemsAB01[$i]);

Mit der Funktion loopPage() kann man innerhalb einer Fragebogen-Seite mehrere unterschiedliche Seiten anzeigen. Alternativ zu den letzten beiden Zeilen kann man die benötigte Anzahl an Seiten im Fragebogen einfügen und jeweils den entsprechenden Item-Bereich anzeigen:

// Erste Seite
question('AB01', $itemsAB01[0]);
 
// Zweite Seite
question('AB01', $itemsAB01[1]);
 
// Dritte Seite
question('AB01', $itemsAB01[2]);

Beachten Sie bitte, dass sich auf den Seiten nur noch der Index in eckigen Klammern ändert. Der Index beginnt bei 0, nicht bei 1 (s. Beispiel oben).

Wichtig: Wenn man beim Fragebogen zusammenstellen direkt eine Seite mit Items startet, dann erhält man die Fehlermeldung, die Variable $itemsAB01 sei unbekannt. Man muss zum Testen jeweils ab der Seite starten, wo die Randomisierung damit die Variable $itemsAB01 definiert wird.

Rotation von Fragen

Im nachfolgenden wir erklärt, wie nicht nur die Items einer Frage rotiert werden, sondern wie die Reihenfolge ganzer Fragen rotiert wird. Dies erfordert ein wenig Programmierung mittels PHP-Code.

Wichtig: Der PHP-Code wird auf einer eigenen Seite unter „Fragebogen zusammenstellen“ eingefügt. Die Fragen, die rotiert werden sollen, sind im Fragen-Katalog angelegt, sie werden aber – anders als andere Fragen – nicht beim Fragebogen-Zusammenstellen eingefügt (sie werden nicht in die Fragebogen-Seiten gezogen). Auf der Seite nach dem PHP-Code geht es mit den unrotierten Bestandteilen des Fragebogens weiter.

Mehrere Fragen auf einer Seite

Das folgende Beispiel zeigt, wie man die Reihenfolge von 5 Fragen auf einer Seite im Fragebogen rotieren kann (zur Erklärung von Arrays s. Items in eine anderen Frage übernehmen):

// Teil 1: Liste der Fragen erstellen und mischen
if (!isset($fragen)) {
  $fragen = array(  // Liste der Frage-Kennungen
    'AB01',
    'AB02',
    'CC03',
    'DE01',
    'DE02'
  );
  // Die Liste zufällig mischen
  shuffle($fragen);
  // Die Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
  registerVariable($fragen);
}
 
// Teil 2: Fragen anzeigen
// Die Liste der Fragen Kennung für Kennung durchgehen
// und jeweils die entsprechende Frage anzeigen
foreach ($fragen as $kennung) {
  question($kennung);
}

Hinweis: Sollten Sie eine ähnliche Rotation an unterschiedlichen Stellen im Fragebogen verwenden, muss der Name der Variable $fragen variiert werden, also z.B. bei der ersten Verwendung $fragen1, bei der zweiten Verwendung $fragen2.

Eine Frage pro Seite

Falls Sie die Fragen einzeln auf jeweils einer eigenen Seite anzeigen möchten, kann dies mittels loopPage() relativ einfach erledigt werden. Das folgende Code-Beispiel setzt nach der Definition der Reihenfolge an (also zwei Zeilen unter dem registerVariable() im obigen PHP-Code)

// Teil 1: Liste der Fragen erstellen und mischen
// (s. oben)
 
// Teil 2: Fragen anzeigen
$i = loopPage(count($fragen));
question($fragen[$i]);

Fragen über mehrere Seiten rotieren

Die Rotation von Fragen über mehrere Seiten ist nur geringfügig anspruchsvoller. Das folgende Beispiel zeigt, wie 6 Fragen auf 2 Seiten verteilt werden können:

// PHP-Code auf Seite 1
 
// Teil 1: Erstellen und mischen der Liste - nur einmalig ausführen
if (!isset($fragen)) {
  // Liste der Frage-Kennungen erstellen
  $fragen = array(
    'AB01', 'AB02',
    'CC02', 'CC03',
    'DE01', 'DE02'
  );
  // Die Liste zufällig mischen
  shuffle($fragen);
  // Die Listen auf allen Seiten verfügbar machen
  registerVariable($fragen);
}
 
// Teil 2a
// Die ersten drei Kennungen der Liste anzeigen
question($fragen[0]);
question($fragen[1]);
question($fragen[2]);
// PHP-Code auf Seite 2
// Hier ist Teil 1 nicht (!) erneut erforderlich
 
// Teil 2b
// Die nächsten drei Kennungen der Liste anzeigen
question($fragen[3]);
question($fragen[4]);
question($fragen[5]);

Fragen zusammen mit weiterem Inhalt rotieren

Noch einen Schritt weiter muss man gehen, um weitere Daten (z.B. ein Bild als Stimulus) mit den Fragen zusammen zu rotieren. Wenn also vor Frage 1 immer „bild1.png“ und vor Frage 2 immer „bild2.gif“ angezeigt werden soll. Aber vom Prinzip her ändert sich nichts. Im folgenden Beispiel zeigt jede Seite nur eine Kombination aus Bild und Frage – es können aber (wie im vorigen Beispiel) mehrere Fragen auf einer Seite gestellt werden.

if (!isset($blocks)) {
  $blocks = array(  // Liste der Frage-Kennungen und zugehöriger Bilder
    array('AB01', 'bild1.png'),
    array('AB02', 'bild2.gif'),
    array('AB03', 'bild3.jpg'),
    array('AB04', 'bild4.png')
  );
 
  // Die Liste mischen
  shuffle($blocks);
  // Die Listen auf allen Seiten verfügbar machen
  registerVariable($blocks);
}
 
// Anzeige der Blöcke
$i = loopPage(count($blocks));
// Bild anzeigen
html('<p><img src="'.$blocks[$i][1].'" alt="Wahlplakat"></p>');
// Frage anzeigen
question($blocks[$i][0]);

Alternativ können mehrere Seiten im Fragebogen eingefügt und jeweils ein Block angezeigt werden. Dies kann z.B. hilfreich sein, wenn die Blöcke nicht direkt hintereinander angezeigt werden sollen.

html('<p><img src="'.$blocks[0][1].'" alt="Wahlplakat"></p>');
question($blocks[0][0]);
html('<p><img src="'.$blocks[1][1].'" alt="Wahlplakat"></p>');
question($blocks[1][0]);

Seiten rotieren

Es sind natürlich auch mehrere Fragen pro Block denkbar – allerdings lässt sich so etwas in aller Regel einfacher mittels setPageOrder() lösen. Dabei werden unterschiedliche Seiten des Fragebogens in (z.B.) zufälliger Reihenfolge dargeboten.

Die Seitenabfolge muss auf der Seite vor der ersten zu rotierenden Seite erfolgen. Außerdem muss beim Fragebogen zusammenstellen jeder Seite eine eindeutige Kennung zugeteilt werden. Im folgenden Beispiel wäre das „B1“, „B2“, … „B5“. Auch die darauffolgende Seite muss eine Kennung erhalten (z.B. „SD“).

if (!isset($seiten)) {
  // Liste der Seiten definieren
  $seiten = array('B1','B2','B3','B4','B5');
  // Liste mischen
  shuffle($seiten);
  // Die Seite ergänzen, wo es nachher weiter geht
  $seiten[] = 'SD';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($seiten);
}
setPageOrder($seiten);

Hinweis: Wann immer Sie isset() einsetzen, um eine spätere Veränderung der Reihenfolge (z.B. durch Verwendung des Zurück-Knopfes) zu vermeiden, können Sie die Variable (hier: $seiten) nur einmal im Fragebogen verwenden. Sollten Sie mehrere derartige Bereiche benötigen, variieren Sie den Namen der Variable, z.B. $seiten1 und $seiten2.

Rotation von Frageblöcken

Ebenso wie einzelne Seiten können auch Blöcke mehrere Seiten rotiert werden. Der einzige Unterschied ist, dass jedem dieser Blöcke unter Fragebogen zusammenstellen eine Kennung für die jeweils erste und letzte Seite zugeordnet werden (z.B. „B1Start“ und „B1End“, „B2Start“ und „B2End“ u.s.w.). Und auch die erste Seite nach dem Bereich bekommt wieder eine Kennung („SD“).

Zufällige Rotation

Wichtig: Wenn Sie mehrere Seiten(blöcke) im Fragebogen rotieren möchten, verwenden Sie den Befehl setPageOrder() anstatt des folgenden PHP-Codes.

if (!isset($blocks)) {
  // Liste der Seiten definieren
  $blocks = array('B1Start-B1End','B2Start-B2End','B3Start-B3End');
  // Liste mischen
  shuffle($blocks);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks[] = 'SD';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);

Systematische Rotation

Mitunter ist es nicht nur erforderlich, Reihenfolge-Effekte zu randomisieren, sondern aktiv zu kontrollieren. Dies lässt sich erreichen, indem man eine Variante (Reihenfolge) mittels Zufallsgenerator zieht und dann mittels `setPageOrder()` festlegt.

Bei 3 Blöcken (siehe obigens Beispiel) wären das 6 mögliche Varianten der Reihenfolge. Im Zufallsgenerator würde man also 6 Zettel/Codes wie folgt vorbereiten:

1 = B1Start-B1End, B2Start-B2End, B3Start-B3End
2 = B1Start-B1End, B3Start-B3End, B2Start-B2End
3 = B2Start-B2End, B1Start-B1End, B3Start-B3End
4 = B2Start-B2End, B3Start-B3End, B1Start-B1End
5 = B3Start-B3End, B1Start-B1End, B2Start-B2End
6 = B3Start-B3End, B2Start-B2End, B1Start-B1End

Bei Fragebogen zusammenstellen auf der Fragebogen-Seite unmittelbar vor „B1Start“ wird dann der Zufallsgenerator (z.B. „RG01“) in die Fragebogen-Seite gezogen. Darunter wird der folgende PHP-Code platziert:

$order = value('RG01', 'label');
setPageOrder($order, 'SD');

„SD“ wäre auch hier wieder die Seite, die auf B3End folgt, also gene Seite, wo es in allen Gruppen nach Abarbeiten der Seitenabfolge weitergehen soll.

Rotation und Mischen von Blöcken

Sollen zusätzlich zu den Blöcken (jeweils bestehend aus mehreren Seiten) auch noch deren Seiten gemischt werden? Dann benötigt man verschachtelte Arrays und muss shuffle() sowohl auf die inneren wie auch auf die äußeren Arrays anwenden.

Die Seiten innerhalb der Blöcke müssen in diesem Fall in einem Array einzeln angegeben werden ('B1Start','B1B','B1C','B1End'). Die Angabe eines Bereichs (z.B. 'B1Start-B1End') würde keine Rotation innerhalb dieses Bereichs erlauben.

if (!isset($blocks)) {
  // Liste der Seiten definieren
  $blocks = array(
    // Block 1
    array('B1A', 'B1B', 'B1C'),
    // Block 2
    array('B2A', 'B2B', 'B2C', 'B2D'),
    // Block 3
    array('B3A', 'B3B')
  );
  // Jeden einzelnen Block in sich mischen
  for ($i=0; $i<count($blocks); $i++) {
    shuffle($blocks[$i]);
  }
  // Liste der Blöcke mischen
  shuffle($blocks);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks[] = 'SD';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);
de/create/rotation.1579091087.txt.gz · Zuletzt geändert: 15.01.2020 13:24 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki