Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


Randomisierung mit PHP-Code

Für komplexere Randomisierungen wie zum Beispiel die Kombination von Fragen und Stimuli oder auch für komplexere HTML-Codierungen der Stimuli ist es sinnvoll, die Randomisierung durch einen PHP-Code in den Fragebogen zu integrieren. Wie dies gelingt wird in diesem Kapitel bei durch einige Beispiele erklärt.

Hinweis: Wenn Sie nur einen Stimulus (Bild oder andere Mediendateien) randomisieren möchten, sollte die einfache Vorgangsweise, die unter Einfaktorielles Design beschrieben wird, ausreichen.

Schritt 1: Zufallsgenerator - Einteilung in Experimentalgruppen

Als ersten Schritt für die folgenden Beispiele wird in jedem Fall zunächst ein Zufallsgenerator benötigt, um die Teilnehmer in verschiedene Experimentalgruppen einzuordnen. Dafür muss eine neue Frage vom Typ Zufallsgenerator angelegt werden (siehe Fragen erstellen).

Beispiel:
Zettel zeigt die Zahl „1“
Zahl „1“ ist die zugeordnete Zahl der „Gruppe 1“ und die Gruppe 1 soll einen bestimmten Stimulus erhalten

Durch das Anlegen dieses Fragentyps legen Sie die Unterteilung in verschiedene Gruppen fest. Jeder Teilnehmer wird einer dieser Gruppen zugeordnet, wobei im folgenden beschrieben wird, dass der Teilnehmer bildlich gesprochen einen „Zettel“ mit der Nummer der Gruppe zieht. In das Feld Zettel (Inhalte) schreiben Sie eine kurze Beschreibung Ihrer Experimentalgruppen, z.B.

Kontrollgruppe
Positive Fallbeispiele
Negative Fallbeispiele

Nach dem Speichern ergänzt SoSci Survey für jede Gruppe einen numerischen Code, z.B.

1 = Kontrollgruppe
2 = Positive Fallbeispiele
3 = Negative Fallbeispiele

Was welcher Gruppe später angezeigt wird, wird erst im nächsten Schritt – also beim Einbinden des entsprechenden PHP-Codes – festgelegt.

Schritt 2: Präsentation des Stimulus

Wie oben beschrieben, ist bisher nur festgelegt, zu welcher Gruppe der Teilnehmer gehört (definiert durch die Zufallszahl). Zur Einbindung eines Stimulus oder Treatments via PHP-Code in den Fragebogen gibt es verschiedene Möglichkeiten und auch für die verschiedenen Stimuli sieht der Code jeweils etwas anders aus:

Stimulus: Frage

Durch einen PHP-Code wird nun der Stimulus für die einzelne gezogene Zufallszahl definiert. Dazu benötigt man den PHP-Code für einen Filter. Dieser wird unter dem Zufallsgenerator auf der Seite platziert, auf welcher der Stimulus angezeigt werden soll. Wenn der Stimulus eine Frage ist, benötigt man die PHP-Funktion question() und value(). Erstere wird benötigt, um zu definieren, welche Frage (AB01 oder AB02) angezeigt werden soll. value() wird benötigt, um den Wert des Zufallsgenerators auszulesen (=1,2 oder3?). Der Code könnte folgendermaßen aussehen:

if (value('RG01') == 2) {
  question('AB01');
} elseif (value('RG01') == 3) {
  question('AB02');
} else {
  // Den else-Teil könnte man in diesem Fall weglassen,
  // hier passiert rein gar nichts.
}

Der Wert 1 für den Zufallsgenerator (RG01) würde in diesem Fall keine Frage anzeigen, da der Teilnehmer der Kontrollgruppe zugeordnet wurde. Wenn der Wert RG01=2 gezogen wurde, wird die Frage AB01 angezeigt und bei dem Wert RG01=3 die Frage AB02. Die Fragekennungen für den Zufallsgenerator und die zu zeigenden Fragen müssen Sie ihrem Fragebogen individuell anpassen.

Stimulus: Text

Wenn der Stimulus ein Text ist, muss bei der Einbindung via PHP-Code die Funktion text() verwendet werden. Diese Funktion bindet den HTML-Code als Textbaustein in eine Seite ein.

