====== random_p() ====== ''int **random_p**(array //Verteilung//)'' Gibt eine Zahl aus der //Verteilung// zurück. Jeder Zahl kann dabei eine individuelle Wahrscheinlichkeit zugeordnet werden. * //Verteilung//\\ Ein Array, welches die möglichen Zahlen als Schlüssel und deren Wahrscheinlichkeit als Wert angibt. Es wird also jeder Zahl eine Wahrscheinlichkeit zugeordnet (Zahl ''%%=>%%'' Wahrscheinlichkeit). Die Wahrscheinlichkeit kann als Anteil (z.B. ''0.25'') oder als relativer Anteil (z.B. ''20'') angegeben werden. **Wichtig:** Die Verteilung der gezogenen Werte nähert sich erst bei vielen Ziehungen (N > 1000) der angegeben Verteilung an. Falls Sie mit geringeren Fallzahlen arbeiten, verwenden Sie eine [[ :de:create:random_urns|Randomisierung mit Urnen]] und tragen Sie manche Zahlen ggf. häufiger in der Urne ein, wenn diese häufiger gezogen werden sollen. **Wichtig:** Verwenden Sie die Funktion ''[[:de:create:functions:put|put()]]'', um den gezogenen Wert im Datensatz zu speichern. ===== Beispiel 1 ===== 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 %. Alle drei Zufallszahlen im ersten Beispiel haben die selbe Zufallsverteilung. // Verteilung definieren $verteilung = array( 1 => 20, 2 => 50, 3 => 20, 4 => 10 ); // Zahl zwischen 1 und 4 würfeln $zahl = random_p($verteilung); // Ergebnis der Zufallsziehung in Variable IV01_01 speichern put('IV01_01', $zahl); // Entsprechenden Stimulus anzeigen if ($zahl == 1) { text('stimulusA'); } elseif ($zahl == 2) { text('stimulusB'); } elseif ($zahl == 3) { text('stimulusC'); } else { text('stimulusD'); } Die Wahrscheinlichkeiten können auch als Fließkommazahlen (mit Punkt als Dezimaltrenner) angegeben werden. Außerdem können die Zahlen auch direkt hintereinander geschrieben werden. // Wahrscheinlichkeiten als Fließkommazahlen $verteilung = array(1=>0.2, 2=>0.5, 3=>0.2, 4=>0.1); Die Wahrscheinlichkeiten müssen sich __nicht__ zu 1 oder 100 addieren. // Wahrscheinlichkeiten als Verhältnis $verteilung = array(1=>4, 2=>10, 3=>4, 4=>2); Und natürlich muss die Verteilung __nicht__ separat in eine Variable gespeichert werden. // Zahl zwischen 1 und 4 würfeln $zahl = random_p(array( 1 => 2, 2 => 5, 3 => 2, 4 => 1 )); ===== Beispiel 2 ===== Das zweite Beispiel demonstriert, wie eine Zufallsauswahl abhängig von den Antworten des Benutzers getroffen werden kann. Das Beispiel geht davon aus, dass in Frage "PS19" die Nutzungshäufigkeit für 7 Fernsehsender abgefragt wurde zwischen 1 (nie), 2 (selten), 3 (häufig) und 4 (fast täglich). Nun soll aus den Sendern, die mindestens selten genutzt werden, zufällig einer ausgewählt werden. Allerdings sollten die Sender 2, 5 und 6 dabei bevorzugt werden. // 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 $pAlle = array( 1 => 10, 2 => 20, 3 => 10, 4 => 10, 5 => 20, 6 => 30, 7 => 10 ); // Nun muss eine Verteilung für die genutzten Sender erstellt werden $pGenutzt = array(); foreach ($genutzt as $sender) { $pGenutzt[$sender] = $pAlle[$sender]; } // Gewichtete Zufallsauswahl aus den genutzten Sendern $fokus = random_p($pGenutzt); // Abspeichern des Untersuchungsgegenstands put('PS20_01', $fokus);