SoSci Survey
Übersetzungen dieser Seite:
 

Funktionen zur Randomisierung

  • put() - Wert im Datensatz abspeichern
  • random() - Zufallszahl würfeln
  • random_p() - Zufallszahl unter Vorgabe von Wahrscheinlichkeiten
  • random_items() - Zufällig Items aus einer Liste auswählen
  • urnDraw() - Zieht einen Zettel aus einer Urne (Zufallsauswahl ohne Zurücklegen)
  • urnPutAway() - Entfernt einen mit urnDraw() gezogenen Zettel aus der Urne

put()

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

random()

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.

random_p()

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

random_items()

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

urnDraw()

void urnDraw(string UrnenKennung, string FrageKennung, [string Ablegen])

Mit urnDraw() entnehmen Sie einen Zettel (eine Kombination) aus einer Urne. Wenn alle Zettel aus der Urne gezogen und abgelegt wurden, dann wird die Urne von Neuem gefüllt.

Details zur Verwendung von Urnen finden Sie im Kapitel Urnen.

  • UrnenKennung
    Die Kennung der Urne gibt an, aus welcher Urne der Zettel gezogen werden soll.
  • FrageKennung
    Geben Sie hier die Kennung einer Frage vom Typ interne Variablen an, in welcher die gezogene Kombination gespeichert werden soll.
  • Ablegen
    Hier können Sie festlegen, ob die Kombination sofort abgelegt werden soll oder erst später. Falls Sie nichts angeben, wird die Kombination sofort abgelegt.
    • 'now' Die Kombination wird sofort abgelegt
    • 'end' Die Kombination wird abgelegt, wenn/falls der Teilnehmer die letzte Seite des Fragebogens erreicht
    • 'man' Die Kombination wird manuell durch Aufruf von urnPutAway() abgelegt
    • 'no' Die Kombination wird gar nicht abgelegt – es wird eine Ziehung mit Zurücklegen durchgeführt

Hinweis: Falls innerhalb eines Interviews mehrere Kombinationen aus derselben Urne gezogen werden sollen, müssen unterschiedliche Frage-Kennungen angegeben werden.

Hinweis: In den internen Variablen dürfen vor der Ziehung noch keine Werte gespeichert worden sein, z.B. via put().

Hinweis: Damit sich Interviewpartner nicht nach Belieben eine Kombination auswählen können, wird pro Interview nur einmal gezogen und – falls die Person die Seite mit der Ziehung nochmals aufruft – diese Ziehung 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.

// Einen Zettel aus der Urne "Personen" ziehen und
// die gezogene Kombination in den Variablen von IV01 speichern
urnDraw('Personen', 'IV01');
// Anzeigen der gezogenen Kombination (testweise)
html('<p>Auf dem Zettel steht die Kombination '.value('IV01_01').' - '.value('IV01_02').'</p>');

Hinweis: Im einfachsten Fall besteht eine Kombination nur aus einem einzigen Wert.

urnPutAway()

void urnPutAway([string FrageKennung])

Falls Sie die Funktion urnDraw() mit dem Wert 'man' für den dritten Parameter (Ablegen) aufgerufen haben, bestimmen Sie mittels urnPutAway(), wann die Kombination abgelegt werden soll.

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: Lassen Sie urnPutAway() weg, um eine Zufallsauswahl mit Zurücklegen zu realisieren, wenn Sie eine Kombination (also nicht nur eine Zahl) ziehen möchten.

de/create/functions-random.txt · Zuletzt geändert: 15.12.2013 00:16 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki