Urnen erlauben eine Zufallsziehung ohne Zurücklegen. Das ist z.B. sinnvoll, wenn für eine Conjoint-Analyse zuverlässig alle Kombinationen gleich häufig abgefragt werden sollen. Außerdem lassen sich so einfach Zufallsziehung von mehr als einer Variablen (Kombinationen) realisieren.
Hinweis: Komplette Fragebögen lassen sich mit Urnen nicht randomisieren. Man kann also mit einer Urne nicht zwischen unterschiedlichen Fragebögen „wählen“. Damit man eine Urne verwenden kann, müssen alle Zufallsbedingungen in einem Fragebogen untergebracht werden.
Wichtig: Speichern Sie den gezogenen Zufallswert unbedingt mittels put()
oder urn_put()
ab. Überprüfen Sie im technischen Pretest unbedingt, ob der Wert so im Datensatz abgespeichert wurde, wie Sie ihn in der Auswertung benötigen.
Wichtig: Prüfen Sie im technischen Pretest unbedingt, ob die Ziehungen in der Urne auch korrekt vermerkt werden. Nur wenn urn_put_away()
korrekt eingesetzt wird, funktioniert die Urnenziehung richtig.
Um einen Zettel aus einer Urne zu entnehmen, muss die Urne zunächst angelegt und mit Zetteln gefüllt werden.
Hinweis: Damit sich Interviewpartner nicht nach Belieben eine Kombination auswählen können, wird der Zettel pro Person nur einmal gezogen und - falls die Person den Fragebogen durch Aktualisieren oder den Zurück-Button nochmals aufruft - beibehalten. Das heißt, dass Sie beim testen durch Aktualisieren immer den gleichen Zettel bekommen werden. Um einen neuen Zettel zu bekommen, müssen Sie sich ausloggen.
Eine Kombination wird in mehreren Schritten angewendet:
urn_take()
urn_read()
und erzeugen einer entsprechenden Ausgabe, Frage, etc.Tipp: Wenn alle Zettel einmal gezogen und entwertet wurden, wird die Urne wieder komplett gefüllt.
Hinweis: Es kann vorkommen, dass eine Person den Fragebogen startet, bevor eine andere andere Person fertig ist. Wenn der Zettel der ersten Person noch nicht entwertet wurde, dann kann die zweite Person denselben Zettel ziehen. Unter diesen Umständen kann es vorkommen, dass ein Zettel vorübergehend häufiger gezogen wird - allerdings wird er danach zwei Runden nicht mehr gezogen.
// Code auf Seite 1 // Falls nur eine Ziehung im Fragebogen vorkommt urn_take('Personen'); // Zettel ziehen (1) $com = urn_read(); // Zettel auslesen und in $com speichern (2) // $com ist ein Array // Da auf jedem Zettel nur eine Zahl steht, liegt diese in $com[0] $zufallszahl = $com[0]; // Frage in Abhängigkeit des Zettels if ($zufallszahl == 1) { question('AB01'); } elseif ($zufallszahl == 2) { question('AB02'); } else { question('AB03'); } // Die verwendete Kombination im Datensatz abspeichern (3) in die // interne Variablen KK01_01 - dazu muss natürlich // eine Frage vom Typ "interne Variable" mit einem Item existieren urn_put('KK01');
// Code auf Seite 27 // Wenn die Person die Frage zur Kombination beantwortet hat // bzw. auf der vorletzten Seite des Fragebogens wird die // Kombination entwertet (4). urn_put_away(); // Wird die Kombination nicht entwertet, so wird der // Zettel automatisch wieder in die Urne zurückgelegt.
// Code auf Seite 1 // Falls nur eine Ziehung im Fragebogen vorkommt urn_take('Personen'); // Zettel aus der Urne 'Personen' ziehen (1) $com = urn_read(); // Zettel auslesen und in $com speichern (2) // Die Werte auf den Zetteln werden in einzelnen Felder in einem Array gespeichert. // Diese "Kombination" von Feldern können eine einzelne oder mehrere Zahlen // (oder auch andere Daten)sein. // Die Felder können über eine Zahl in eckigen Klammern ausgelesen werden: html(' <h1>Kombination</h1> <p>Feld 1: '.$com[0].'</p> <p>Feld 2: '.$com[1].'</p> <p>Feld 3: '.$com[2].'</p> '); // Eine Frage zu dieser Kombination stellen question('AB01'); // Die verwendete Kombination im Datensatz abspeichern (3) in die // internen Variablen KK01_01 bis KK01_03 - dazu muss eine neue Frage // vom Typ "interne Variable" (unter Frage-Typen) mit 3 Items angelegt werden urn_put('KK01');
// Code auf Seite 27 // Wenn die Person die Frage zur Kombination beantwortet hat // bzw. auf der vorletzten Seite des Fragebogens wird die // Kombination entwertet (4). urn_put_away(); // Wird die Kombination nicht entwertet, so wird der // Zettel automatisch wieder in die Urne zurückgelegt.
// Code auf Seite 1 // Falls mehrere Ziehungen pro Person erfolgen urn_take('Personen','z1'); // Ersten Zettel ziehen aus "Personen" (1) urn_take('Personen','z2'); // Zweiten Zettel ziehen aus "Personen" urn_take('Beziehung','z3'); // Dritten Zettel ziehen aus "Beziehung"
// Code auf Seite 2 $p1 = urn_read('z1'); // Alle Zettel auslesen (2) $p2 = urn_read('z2'); $bez = urn_read('z3'); // Auf den Personen-Zettel stünde nun z.B.: Alter, Vorname, Geschlecht $beschreibung1 = $p1[1].' ('.$p1[0].', '.$p1[2]')'; $beschreibung2 = $p2[1].' ('.$p2[0].', '.$p2[2]')'; // 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.' '.$bez[0].' '.$beschreibung2; // z.B. "Andreas (25, m) wohnt bei Berta (22, w)"; // Kombinationen im Datensatz ablegen (3) urn_put('KK01', 'z1'); urn_put('KK02', 'z2'); urn_put('KK03', 'z3'); // Den Text ausgeben // Natürlich könnte der Text auch per Platzhalter in die Frage // integriert werden html($komplett); // Entsprechende Frage stellen question('CJ02');
// Code auf Seite 3 // Am Schluss entwerten der Zettel nicht vergessen (4)! urn_put_away('z1'); urn_put_away('z2'); urn_put_away('z3');
Hinweis: So lange ein Zettel nicht entwertet wurde, kann er von anderen Personen (oder auch derselben Person) gezogen werden. Dies kann dazu führen, dass die Gruppen zwischenzeitlich nicht exakt gleich groß sind (bei normaler Nutzung des Fragebogens etwas +/- 2 Personen). Solche Abweichungen werden nach der Entwertung der Zettel bei den folgenden Ziehungen ausgeglichen.
Abschließend noch ein komplexeres Beispiel, das zeigt, wie man Zufallszahlen in Textelemente transformieren kann:
// Code auf Seite 1 // Eine Kombination aus Urne "Award" ziehen und auf "A1" speichern urn_take('Award','A1'); // Kombination verwenden $comb = urn_read('A1'); html('<p>Gezogene Kombination: '.implode(', ', $comb).'</p>'); // Werte sind gespeichert unter $comb[0] bis $comb[3] // Der erste Wert kann 11-16 sein, der zweite 21-24 // Texte in Variable $text1 und $text2 speichern switch ($comb[0]) { 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 = 'Fehler: '.$comb[0]; } switch ($comb[1]) { 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: $text2 = 'Fehler: '.$comb[1]; } urn_put('ZZ03', 'A1'); // Wird erst nach einem Klick auf "Weiter" // in die Datenbank geschrieben $situation = $text2.' will sich bei Ihnen '.$text1.' leihen'; // In Platzhalter %situation% speichern put($situation, 'situation'); // Frage zur Situation (mit Platzhalter %situation%) question('AL07');
// Code auf Seite 3 // Gezogene Kombination entwerten urn_put_away('A1'); // Hier kommen weitere Fragen