Dafür legt man als erstes im Fragenkatalog als Text die Stimulus-Texte an.

Der folgende PHP-Code würde in der Gruppe „Positive Fallbeispiele“ (Zufallsgeneratorwert RG01=2) den Text mit der Kennung „ST01“ anzeigen, in der Gruppe „Negative Fallbeispiele“ (Zufallsgeneratorwert RG01=3) den Text mit der Kennung „ST02“ und in der Kontrollgruppe (Zufallsgeneratorwert RG01=1) wieder gar nichts.

if (value('RG01') == 2) {
  text('ST01');
} elseif (value('RG01') == 3) {
  text('ST02');
}

Stimulus: Bild

Bilder können ebenso, wie Texte mittels PHP-Code angezeigt werden. Dazu benötigt man den selben Code, wie bei den Texten und bindet das Bild via HTML-Text ein. Dazu muss man, wie oben beschrieben das Bild bereits in Bilder und Mediendateien gespeichert haben (siehe auch Bilder im Fragebogen und Mediendateien im Fragebogen).

Tipp: Diese Möglichkeit bietet durch den HTML-Text viel Raum zur Gestaltung und Bearbeitung für komplexere Darstellungen (siehe unten: Beispiel umfangreiche HTML-Codes). Für die einfache Einbindung bietet sich die Möglichkeit, die unter Randomisierung einfaktoriell beschrieben wird, eher an.

if (value('RG01') == 2) {
  text('ST01');
} elseif (value('RG01') == 3) {
  text('ST02');
}

Beispiel: Randomisieren von 4 Bildern

Vor allem in Experimenten muss man die Teilnehmer häufig zufällig auf Versuchs- und Kontrollgruppen verteilen oder anders ausgedrückt: Man muss zufällig auswählen, welcher von mehreren Stimuli angezeigt wird.

Das folgende Beispiel zeigt, wie man mittels PHP-Code eines von 4 Bildern randomiesiert. Voraussetzung ist, dass – wie oben beschrieben – eine Zufallszahl zwischen 1 und 4 gezogen und in Variable RG01 gespeichert wird. Außerdem müssen die 4 Bilder vorab unter Bilder und Mediendateien in das Befragungsprojekt hochgeladen werden. Das Beispiel zeigt zufällig die Grafik „stimulus1.png“, „stimulus2.png“, „stimulus3.png“ oder „stimulus4.png“. Darunter könnte beispielsweise eine Frage zur Bewertung des Bildes angezeigt werden.

$zahl = value('RG01');  // Auslesen der gezogenen Zufallszahl
 
// Grafik in Abhängigkeit von der Zahl anzeigen
// (dafür wird HTML-Code verwendet)
if ($zahl == 1) {
  html('<p><img src="stimulus1.png"></p>');
} elseif ($zahl == 2) {
  html('<p><img src="stimulus2.png"></p>');
} elseif ($zahl == 3) {
  html('<p><img src="stimulus3.png"></p>');
} elseif ($zahl == 4) {
  html('<p><img src="stimulus4.png"></p>');
}

Anstatt mit html() einen Text oder eine Grafik anzuzeigen, kann man natürlich auch mit text() einen längeren Text zeigen, ein Video einbinden oder mit question() eine Frage anzeigen.

Beispiel: Randomisierung von 4 Bildern mittels Platzhalter

Der folgende PHP-Code zeigt genau dieselben Bilder wie der obige PHP-Code im Beispiel, arbeitet aber nicht mit kompletten HTML-Code-Stückchen, sondern mit einem Platzhalter %dateiname% und der Funktion replace().

$code = value('RG01');  // Auslesen der gezogenen Zufallszahl
 
// Grafikdatei in Abhängigkeit von der Zufallszahl in einen Platzhalter schreiben
if ($code == 1) {
  replace('%dateiname%', 'stimulus1.png');
} elseif ($code == 2) {
  replace('%dateiname%', 'stimulus2.png');
} elseif ($code == 3) {
  replace('%dateiname%', 'stimulus3.png');
} elseif ($code == 4) {
  replace('%dateiname%', 'stimulus4.png');
}
// Den HTML-Code kann man direkt einbinden oder (hier nicht gezeigt) als Textbaustein
html('<p><img src="%dateiname%"></p>');

