Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


Randomisierung

Möchte man einen Teilnehmer zufällig einer Experimentalgruppe zuweisen (Zufallsauswahl), so handelt es sich um eine Randomisierung.

Von der Randomisierung zu unterscheiden ist die Rotation – dabei wird die Reihenfolge von Items oder Fragen variiert, um Reihenstellungseffekten zu begegnen.

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

Grundsätzliche Verwendung

Die experimentelle Logik (between-subject) geht davon aus, dass die Teilnehmer eines Experiments in unterschiedliche Experimentalgruppen eingeteilt werden. Abhängig von der zugewiesenen Gruppe wird dann eine Frage, ein Text, Bild oder Video variiert (das Treatment bzw. der Stimulus).

Auch wenn Ihr Ziel „nur“ darin besteht, dass zum Beispiel die eine Hälfte der Teilnehmer Frage A beantworten soll und die andere Hälfte der Teilnehmer Frage B: Denken Sie bitte daran, dass konzeptionell eine Einteilung in Experimentalgruppen erfolgt.

Schritt 1: Einteilung in Experimentalgruppen

Legen Sie eine Frage vom Typ Zufallsgenerator an. 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

Bei der Art der Ziehung können Sie in Betracht ziehen, ob Sie statt „Gleichverteilte Ziehung“ vielleicht die „Gleichverteilung in abgeschlossenen Fragebögen“ auswählen möchten. Dies kann sinnvoll sein, wenn Sie in einer Experimentalgruppe mit systematisch mehr Abbrechern rechnen.

Für Anzahl Zettel pro Interview lassen Sie den Wert 1 stehen. So wird der Teilnehmer nur einer der Experimentalbedingungen/-gruppen zugeteilt. Die Ziehung mehrerer Zettel ist für bestimmte within-subject Designs sinnvoll.

Schritt 2: Präsentation des Stimulus

Beim Fragebogen zusammenstellen ziehen Sie die Zufallsgenerator-Frage, die Sie oben angelegt haben, auf jene Seite im Fragebogen, wo die Zuweisung des Teilnehmers zu einer Experimentalgruppe erfolgen soll. In aller Regel ist das die Seite, wo der Stimulus präsentiert wird.

Der Zufallsgenerator zieht nun zufällig einen der definierten Zettel und speichert dessen Code in einer Variable mit der Kennung des Zufallsgenerators. Wenn die Zufallsgenerator-Frage also z.B. die Kennung „RG01“ hat, würde die gezogene Zahl im Datensatz als Variable „RG01“ gespeichert werden. Im obigen Beispiel würde also der Code 1, 2 oder 3 gespeichert.

An der Stelle, wo der Stimulus erscheinen soll (auf jeden Fall unter der Zufallsgenerator-Frage oder auf einer späteren Seite) platzieren Sie nun ein Element „PHP-Code“ (Einführung in PHP-Code). Hier benötigen Sie nun den PHP-Code für einen Filter, der je nach zugeteilter Experimentalgruppe (=gezogene Zufallszahl) den passenden Stimulus anzeigt.

Fragen

Ist der Stimulus eine Frage (d.h. in Gruppe A soll eine andere Frage aus dem Fragenkatalog angezeigt werden als in Gruppe B), so kommt die Funktion question() zum Einsatz.

Der folgende PHP-Code würde in der Gruppe „Positive Fallbeispiele“ die Frage „AB01“ anzeigen, in der Gruppe „Negative Fallbeispiele“ die Frage „AB02“ und in der Kontrollgruppe gar nichts.

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.
}

Die Funktion value() ist dafür zuständig, die gezogene Zufallszahl aus der Variable „RG01“ (diese Kennung muss ggf. durch die Kennung des Zufallsgenerators ersetzt werden!) auszulesen und im PHP-Code für den Filter zur Verfügung zu stellen.

Texte, Bilder und Medieninhalte

Für Texte, Bilder und Videos verwendet man die Funktion text(). Diese Funktion bindet den HTML-Code zur Anzeige des entsprechenden Stimulus aus einem Textbaustein ein.

Legen Sie im Fragenkatalog als Text entweder den Stimulus-Text an oder (dann mit DarstellungHTML-Code“) den HTML-Code, welcher ein Bild, ein Video oder einen anderen Stimulus anzeigt. Mehr dazu unten und unter Bilder im Fragebogen und Mediendateien im Fragebogen (Audio, Video, Dokumente).

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

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

Die weiteren Abschnitte in dieser Anleitung erklären unterschiedliche Einsatzbereiche der Randomisierung.

Ziehung einer Zufallszahl

