====== Zufallsgenerator ======
**Hinweis:** Diese Seite erklärt ausführlich, wie Sie einen Zufallsgenerator erstellen und wann ein solcher eingesetzt werden kann. Konkrete Beispiele finden Sie dann in den Anleitungen zu den einzelnen Anwendungen (siehe unten).
Der Zufallsgenerator ist ein funktionaler Baustein für den Fragebogen. Das Element zieht aus einer vorgegebenen Liste von Elementen (Zettel) eines und speichert dessen Wert in eine Variable. Der gezogene Wert kann mittels ''[[:de:create:functions:value]]'' ausgelesen und in einem [[:de:create:filters|Filter]] verwendet werden, um Inhalte des Fragebogens zufällig zu variieren. So lassen sich Teilnehmer etwa zufällig zu Experimentalgruppen zuordnen ([[de:create:randomization|]]).
Der Zufallsgenerator sorgt standardmäßig dafür, dass alle Zettel gleich häufig gezogen werden (Option //Art der Ziehung//). Das ist vor allem dann wichtig, wenn die Experimentalgruppen gleich groß sein sollen. Bei einer uneingeschränkten Zufallsauswahl hingegen kann es (gerade bei überschaubaren Stichproben) passieren, dass die Gruppengrößen massiv abweichen.
**Tipp:** Sollte die zufällige Variation nicht wie gewünscht funktionieren, liefern die Debug-Informationen im Fragebogen in aller Regel schnell eine Antwort. Mehr dazu s. [[:de:create:filter-solving]] und im [[https://cast.itunes.uni-muenchen.de/clips/H2qJPn0rX8/vod/online.html|Erklärvideo Experimental Randomization (engl)]] am Ende.
Es gibt verschiedene Fälle, in denen ein Zufallsgenerator eingesetzt werden kann. Einige Funktionen, die der Zufallsgenerator dabei ausführen kann:
* Für den gezogenen Zettel sind zwei Werte verfügbar: Erstens der numerische Code und zweitens der eingetragene Text für den Zettel -- das kann z.B. der Dateiname eines Bildes sein (z.B. [[de:create:randomization-einfaktoriell|]]).
* Der Zufallsgenerator kann innerhalb eines Interviews mehrere Zettel ziehen (Option //Anzahl Zettel pro Interview//) und dabei sicherstellen, dass derselbe Zettel nicht mehrfach gezogen wird.
* Der Zufallsgenerator liefert pro Zettel nur einen Wert (und dessen Beschriftung). Aber auch Kombinationen können mittels Zufallsgenerator umgesetzt werden (siehe [[de:create:randomization-within|]]).
===== Erstellung eines Zufallsgenerators=====
Hier wird allgemein einmal erklärt, wie Sie einen Zufallsgenerator anlegen können. Wie dieser Zufallsgenerator dann im Speziellen eingesetzt werden muss, wird dann in den einzelnen Kapiteln (siehe Links unten) genauer erklärt.
====Schritt 1: Zufallsgenerator anlegen====
Der Zufallsgenerator als funktionaler Baustein wird als eine neue Frage in einer Rubrik angelegt ([[de:create:basics|]]). Wählen Sie bei der Erstellung der Frage den Fragentyp //Zufallsgenerator//. Sie können hierfür einfach die ersten Buchstaben des Fragentyps eingeben, dann erscheint der Fragentyp in der Auswahlliste. Geben Sie der Frage noch eine Beschreibung und eine Fragekennung und klicken Sie auf speichern ({{:button.save.png?nolink|Speichern}}).
{{:de:create:questions:scr.random.create.png?nolink|Zufallsgenerator anlegen}}
Die Fragekennung benötigen Sie später im PHP-Code.
====Schritt 2: Inhalte eintragen====
Im nächsten Schritt geben Sie die //Inhalte (Zettel)// ein, aus welchen Sie später ziehen möchten.
Wenn Sie zum Beispiel die Teilnehmer zufällig in verschiedene Gruppen einteilen möchten (z.B. bei der [[de:create:randomization]]), geben Sie einfach die Gruppenbezeichnungen ein.
Beispiel:
Gruppe 1
Gruppe 2
Gruppe 3
Durch das Speichern der Frage teilt das System nun den einzelnen Bezeichnungen automatisch Werte (beginnend mit 1) zu:
Beispiel:
1= Gruppe 1
2= Gruppe 2
3= Kontrollgruppe
Wenn nun der Zufallsgenerator im Fragebogen platziert wird, teilt dieser dem Teilnehmer einen zufälligen Wert (Zettel) zu. Diese Werte können später ausgelesen werden und in Filtern weiterverwendet werden.
====Schritt 3: Weitere Einstellungen====
In manchen Fällen ist es notwendig, die Einstellungen im Zufallsgenerator noch anzupassen:
* //Anzahl Zettel pro Interview//\\ Wie viele Zettel müssen pro Interview gezogen werden ? In manchen Fällen ist es notwendig, mehrere Zettel zu ziehen, beispielsweise um 20 Bilder aus einem Pool von 300 Bildern zu präsentieren. Geben Sie den entsprechenden Wert unter //Anzahl Zettel pro Interview// ein.
* //Art der Ziehung//\\ Machen Sie sich vorab Gedanken, welche Ziehung Sie benötigen. Standardmäßig ist eine Gleichverteilung vorgesehen. Dies ist für die meisten Fälle sinnvoll.
* Die gleichverteilte Ziehung kann bei einer hohen Abbrecherquote zu ungleichen Gruppen im bereinigten Datensatz führen. Es ist daher sinnvoll, den Zufallsgenerator weiter hinten im Fragebogen zu platzieren, z.B. dort, wo der Stimulus präsentiert wird. Zur Korrektur siehe [[#ziehungen_nachjustieren|Ziehung nachjustieren]].
* **Wichtig:** Wählen Sie die Option "Gleichverteilung __in abgeschlossenen Fragebögen__" nur dann, wenn die Erhebung sich über einen längeren Erhebungszeitraum erstreckt und der Fragebogen in kurzer Zeit abgeschlossen werden kann (FINISHED=1). Wenn viele Teilnehmer:innen in kurzer Zeit (gemessen an der Zeit zwischen Zufallsziehung und Abschluss eines Interviews) teilnehmen, kann dies sonst zu Ungleichverteilungen führen. Wählen Sie dann lieber die normale gleichverteilte Ziehung.
* Bei der zufälligen Ziehung mit Zurücklegen müssen Sie vor allem in kleinen Stichproben (weniger als ca. 250 pro Untersuchunsgruppe) damit rechnen, dass sich die Befragten im Rahmen des statistischen Auswahlfehlers ungleichmäßig auf die Untersuchungsgruppen verteilen.
* //Inhalte anzeigen//\\ es ist auch möglich, bereits Dateinamen als Zettel anzugeben und mittels //Inhalte anzeigen// die zugehörigen Bilder ohne weiteren PHP-Code auf der Fragebogenseite einzubinden. Mehr dazu unter [[de:create:randomization-einfaktoriell]].
====Schritt 4: Platzieren des Zufallsgenerators====
Je nach Weiterverwendung der Werte des Zufallsgenerators muss dieser passend im Fragebogen platziert werden. Dazu muss die Frage beim **Fragebogen zusammenstellen** auf eine Seite gezogen werden. In jedem Fall muss der Wert __vor__ einem PHP-Code platziert werden, bei dem der Wert ausgelesen werden soll. Wenn der Wert des Zufallsgenerators einmal gezogen wurde, kann dieser Wert im Fragebogen jederzeit wieder ausgelesen werden.
=====Verwendung des Zufallsgenerators=====
Der Zufallsgenerator wird als Grundlage für einige dynamische Inhalte in SoSci Survey benötigt. Dazu gehören:
* [[de:create:randomization|]]
* [[de:create:rotation|]]
* [[de:create:random_questionnaire]]
* [[de:create:vouchers]]
===== Ziehungen nachjustieren =====
Arbeitet man mit vielen Experimentalgruppen, kann es sein, dass die eigentlich erfolgreiche Gleichverteilung nach der Bereinigung verloren geht. Gerade wenn die Fallzahl pro Gruppe sehr klein ist, schlagen die Fälle zu Buche, die bei der Bereinigung (z.B. aufgrund des Manipulation Check) gelöscht werden müssen. Dann kann es sein, dass es nötig ist, den Zufallsgenerator während der Erhebung geringfügig anzupassen.
**Warnung:** Das Nachjustieren der Zufallsauswahl sollte __nur__ dann erfolgen, wenn die Teilnehmer kontinuierlich und aus derselben Grundgesamtheit rekrutiert werden. Sonst besteht die Gefahr einer Konfundierung:
Man stelle sich ein Experiment mit 4 Gruppen vor, bei dem die Teilnehmer alle an einem bestimmten Tag eingeladen werden. Nachdem 2/3 der Teilnehmer den Fragebogen ausgefüllt haben, bemerkt man, dass in Gruppe 1 überdurchschnittlich viele Fälle bereinigt werden müssen. Also werden ab sofort mehr Teilnehmer der Gruppe 1 zugeteilt. Nun liegt eine Konfundierung vor, denn Teilnehmer, die auf eine Einladung später reagieren, können sich signifikant von Teilnehmern unterscheiden, die schnell reagieren. Also würden sich die Teilnehmer in Gruppe 1 nun a-priori von Teilnehmern in anderen Gruppen unterscheiden -- und damit wären Unterschiede in den abhängigen Variablen nicht mehr alleine auf den experimentellen Stimulus zurückzuführen.
**Tipp:** In einer Situation, in der man die Zufallsziehung nicht nachträglich anpassen kann, kann man eine [[:de:create:random_urns|Urne]] verwenden und in ''urnDraw()'' ein manuelles Ablegen der Zettel konfigurieren. Das manuelle Ablegen mittels ''[[:de:create:functions:urnputaway]]'' erfolgt nur dann, wenn mit einem [[:de:create:filters|Filter]] überprüft wurde, dass der Fall auch brauchbar ist. Nachteile: Das ist vergleichsweise aufwändig und gerade zu Beginn der Erhebung kann es zu deutlich ungleichen Gruppengrößen kommen.
Sind die Bedingungen für das Nachjustieren (s. oben) erfüllt, so ist das Vorgehen wie folgt:
- Der vorläufige Datensatz wird bereinigt (Abbrecher, fehlende Antworten, Manipulation Check, keine Zustimmung zur Verwendung der Angaben, ...).
- Es wird eine Häufigkeitstabelle über die Variable des Zufallsgenerators erstellt.
- Diese Häufigkeitstabelle wird in ein Format ''Code: Anzahl'' umgewandelt (s. unten).
- Diese Liste wird im Zufallsgenerator in das Feld //Bisher gezogen// eingetragen -- dabei spielt die Reihenfolge der Werte keine Rolle, wichtig ist nur, dass jeweils Code und Anzahl enthalten sind.
- Nach dem Speichern wird die Liste automatisch sortiert und weitere Zufallsziehungen erfolgen so, dass bisherige Ungleichheiten ausgeglichen werden.
Die Liste der Codes und verwertbaren Fälle kann z.B. wie folgt aussehen:
111111: 2
111211: 1
111311: 2
111411: 2
112111: 1
112211: 2
112311: 2
112411: 2
u.s.w.
In Excel oder OpenOffice Calc erstellt man eine solche Liste, indem man die zuvor erstellte Häufigkeitstabelle (mit Codes, nicht Beschriftungen) mit folgendem Befehl zusammenfasst (wenn in Spalte A die Codes stehen und in Spalte B die Häufigkeiten):
=VERKETTEN(A1; ": "; B1)
In GNU R kann man Häufigkeitstabelle und Liste wie folgt ausgeben lassen (wenn die Variable des Zufallsgenerators z.B. RG01 heißt):
tmp = table(data$RG01)
cat(paste(paste(names(tmp), tmp, sep=": "), collapse="\n"))