Tipp: Platzhalter sind vor allem dann hilfreich, wenn für die Einbindung des Stimulus mehr HTML-Code erforderlich ist, als hier exemplarisch gezeigt.

Tipp: Die Bezeichnung der PHP-Variable (in den Beispielen $zahl und $code) ist willkürlich gewählt. Mehr dazu s. PHP-Variablen.

Beispiel: Umfangreiche HTML-Codes

Falls Stimuli umfangreichen HTML-Code erfordern (z.B. Videos), wenn sich der HTML-Code zwischen den einzelnen Experimentalgruppen stark unterscheidet oder wenn man mit einem mehrsprachigen Fragebogen arbeitet, werden vier Texte im Fragenkatalog angelegt (z.B. „RG02“ bis „RG05“, Darstellung jeweils HTML-Code) und abhängig von der Zufallsziehung eingebunden:

$code = value('RG01');  // Auslesen der gezogenen Zufallszahl
 
// Text bzw. HTML-Code als Text anzeigen
if ($code == 1) {
  text('RG02');
} elseif ($code == 2) {
  text('RG03');
} elseif ($code == 3) {
  text('RG04');
} elseif ($code == 4) {
  text('RG05');
}

Stimulus: Video

Auch Videos können mittels einer text()-Funktion eingebettet werden. Dazu benötigt man den selben Code, wie bei den Texten und bindet das Video via HTML-Text ein. Dazu muss man, wie oben beschrieben das Video bereits in Bilder und Mediendateien gespeichert haben und in einem (Text) angelegt haben.

if (value('RG01') == 2) {
  text('ST01');
} elseif (value('RG01') == 3) {
  text('ST02');
}

Stimulus: Audio

Auch Audios können wiederum mittels einer text()-Funktion eingebettet werden. Dazu benötigt man den selben Code, wie bei den Texten und bindet das Audio via PHP-Code auf der entsprechenden Fragebogenseite ein. In dem HTML-Text ist bereits angeben, wie das Audio angezeigt und abgespielt werden soll. Lesen Sie für eine genauere Erklärung unbedingt die Kapitel Audio-Dateien einbinden und Texte im Fragebogen und speichern Sie wiederum die Audiodateien bereits unter Bilder und Mediendateien.

Der PHP-Code zur Einbindung der Audiodateien auf der Fragenbogenseite könnte wie folgt aussehen und muss unter dem Zufallsgenerator unter Fragebogen zusammenstellen eingefügt werden.

if (value('RG01') == 2) {
  text('ST01');
} elseif (value('RG01') == 3) {
  text('ST02');
}

Stimulus und Frage zusammen

Man kann auch Fragen und Stimuli gemeinsam randomisieren. Dies ist der Fall, wenn man abhängig vom Stimulus auch unterschiedliche Fragen abfragen möchte.

$zahl = value('RG01');
 
if ($zahl == 1) {
  text('stimulusA');
  question('AB01');
} elseif ($zahl == 2) {
  text('stimulusB');
  question('AB01');
} elseif ($zahl == 3) {
  text('stimulusC');
  question('AB02');
} elseif ($zahl == 4) {
  text('stimulusD');
  question('AB02');
}

In dem Beispiel wird zum Stimulus A eine andere Frage (AB01) angezeigt, als zu den anderen Stimuli.

Hinweis: Wenn die Frage zu den Stimuli immer gleich ist, muss man diese nicht extra im Code angeben. In diesem Fall genügt es, wenn man die Frage einfach unter dem Stimulus oder auf der nächsten Seite unabhängig vom Filter platziert.

Stimulus und Frage auf unterschiedlichen Seiten

Falls der Stimulus und die (jeweils zugehörige) Frage auf unterschiedlichen Seiten gezeigt werden sollen, wird auf beiden Seiten ein Filter eingebaut. Wenn die Zufallszahl einmal gezogen wurde, steht sie (im Beispiel als Variable RG01) auf allen folgenden Seiten zur Verfügung. Man braucht den Zufallsgenerator (oder die Urnen-Ziehung) also nur ein einziges Mal im Fragebogen zu platzieren, i.d.R. direkt vor dem ersten Filter.