Das Kernstück jeder Randomisierung ist das Zufallsereignis – die Ziehung einer Zufallszahl. Generell gibt es bei der zufälligen Auswahl (eines Stimulus, einer Frage, einer Abfolge, etc.) zwei Möglichkeiten: Die Ziehung „mit“ oder „ohne“ Zurücklegen.

Nachdem eine Zufallszahl erst einmal gezogen wurde, ist die weitere Anwendung unabhängig vom „mit“ oder „ohne“. Die Zufallszahl wird mittels value() aus dem Datensatz ausgelesen und z.B. in einem Filter verwendet.

  • Die beste Lösung zur Ziehung einer Zufallszahl ist i.d.R. eine Funktionsfrage vom Typ Zufallsgenerator. Im Kapitel zum Fragetyp finden Sie weitere Beispiele zur Randomisierung.
  • Eine Alternative zum Zufallsgenerator ist die Randomisierung mit Urnen. Diese können Kombinationen mehrerer Werte ziehen und eignen sich deshalb besonders für mehrfaktorielle Experimente und Conjoint Analysen.
  • In ganz seltenen Fällen sind die verschiedenen Varianten des Fragebogens so unterschiedlich, dass Filter zu aufwändig werden. Für diese Fälle kann man die Teilnehmer zufällig zu unterschiedlichen Fragebögen zulosen (Zufallsauswahl für Fragebögen). Bei der zufälligen Auswahl eines Fragebogens kommt stets eine Ziehung mit Zurücklegen zum Einsatz – die resultierenden Gruppengrößen können also deutlich variieren.

Tipp: Der Abruf der Zufallszahl mittels value() ist auf derselben Seite (unterhalb der Ziehung bzw. dem Zufallsgenerator) und/oder auf jeder späteren Seite im Fragebogen möglich. So kann ein Stimulus auf mehrere Seiten verteilt werden, oder es können die Stimuli unterschiedlicher Experimentalfaktoren auf unterschiedlichen Seiten dargeboten werden.

Stimulus randomisieren

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

Das folgende Beispiel zeigt, wie Sie mittels PHP-Code eines von 4 Bildern anzeigen. Voraussetzung ist, dass Sie – wie oben beschrieben – eine Zufallszahl zwischen 1 und 4 gezogen und in Variable RG01 gespeichert haben. Außerdem müssen Sie die 4 Bilder vorab unter Bilder und Mediendateien in das Befragungsprojekt hochladen.

$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>');
}

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.

Anstatt mit html() 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.

Der folgende PHP-Code zeigt genau dieselben Bilder wie der obige PHP-Code, 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.

Falls Ihre Stimuli umfangreichen HTML-Code erfordern (z.B. Videos), wenn sich der HTML-Code zwischen den einzelnen Experimentalgruppen stark unterscheidet oder wenn Sie mit einem mehrsprachigen Fragebogen arbeiten, legen Sie vier Texte im Fragenkatalog an (z.B. „RG02“ bis „RG05“, Darstellung jeweils HTML-Code) und binden sie diese abhängig von der Zufallsziehung ein:

$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');
}

Bilder, Texte, Filme, HTML

Mehrere Code-Beispiele in diesem Kapitel beschreiben, wie man Bilder rotiert oder randomisiert anzeigt. Dabei wird jeweils ein HTML-Tag <img> eingebunden, z.B.

$zahl = value('RG01');
 
// Den kompletten HTML-Code jedes Mal angeben
if ($zahl == 1) {
  html('<img src="bildA.jpg" alt="Wahlplakat Kandidat A">');
} elseif ($zahl == 2) {
  html('<img src="bildB.jpg" alt="Wahlplakat Kandidat B">');
}
$zahl = value('RG01');
 
// Im Filter nur den Bildnamen ermitteln ...
if ($zahl == 1) {
  $bild = 'bildA.jpg';
} elseif ($zahl == 2) {
  $bild = 'bildB.jpg';
}
// ... und erst danach den HTML-Code erzeugen
html('<img src="'.$bild.'" alt="Wahlplakat">');

Andere Inhalte – z.B. Filme, Stimulustexte, etc. – können Sie ganz genauso als HTML-Code einbinden. Siehe auch Mediendateien im Fragebogen.

Am Besten legt man die HTML-Codes zum Einbinden von Filmen, Audiodateien bzw. die Stimulustexte unter Textbausteine und Beschriftung als Textbausteine an (Texte im Fragebogen). Diese Textbausteine kann man dann mit der Funktion text() einbinden. Das Äquivalent zum obigen Code-Ausschnitt würde dann wie folgt aussehen:

