0 votes
ago in SoSci Survey (dt.) by s144760 (140 points)
edited ago by SoSci Survey

Liebe Community,

ich bastel derzeit an einem Projekt, das fünf Experimentalgruppen hat. Logischerweise würden wir gerne möglichst ausgeglichene Gruppen haben, sodass eine Blockrandomisierung am Sinnvollsten sein sollte. Bei zwei Experimentalgruppen müssen allerdings Obergrenzen definiert werden, da hier personelle Ressourcen im Verlauf gebunden werden. Ich bräuchte etwas Hilfe, wie ich das mit den Funktionen von SoSci-Survey am besten umsetzen kann - da ich z.B. gelesen habe, dass eine Urne nicht nochmal neu gezogen wird, wenn die Zielvariable schon gefüllt ist.
Meine bisherige Logik nutzt eine einfache Zufallsziehung, die leider bei den erwarteten Gruppengrößen zu zu ungleichen Verteilungen führt.
Hier mein Code:

$grkey = 'Gruppen';

$gruppen = dbGet($grkey);

$obergrenzen = array(100,20,40,100,100); //20 und 40 sind die eigentlichen Obergrenzen, die anderen Gruppen sind eigentlich offen

$zug = random(1,5);

$zugewiesen = false;
while (!$zugewiesen) {

    if ($gruppen[$zug - 1] <= $obergrenzen[$zug - 1]) {
        $gruppen[$zug - 1]++;
        $zugewiesen = true;
    } else {
        $zug = random(1, 5);
    }
}


dbSet($grkey, $gruppen);

(Falls hier ein Klammerfehler ist - ich habe etwas Code davor entfernt)

Wie könnte ich die gleiche Logik mit einer Blockrandomisierung umsetzen?

Vielen Dank für die Unterstützung und Ideen :)

1 Answer

0 votes
ago by SoSci Survey (348k points)

Nun, soweit ich sehe, haben Sie im Prinzip die Blockrandomisierung mit $grkey schon vorgesehen. Das können Sie natürlich einfach so machen.

Aber wenn ich korrekt zwischen den Zeilen lese, hätten sie gerne statt der uneingeschränkten Zufallsauswahl einen Zufallsgenerator verwendet, um die experimentellen Ausprägungen über die Zeit auch gleichmäßig zu verteilen.

So ganz trivial ist das nicht, aber machbar. Sie brauchen folgende Bausteine:

1) Der Zufallsgenerator liefert nach jeder Ziehung einen Wert, wie häufig er schon geleert wurde - wie oft jeder Code also schon gezogen wurde. Da interessiert uns, wenn die 20 und 40 überschritten wurde. Diesen Wert können Sie nach der Ziehung in die Datenbank für Inhalte schreiben.

2) Mit dem show()-Befehl kann man den Zufallsgenerator einbinden und dabei per 'filter' einschränken, welche Codes gezogen werden dürfen. Wenn die 20 übeschritten wurde, dann ziehen Sie nur noch aus [1,3,4,5] und wenn die 40 überschritten wurde, dann nur noch aus [1,4,5].

Das Ganze dann natürlich noch in einem IF-Konstrukt, welches je nach Block einen anderen Datenbankeintrag prüft und aus einem anderen Zufallsgenerator zieht.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...