// PHP-Code auf der Seite mit dem Stimulus
$zahl = value('RG01');
 
if ($zahl == 1) {
  text('stimulusA');
} elseif ($zahl == 2) {
  text('stimulusB');
} elseif ($zahl == 3) {
  text('stimulusC');
} elseif ($zahl == 4) {
  text('stimulusD');
}
// PHP-Code auf der Seite mit der Frage
$zahl = value('RG01');
 
if ($zahl == 1) {
  question('AB01');
} elseif ($zahl == 2) {
  question('AB01');
} elseif ($zahl == 3) {
  question('AB02');
} elseif ($zahl == 4) {
  question('AB02');
}

Hinweis: Diese Lösung ist natürlich nicht erforderlich, wenn unabhängig vom Stimulus immer dieselbe Frage angezeigt wird.

Tipp: Mit dieser Variable können zusammengehörige Stimuli (z.B. Seite 1 bis 3 eines Zeitungsartikels) auf auf mehrere Seiten verteilt werden.

Randomisierung von Fragen

V.a. in Methodenexperimenten werden ganze Fragen randomisiert – auch das ist mit Filtern recht einfach umzusetzen. Das Vorgehen ist im Prinzip dasselbe wie bei der Randomisierung eines Stimulus:

$zahl = value('RG01');
 
if ($zahl == 1) {
  question('AB01');
} elseif ($zahl == 2) {
  question('AB02');
}

Fragen auf verschiedenen Seiten

Wenn die Fragen auf unterschiedlichen Seiten im Fragebogen erscheinen sollen muss man an zwei Stellen filtern:

//Auf der 1. Seite platzieren
$zahl = value('RG01');  // Auslesen der gezogenen Zufallszahl aus RG01
 
// Die eine oder die andere Frage zeigen
if ($zahl == 1) {
  question('AB01');
} else {
  question('AB03');
}
//Auf der 2. Seite platzieren
$zahl = value('RG01');
if ($zahl == 1) {
  question('AB02');
} else {
  question('AB004');
}

Im Beispiel wird nun zufällig entweder zuerst Frage AB01 und dann später AB02 angezeigt – oder erst AB03 und dann AB04.

Randomisierung von Seiten

Wenn die Reihenfolge von Fragen komplexer variiert werden soll, können Filter – wie im obigen Beispiel – schnell unübersichtlich werden. In diesem Fall kann die PHP-Funktion setPageOrder() helfen. Mit dieser Funktion kann die Abfolge der Seiten im Fragebogen variiert werden.

$zahl = value('RG01');  // Zufallzahl wurde von RG01 gezogen
if ($zahl == 1) {
  setPageOrder('q1','q2','mainStart-mainEnd','q3');
} elseif ($zahl == 2) {
  setPageOrder('q1','mainStart-mainEnd','q2','q3');
} else {
  setPageOrder('q2','q1','mainStart-mainEnd','q3');
}

Weitere Erklärungen und Beispiele finden Sie in der Referenz zur Funktion setPageOrder().

Zufällige Auswahl von Fragen

Sie möchten zufällig 3 von 10 Fragen anzeigen, um Ihren Stimulus auf mehrere Teilnehmer zu verteilen? Hier sind für Zufallsziehungen mit und ohne Zurücklegen zwei unterschiedliche Lösungen möglich.

Auswahl mit Zurücklegen

Wenn es egal ist, in welchen Kombinationen die Fragen angezeigt werden und wenn die Fallzahlen pro Frage hinreichend groß sind, um statistische Schwankungen zu verkraften, dann erstellen Sie eine Liste (Array) mit allen Frage-Kennungen, mischen die Liste und zeigen dann die Fragen zu den ersten drei Kennungen an.

// Sicherstellen, dass beim Neu-Laden der Seite nicht neu gezogen wird
if (!isset($fragen)) {
  // Liste der relevanten Fragen
  $fragen = array(
    'AB01', 'AB02', 'AB03', 'AB04', 'AB05',
    'BB01', 'BB02', 'BB03', 'CC01', 'CC02'
  );
  // Die Liste mischen
  shuffle($fragen);
  // Und die Variable für eine erneute Anzeige der Seite speichern
  registerVariable($fragen);
}
// Die Frage anzeigen, die nach dem Mischen an erste Stelle steht
question($fragen[0]);
// Und die Fragen an zweiter und dritter Stelle
question($fragen[1]);
question($fragen[2]);