$zahl = value('RG01');
 
if ($zahl == 1) {
  text('stimulusA');
} elseif ($zahl == 2) {
  text('stimulusB');
}

Hinweis: Bei den obigen Beispielen handelt es sich nur um die Ausschnitte aus dem PHP-Code, die für die Anzeige des Stimulus erforderlich sind. Zuvor muss noch eine Zufallszahl gezogen und ausgelesen werden (s. oben).

Tipp: In einem Textbaustein können Sie selbstverständlich auch mehrere Elemente kombinieren – also z.B. ein Bild und daneben einen Text:

<table cellspacing="0" cellpadding="0" border="0">
<colgroup>
  <col width="400"> <!-- Breite des Bilds in Pixeln -->
  <col>
<colgroup>
<tr>
  <td><img src="bildA.jpg" alt="Wahlplakat"></td>
  <td style="padding-left: 20px">
    <p>Max Müller tritt für die Rechte der Bürger ein. Mit einem nachhaltigen Konzept und fundierten Ideen möchte er mehr Bürgerbeteiligung und effizientere Entscheidungsprozesse erreichen.
  </td>
</tr>
</table>

Stimulus und Frage zusammen

Sie benötigen für einen Teil der Stimuli eine Frage und eine andere für die restlichen Stimuli?

$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');
}

Stimulus und Frage auf unterschiedlichen Seiten

Falls Stimulus und (jeweils zugehörige) Frage auf unterschiedlichen Seite gezeigt werden sollen, bauen Sie auf beiden Seiten einen Filter ein. Wenn Sie die Zufallszahl einmal gezogen haben, steht sie (im Beispiel als Variable RG01) auf allen folgenden Seiten zur Verfügung. Sie brauchen 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 Zeitungsartikel) auf auf mehrere Seiten verteilt werden.

Randomisierung von Fragen

V.a. in Methodenexperimenten werden ganze Fragen randomisiert – auch das ist mit Filtern recht einfach zu erledigen. 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');
}

Etwas schwieriger wird es, wenn die Fragen auf unterschiedlichen Seiten im Fragebogen erscheinen sollen. In diesem Fall muss man an zwei Stellen filtern:

$zahl = value('RG01');  // Auslesen der gezogenen Zufallszahl aus RG01
 
// Die eine oder die andere Frage zeigen
if ($zahl == 1) {
  question('AB01');  // Bewertung des Politikers
} else {
  question('AB02');  // Bewertung der Partei
}
$zahl = value('RG01');
if ($zahl == 1) {
  question('AB02');  // Bewertung der Partei
} else {
  question('AB01');  // Bewertung des Politikers
}

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

Randomisierung von Seiten

Wenn die Reihenfolge 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 Zufallsziehung 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 Sie die Liste und zeigen Sie 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 Sie sicherstellen müssen, dass alle Fragen gleich häufig angezeigt werden, benötigen Sie eine Urne, die mögliche 3er-Kombinationen der Frage-Kennungen enthält. Diese 3er-Kombinationen müssen Sie vorab erstellen, 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 möchten Sie eine größere Anzahl von Objekten bewerten lassen. Anstatt einer if-Konstruktion ist die switch-Konstruktion dann etwas handlicher. Die beiden folgenden Codes haben genau denselben Effekt:

$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>
');

Kombinationen

Sie können mit einer Urne nicht nur eine Zufallszahl ziehen, sondern gleich eine ganze Kombination. Damit lassen sich mehrfaktorielle Experimente oder Conjoint-Abfragen einfach realisieren.

Dieses Beispiel verwendet 3 interne Variablen (IV01_01 bis IV01_03, bezeichnet als „Preis“, „Qualität“ und „Lieferzeit“) und eine Urne „kombi“ mit folgendem Inhalt:

1, 1, 1
1, 1, 2
1, 2, 1
1, 2, 2
2, 1, 1
2, 1, 2
2, 2, 1
2, 2, 2

Im Beispiel wird also stets eine 3er-Kombination gezogen. Jede der drei Variablen hat entweder die Ausprägung 1 oder 2. Mittels Arrays werden den Zahlen Text zugeordnet. Dabei dient der gezogene Wert (also 1 oder 2) als Schlüssel – er wird in eckigen Klammern angegeben, um das jeweilige Element des Arrays auszuwählen. Siehe auch Arrays.

