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