void put(string ItemKennung, mixed Wert)
Es existiert ein Fragetyp Interne Variablen. Diese Fragen können im Fragebogen nicht angezeigt werden – sie sind einzig darauf ausgelegt, Werte in ihren Items abzuspeichern. Der Unterschied zu „normalen“ Items: Nicht der Befragte bestimmt ihren Wert durch seine Antwort, sondern es wird ein Wert mittels put()
abgespeichert.
Sinnvoll ist die Anwendung von put()
, wenn im Fragebogen ein Wert berechnet wird – und man diesen in der Auswertung benötigt. Wenn also beispielsweise der Stimulus einer Frage zufällig variiert wird, dann muss man für die Auswertung freilich wissen, wozu der Befragte sich geäußert hat.
Interne Variablen werden wie Eingabefelder als Texte (Strings) behandelt.
Tipp: Sie können die Items einer Frage vom Typ „Interne Variablen“ auch verwenden, um Werte aus einem JavaScript zu speichern. Binden Sie die Frage dafür ganz normal im Fragebogen ein und schreiben Sie die Antworten in die versteckten Eingabefelder, die dabei erzeugt werden. Die HTML-IDs der Items entsprechen den Item-Kennungen, also z.B. IV01_01
.
html('<p>Bitte beurteilen Sie folgenden Markennamen:</p>'); // Eine Münze werfen und den zugehörigen Markennamen anschreiben $nummer = random(1,2); $namen = array( 1 => 'Hutzewurtz', 2 => 'Mirsewinsch' ); html('<p><b>'.$namen[$nummer].'</b></p>'); // Die gewürfelte Zahl im Datensatz abspeichern put('IV01_01', $nummer); // Frage IV01 muss den Typ "Interne Variablen" haben // Frage stellen question('AB01_01'); // Bewertung des Begriffs
int random(int min, int max)
Gibt eine Zahl zwischen min und max zurück.
// Direkte Anzeige einer Zufallszahl (wenig sinnvoll) html('<p>Der Würfel zeigt die Zahl '.random(1,6).'</p>'); // Speichert zufällig die Zahl 1 oder 2 in der Variable $version $version = random(1,2); // Stellt - je nach gewürfelter Zahl - eine von 2 Fragen if ($version == 1) { question('AA01'); } else { question('AA02'); }
Hinweis: Siehe auch Randomisierung.
Tipp: Um Items zu randomisieren, aktivieren Sie einfach die entsprechende Option in der Frage.
Tipp: Um eine Zufallsauswahl ohne Zurücklegen zu realisieren, verwenden Sie Urnen.
mixed random_p(array Verteilung)
Gibt eine Zahl aus der Verteilung zurück. Jeder Zahl kann dabei eine individuelle Wahrscheinlichkeit zugeordnet werden. Die Verteilung wird als Array übergeben, wobei jeweils der Zahl eine Wahrscheinlichkeit zugeordnet wird (Zahl ⇒ Wahrscheinlichkeit).
Im ersten Beispiel wird eine Zahl zwischen 1 und 4 gewürfelt. Die 1 und 3 haben dabei eine Chance von je 20 %, die 2 eine Chance von 50 % und die 4 eine Chance von 10 %. Die Zuordnungen im Array können auch direkt nebeneinander (statt untereinander) geschrieben werden. Die Wahrscheinlichkeiten können auch als Fließkommazahlen (mit Punkt als Dezimaltrenner) oder als absolute Anteile angegeben werden. Alle drei Zufallszahlen im ersten Beispiel haben die selbe Zufallsverteilung.
// Beispiel A // Verteilung definieren $verteilung1 = array( 1 => 20, 2 => 50, 3 => 20, 4 => 10 ); // Zahl zwischen 1 und 4 würfeln $zahl1 = random_p($verteilung1); // Beispiel B // Wahrscheinlichkeiten als Fließkommazahlen $verteilung2 = array(1=>0.2, 2=>0.5, 3=>0.2, 4=>0.1); $zahl2 = random_p($verteilung2); // Beispiel C // Wahrscheinlichkeiten als Verhältnis $verteilung3 = array(1=>3, 2=>10, 3=>4, 4=>0.1, 5=>2); $zahl3 = random_p($verteilung3);
Das zweite Beispiel demonstriert, wie eine Zufallsauswahl abhängig von den Antworten des Benutzers getroffen werden kann.
// In Frage PS_19 wurden 7 TV-Sender abgefragt // Für die Zufallsauswahl sollen nur jene in Frage kommen, // die häufiger als nie (Wert 1) genutzt werden $alle = array(1,2,3,4,5,6,7); // Eine Liste anlegen, in der alle genutzten Sender auftauchen $genutzt = getItems('PS19', 'min', 2); // Wenn kein Sender genutzt wurde, ist die Befragung zu Ende if (count($genutzt) < 1) { goToPage('end'); } // Wahrscheinlichkeiten für die verschiedenen Sender definieren // Hier aus einer Vorbefragung ermittelt, welche häufiger genutzt werden $wahrsch_alle = array( 1 => 11, 2 => 19, 3 => 10, 4 => 10, 5 => 19, 6 => 24, 7 => 7 ); $wahrsch = array(); // Für alle genutzten Sender wird der Eintrag aus $wahrsch_alle kopiert foreach ($genutzt as $sender) { $wahrsch[$sender] = $wahrsch_alle[$sender]; } // Gewichtete Zufallsauswahl aus den genutzten Sendern $fokus = random_p($wahrsch); // Der Sender Fokus wird nun weiter untersucht // Abspeichern des Untersuchungsgegenstands put('PS20_01', $fokus);
string random_items(string Items|FrageKennung, [int Anzahl])
Wählt aus einer Liste von Items oder aus allen Items einer Frage zufällig Anzahl Items aus.
Hinweis: In aller Regel ist die Aktivierung der Item-Rotation direkt in der Frage der Funktion random_items()
vorzuziehen. Diese Funktion bietet nur dann einen sinnvollen Mehrwert, wenn dieselbe Zufallsauswahl in einer späteren Frage nochmals benötigt wird oder wenn nicht alle Items angezeigt werden sollen.
Vorsicht: Beachten Sie, dass die Items immer anhand ihrer Kennung – nicht ihrer Position – angegeben werden! Um die korrespondieren Items zweier Fragen aufzurufen, müssen 2 zusammengehörige Items jeweils die selbe Item-Kennung tragen (z.B. AB01_01 gehört zu AB02_01)!
// Beispiel A // 3 Items aus den Items 1,2,3,4,8 und 9 zufällig auswählen $items = random_items("1,2,3,4,8,9", 3); // Die Frage AB01 mit den 3 zufällig ausgewählten Items stellen question("AB01", $items); // Beispiel B // Die Items 1,2,3,4,8 und 9 zufällig mischen $items = random_items("1,2,3,4,8,9"); question("AB01", $items); // Beispiel C // 3 Items der Frage AB01 zufällig auswählen $items = random_items("AB01", 3); question("AB01", $items); // Beispiel D // 3 Items der Frage AB01 zufällig auswählen - nur einfacher question("AB01", "random=3"); // Beispiel E // Items der Frage AB01 zufällig in 2 Pakete einteilen $items = getItems('AB01'); $part1 = random_items($items, 5); $part2 = array_diff($items, $part1); // Die Fragen können nun beispielsweise auf unterschiedlichen // Seiten angezeigt werden, dann muss man die Variablen $part1/2 // allerdings via registerVariable() oder mit set()/get() mitnehmen // (vgl. nächstes Beispiel unten) question('AB01', $part1); question('AB01', $part2);
Gleiche Itemfolge auf mehreren Seiten
// Seite 1 // 3 Items aus den Items 1,2,3,4,8 und 9 zufällig auswählen $items = random_items('1,2,3,4,8,9', 3); // Die Frage AB01 mit den 3 zufällig ausgewählten Items stellen question('AB01', $items); // Die Frage AB02 mit den 3 korrespondierenden Items stellen question('AB02', $items); // Die Items zwischenspeichern für eine spätere Seite set($items, "itemliste");
// Seite 2 // Dieselben Items wieder laden $items = get('itemliste'); // Eine weitere Frage mit den korrespondierenden Items stellen question('AB03', $items);
void urn_take(string UrnenKennung, [string Ziehung])
Mit urn_take() entnehmen Sie einen Zettel (eine Kombination) aus einer Urne. Dieser Zettel muss anschließend mit urn_read()
gelesen und mit urn_put_away()
weggeworfen werden. Solange der Zettel nicht weggeworfen wurde, kann er mit urn_take()
(im selben oder einem anderen Interview) gezogen werden. Wenn alle Zettel aus der Urne gezogen und weggeworfen wurden, dann wird die Urne von neuem gefüllt.
Details zur Verwendung von Urnen finden Sie im Kapitel Urnen.
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 die Seite mit der Ziehung nochmals aufruft – auch beibehalten. Das heißt, dass Sie beim Testen durch Aktualisieren der Browser-Ansicht immer den gleichen Zettel bekommen werden. Um einen neuen Zettel zu bekommen, müssen Sie den Fragebogen neu starten.
urn_take('Personen'); // Ziehung eines Zettel aus der Urne "Personen"
urn_take('Personen', 'z2'); // Falls mehrere Ziehungen in einem Fragebogen urn_take('Autos', 'auto'); // erfolgen, müssen diese benannt werden
array urn_read([string Ziehung])
Liest einen vorher mit urn_take()
gezogenen Zettel aus und gibt den Inhalt als Array zurück (siehe Urnen, Arrays). Auf die einzelnen Werte des Arrays kann anschließend mit einer Index-Nummer (beginnend bei 0) in eckigen Klammern zugegriffen werden.
$com = urn_read(); // Liest die Ziehung aus $wert1 = $com[0]; $wert2 = $com[1]; html('<p>Auf dem Zettel steht die Kombination '.$wert1.' - '$wert2.'</p>');
$com2 = urn_read('z2'); // Liest Ziehung "z2" aus $wertA = $com2[0]; $wertB = $com2[1]; // Übersetzungen für Wert A und B $texteA = array( 1 => 'Ein kleiner Mann', 2 => 'Ein großer Mann', 3 => 'Eine kleine Frau', 4 => 'Eine große Frau' ); $texteB = array( 1 => 'geht', 2 => 'rennt' ); html('<p>'.$texteA[$wertA].$texteB[$wertB].' die Straße entlang - was passiert nun?</p>'); // ergibt z.B. "Eine kleine Frau rennt die Straße entlang - was passiert nun?"
void urn_put(string VariablenKennung, [string Ziehung])
Einen Zettel aus der Urne zu ziehen und einen entsprechenden Stimulus zu zeigen ist schon sehr hilfreich. Aber in der Auswertung sollte man auch wissen, welchen Zettel man in dem Interview gezogen hatte. Mit urn_put()
wird die Kombination in eine oder mehrere interne Variablen (Items einer Frage vom Typ „Interne Variable“) gespeichert (s. Interne Variablen, Variablen in SoSci Survey).
Legen Sie eine Frage vom Typ „Interne Variable“ an und geben sie ihr so viele Items, wie der Zettel Werte (=Spalten) beinhaltet. Anschließend speichern Sie die gezogenen Kombination in diese internen Variablen.
urn_put('IV01'); // Speichert die Kombination in IV01 // (die Kombination hat zwei Werte, die in IV01_01 und IV01_02 gespeichert werden)
urn_put('IV02', 'z2'); // Speichert die Kombination aus der Ziehung "z2" in IV02
void urn_put_away([string Ziehung])
Um einen Zettel aus der Urne zu entfernen, muss er noch explizit weggelegt werden. Dadurch bleiben Zettel, bei denen das Interview abgebrochen wurde, in der Urne und werden erneut abgefragt.
Auch hier wird – falls mehrere Ziehungen stattfanden – der Name der Ziehung angegeben.
Hinweis: So lange, bis der Zettel entwertet wurde können andere Interviewpartner denselben Zettel ziehen. Dadurch kann es kurzfristig zu minimalen Ungleichverteilungen kommen, die aber automatisch wieder korrigiert werden.
Tipp: Sind alle Zettel aus der Urne entnommen, wird die Urne automatisch wieder gefüllt.
Tipp: Rufen Sie urn_put_away()
direkt nach urn_take()
auf, um Zettel auf jeden Fall nur einmal zu erfragen – unabhängig davon, ob der Fragebogen komplett ausgefüllt wird.
Tipp: Lassen Sie urn_put_away()
weg, um eine Zufallsauswahl mit Zurücklegen zu realisieren, wenn Sie mehr als nur einen Wert (also eine Kombination) ziehen möchten.