urnDraw('kombi', 'IV01');
// Die Zahlen kodieren drei Eigenschaften - hier werden ihnen Text zugeordnet
$preis = array(
  1 => '5 Euro',
  2 => '10 Euro',
);
$qualitaet = array(
  1 => 'normal',
  2 => 'hochwertig'
);
$lieferzeit = array(
  1 => 'schnell',
  2 => 'langsam'
);
html('
  <h1>Bitte stellen Sie sich folgenden Obstkorb vor:</h1> 
  <p>Preis: '.$preis[value('IV01_01')].'</p>
  <p>Qualität: '.$qualitaet[value('IV01_02')].'</p>
  <p>Lieferzeit: '.$lieferzeit[value('IV01_03')].'</p>
');

Mehrfach aus Urnen ziehen

Wichtig: Wenn Sie innerhalb eines Interview mehrere Zettel ziehen möchten, der gleiche Zettel aber nicht mehrfach gezogen werden darf, dann verwenden Sie statt der Urne einen Zufallsgenerator. Lesen Sie dazu auch die Hinweise am Ende dieses Abschnitts.

Wenn Sie aus unterschiedlichen Urnen ziehen möchten, benötigen Sie auch mehrere Fragen vom Typ „interne Variablen“ – im Beispiel drei solche Fragen „IV01“, „IV02“ und „IV03“.

urnDraw('personen', 'IV01', 'end');  // Ersten Zettel ziehen aus "Personen"
urnDraw('personen', 'IV02', 'end');  // Zweiten Zettel ziehen aus "Personen"
urnDraw('beziehung','IV03', 'end');  // Dritten Zettel ziehen aus "Beziehung"
// Die Zettel werden erst abgelegt, wenn der Teilnehmer das Ende des
// Fragebogens erreicht - so werden Abbrecher bei der Ziehung nicht gezählt
 
// Auf den Personen-Zettel stünde nun z.B.: Alter, Vorname, Geschlecht
// Dies wird zusammengefügt als "Alter (Vorname, Geschlecht)"
$beschreibung1 = value('IV01_01').' ('.value('IV01_02').', '.value('IV01_03').')';
$beschreibung2 = value('IV02_01').' ('.value('IV02_02').', '.value('IV02_03').')';
// Jetzt in der Beschreibung also
// z.B. "Andreas (25, m)" und "Berta (22, w)"
// Steht nun noch auf dem dritten Zettel, in welcher Beziehung
// die beiden Personen stehen, lässt sich so eine Situations-
// Beschreibung erstellen:
$komplett = $beschreibung1.' '.value('IV03_01').' '.$beschreibung2;
// z.B. "Andreas (25, m) wohnt bei Berta (22, w)";
// Natürlich könnte der Text auch per Platzhalter in die Frage
// integriert werden
html($komplett);

Hier ein noch komplexeres Beispiel, das zeigt, wie man Zufallszahlen in Textelemente transformieren kann. Für das folgende Beispiel wird ein 6×4-Design angenommen – entsprechend enthält die Urne „Award“ 24 Zettel:

11, 21
11, 22
11, 23
11, 24
12, 21
12, 22
...
16, 23
16, 24
// Eine Kombination aus Urne "Award" ziehen und auf "A101" speichern,
// Zettel noch nicht ablegen
urnDraw('Award','A101','man');
// Werte sind nun gespeichert unter A101_01 und A101_02
// Der erste Wert kann 11-16 sein, der zweite 21-24
// Texte in Variable $text1 und $text2 speichern
switch (value('A101_01')) {
  case 11: $text1 = '500 Euro'; break;
  case 12: $text1 = '1000 Euro'; break;
  case 13: $text1 = '1500 Euro'; break;
  case 14: $text1 = '2000 Euro'; break;
  case 15: $text1 = '2500 Euro'; break;
  case 16: $text1 = '3000 Euro'; break;
  default: $text1 = 'Ungültiger Code: '.value('A101_01');
}
switch (value('A101_02')) {
  case 21: $text2 = 'Ein Freund'; break;
  case 22: $text2 = 'Ein Verwandter'; break;
  case 23: $text2 = 'Ein Kollege'; break;
  case 24: $text2 = 'Ihr Chef'; break;
  default: $text1 = 'Ungültiger Code: '.value('A101_02');
}
$situation = $text2.' will sich bei Ihnen '.$text1.' leihen';
// In Platzhalter %situation% speichern
replace('%situation%', $situation);
// Frage zur Situation (mit Platzhalter %situation%)
question('AL07');

Auf einer späteren Seite – wenn alle relevanten Daten erfragt wurden – wird der Zettel dann abgelegt:

urnPutAway('A101');
// Oder in diesem Fall auch einfach nur
urnPutAway();

Wichtig: Wenn Sie aus mehreren Urnen ziehen, so ist zwar die Gleichverteilung der einzelnen Ziehungen sichergestellt – nicht aber die Gleichverteilung der Kombinationen. Einige Kombinationen können deutlich häufiger auftreten als andere. Verwenden Sie eine Urne mit mehreren Werten pro Zettel, um auch die Kombinationen gleichmäßig zu verteilen.

Wichtig: Wenn Sie zweimal aus derselben Urne ziehen, dann können Sie dabei zweimal denselben Zettel bekommen. Um das zu vermeiden, arbeiten Sie mit nur einer Urne, die alle nötigen Kombinationen enthält.

Urnen für Teilgruppen I

Es kann vorkommen, dass Sie die Gleichverteilung von Experimentalgruppen in zwei Teilgruppen gewährleisten müssen – also z.B. wenn Sie 3 Stimuli haben und sowohl die Frauen als auch die Männer in der Studie gleichmäßig auf alle drei Konditionen verteilt werden sollen.

Hierfür benötigen Sie eine interne Variable und zwei (inhaltlich gleiche) Urnen. Das folgende Beispiel geht davon aus, dass das Geschlecht auf einer früheren Seite mit der Auswahlfrage SD02 abgefragt wurde. Und dass Sie zwei Urnen mit den Kennungen „frauen“ und „maenner“ angelegt haben, welche beide die Zahlen 1 bis 3 (jeweils in eigenen Zeilen) enthalten.

if (value('SD02') == 1) {
  urnDraw('frauen', 'IV01', 'end');
} else {
  urnDraw('maenner', 'IV01', 'end');
}
 
// Stimulus anzeigen
$z = value('IV01_01');
if ($z == 1) {
  text('stimulus1');
} elseif ($z == 2) {
  text('stimulus2');
} elseif ($z == 3) {
  text('stimulus3');
}

Sie möchten lieber einen Zufallsgenerator anstatt einer Urne verwenden? Immerhin ist dieser einfacher anzulegen und zu verwalten… Dann sollten Sie, damit es bei der Anzeige des Stimulus nicht zu kompliziert wird, den gezogenen Code allerdings mittels put() in eine interne Variable umkopieren.

Der folgende PHP-Code geht davon aus, dass Sie 2 Teilgruppen haben (Frauen und Männer, entsprechend Variable „SD02“), für jede Gruppe einen Zufallsgenerator („RG01“ und „RG02“) und außerdem eine interne Variable mit der Kennung „IV01_01“ angelegt haben.

if (value('SD02') == 1) {
  question('RG01');  // Zufallsgenerator für Frauen
  put('IV01_01', value('RG01'));  // Umkopieren nach IV01_01
} else {
  question('RG02');  // Zufallsgenerator für Männer
  put('IV01_01', value('RG02'));  // Umkopieren nach IV01_01
}
 
// Stimulus anzeigen
$z = value('IV01_01');
if ($z == 1) {
  text('stimulus1');
} elseif ($z == 2) {
  text('stimulus2');
} elseif ($z == 3) {
  text('stimulus3');
}

Urnen für Teilgruppen II

Womöglich sollen die unterschiedlichen Teilpopluationen (z.B. Männer und Frauen) auch unterschiedliche Stimuli erhalten. Eine einfache Lösung besteht darin, dass Sie unterschiedliche Nummern in die Urnen legen.

Für das folgende Beispiel benötigen Sie eine Frage „interne Variablen“ IV01 mit einem Item und zwei Urnen mit den Kennungen „frauen“ (Nummern 1 bis 3, jeweils in einer eigenen Zeile) und „maenner“ (Nummern 4 bis 6). Außerdem muss das Geschlecht bereits vorab mit Auswahlfrage SD02 abgefragt worden sein.

Ansonsten ist der PHP-Code weitgehend identisch mit dem vorhergehenden Beispiel.

if (value('SD02') == 1) {
  urnDraw('frauen', 'IV01', 'end');
} else {
  urnDraw('maenner', 'IV01', 'end');
}
 
// Stimulus anzeigen
$z = value('IV01_01');
if ($z == 1) {
  text('stimulusF1');
} elseif ($z == 2) {
  text('stimulusF2');
} elseif ($z == 3) {
  text('stimulusF3');
} elseif ($z == 4) {
  text('stimulusM1');
} elseif ($z == 5) {
  text('stimulusM2');
} elseif ($z == 6) {
  text('stimulusM3');
}
de/create/randomization.1578474888.txt.gz · Zuletzt geändert: 08.01.2020 10:14 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