Tipp: Wenn die Fragen auf unterschiedlichen Seiten angezeigt werden sollen, dann platzieren Sie die Zeilen mit question() einfach auf unterschiedlichen Seiten im Fragebogen.

Vorsicht: Wenn Sie im Fragebogen mehrere solcher Auswahlen verwenden, dann kann die Zeile mit isset() Ärger bereiten. Verwenden Sie in diesem Fall unterschiedliche Variablen für $fragen, also z.B. $fragen1 und $fragen2 (anzupassen natürlich auch in registerVariable()).

Auswahl ohne Zurücklegen

Wenn sichergestellt werden muss, dass alle Fragen gleich häufig angezeigt werden, wird eine Urne benötigt, die mögliche 3er-Kombinationen der Frage-Kennungen enthält. Diese 3er-Kombinationen muss vorab erstellt werden, z.B. in Excel.

AB01, AB02, AB03
AB01, AB02, AB04
AB01, AB02, AB05
...
AB05, AB03, AB04
AB05, AB04, AB03

Schon bei 5 Fragen sind 60 Kombinationen möglich. Wenn Sie deutlich mehr Kombinationen als Teilnehmer haben, müssen Sie einen Teil der Kombinationen evtl. systematisch entfernen – sonst ist nicht sichergestellt, dass die Fragen gleich häufig angezeigt werden.

Im Fragebogen ziehen Sie nun eine der Kombinationen aus der Urne und verwenden die so gezogenen Kennungen in der question()-Funktion. Beachten Sie, dass Sie in diesem Fall 3 Variablen in der Frage IV01 vom Typ „interene Variablen“ benötigen.

urnDraw('fragen', 'IV01');
question(value('IV01_01'));
question(value('IV01_02'));
question(value('IV01_03'));

Auch hier können Sie die question()-Funktionen einfach auf unterschiedliche Seiten im Fragebogen verteilen.

Viele Stimuli

Womöglich soll eine größere Anzahl von Objekten bewerten werden. Anstatt einer if-Konstruktion ist die switch-Konstruktion dann etwas handlicher. Hierfür kann einen der folgenden Codes verwenden:

$zahl = value('RG01');  // Zufallszahl wurde vorab in RG01 gezogen
if ($zahl == 1) {
  $src = 'affe.jpg';
} elseif ($zahl == 2) {
  $src = 'brontosaurus.jpg';
} elseif ($zahl == 3) {
  $src = 'chintilla.jpg';
} elseif ($zahl == 4) {
  $src = 'dackel.jpg';
} elseif ($zahl == 5) {
  $src = 'elefant.jpg';
} elseif ($zahl == 6) {
  $src = 'frettchen.jpg';
} elseif ($zahl == 7) {
  $src = 'gepard.jpg';
} elseif ($zahl == 8) {
  $src = 'habicht.jpg';
} elseif ($zahl == 9) {
  $src = 'igel.jpg';
} elseif ($zahl == 10) {
  $src = 'jaguar.jpg';
}
html('
  <div style="margin: 30px 0px; text-align: center">
  <img src="'.$src.'" alt="Tierfoto">
  </div>
');
switch (value('RG01')) {
  case 1 : $src = 'affe.jpg'; break;
  case 2 : $src = 'brontosaurus.jpg'; break;
  case 3 : $src = 'chintilla.jpg'; break;
  case 4 : $src = 'dackel.jpg'; break;
  case 5 : $src = 'elefant.jpg'; break;
  case 6 : $src = 'frettchen.jpg'; break;
  case 7 : $src = 'gepard.jpg'; break;
  case 8 : $src = 'habicht.jpg'; break;
  case 9 : $src = 'igel.jpg'; break;
  case 10 : $src = 'jaguar.jpg'; break;
}
html('
  <div style="margin: 30px 0px; text-align: center">
  <img src="'.$src.'" alt="Tierfoto">
  </div>
');
de/create/randomization_php.1609348976.txt.gz · Zuletzt geändert: 30.12.2020 18:22 von sophia.schauer
 
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