0 votes
ago in SoSci Survey (dt.) by s195319 (155 points)

Liebe Community,

ich arbeite an einem experimentellen Studiendesign mit zweistufiger Randomisierung und stehe vor einem Problem, das ich allein nicht eindeutig lösen kann. Vielleicht hat jemand von euch eine Lösung oder einen Hinweis.

Studiendesign
Ich habe ein 2×5-Design mit 9 Bedingungen (Kontrolle plus 8 Treatments). Die Randomisierung läuft zweistufig:
RG01 (Seite 2; Control vs. Treatment): Erste Zufallsziehung mit Urnenmodus, 7 Zettel (1× Control, 6× Treatment) - ergibt eine Gewichtung von 1:6 zugunsten der Treatments.
RG02 (Seite 3; Treatmentcondition): Zweite Zufallsziehung mit Urnenmodus, 8 Zettel (je 1× Decrease 5/10/15/20 % und Increase 5/10/15/20 %) - verteilt die Treatment-Teilnehmenden gleichmäßig auf die 8 Treatment-Bedingungen.

Auf Seite 3 habe ich die Filterbedingung value('RG01') != 1 gesetzt, damit RG02 nur ausgeführt wird, wenn der Teilnehmer in RG01 ein Treatment gezogen hat.
Auf Seite 6 wertet ein PHP-Block die Werte von RG01 und RG02 aus und mappt sie auf die finalen Bedingungsvariablen.

Problem: Bei der Kontrolle der Daten ist mir aufgefallen: Auch bei Kontroll-Teilnehmenden (RG01 = 1) erscheint im Datenexport ein RG02-Wert zwischen 1 und 8. Die Urne von RG02 wird also offenbar trotz der Filterbedingung auf Seitenebene konsumiert, obwohl die Seite selbst übersprungen wird.
Konkret in einem aktuellen Test-Datensatz (N = 13):

11 Treatment-Teilnehmer (RG01 ≠ 1)
2 Kontroll-Teilnehmer (RG01 = 1)
Gesamtsumme der RG02-Ziehungen über alle Teilnehmer: 13 (statt erwarteter 11)

Das heißt also, dass zie zwei Kontroll-Teilnehmer jeweils einen RG02-Zettel "verbraucht" haben, obwohl sie der Kontrollbedingung zugewiesen wurden.
Die Folge für die Hauptstudie
In meiner Hauptstudie sind 560 Teilnehmende geplant (rechnerisch 80 Kontrollen, 480 Treatments). Wenn jede Kontrollperson zusätzlich einen RG02-Zettel konsumiert, wird die Urne unnötig oft neu gefüllt - und damit kann die Zellenbalance der 8 Treatment-Bedingungen verzerrt werden, gerade bei kleineren Stichproben oder unausgeglichener Reihenfolge der Kontroll- vs. Treatment-Teilnehmer.

Frage: Wie bringe ich SoSci dazu, RG02 wirklich nur dann auszuführen, wenn die Filterbedingung value('RG01') != 1 erfüllt ist? Mein Eindruck ist, dass die Seitenfilterbedingung zwar die Anzeige der Seite blockiert, aber den Zufallsgenerator selbst trotzdem auslöst.
Ich habe in den Konfigurationsoptionen des Zufallsgenerators (Tabs Ziehung, Verwaltung, Inhalte anzeigen, Variablen) keine Möglichkeit gefunden, eine Bedingung direkt am Element zu setzen. Auch die Einstellung "Los nur bei abgeschlossenen Fällen ziehen" scheint hier nicht zu greifen - sie verhindert nur den Verbrauch bei abgebrochenen Sessions, nicht bei übersprungenen Seiten.
Gibt es eine Einstellung, die ich übersehen habe? Oder ist die saubere Lösung, RG02 komplett aus den Zufallsgeneratoren zu nehmen und stattdessen die Treatment-Auswahl per mt_rand() direkt im PHP-Block des nachgelagerten Mappings zu erzeugen?

Vielen Dank für eure Hilfe!

Anbei noch der komplette PHP-Codeblock:

$rg01 = value('RG01');

if ($rg01 == 1) {

// Kontrolle - RG02 wurde uebersprungen

$condition = 1;
$direction = 'control';
$magnitude = 0;
$sc_text = 'SC11';
$sc_shop = 'SC01';

} else {

// Treatment - RG02 wurde gezogen
$rg02 = value('RG02');

$treatment_map = array(
    1 => array('cond' => 2, 'dir' => 'decrease', 'mag' => -5,  'text' => 'SC12', 'shop' => 'SC02'),
    2 => array('cond' => 3, 'dir' => 'decrease', 'mag' => -10, 'text' => 'SC13', 'shop' => 'SC03'),
    3 => array('cond' => 4, 'dir' => 'decrease', 'mag' => -15, 'text' => 'SC14', 'shop' => 'SC04'),
    4 => array('cond' => 5, 'dir' => 'decrease', 'mag' => -20, 'text' => 'SC15', 'shop' => 'SC05'),
    5 => array('cond' => 6, 'dir' => 'increase', 'mag' => 5,   'text' => 'SC16', 'shop' => 'SC06'),
    6 => array('cond' => 7, 'dir' => 'increase', 'mag' => 10,  'text' => 'SC17', 'shop' => 'SC07'),
    7 => array('cond' => 8, 'dir' => 'increase', 'mag' => 15,  'text' => 'SC18', 'shop' => 'SC08'),
    8 => array('cond' => 9, 'dir' => 'increase', 'mag' => 20,  'text' => 'SC19', 'shop' => 'SC09')
);

$t = $treatment_map[$rg02];
$condition = $t['cond'];
$direction = $t['dir'];
$magnitude = $t['mag'];
$sc_text = $t['text'];
$sc_shop = $t['shop'];

}

// Abgeleitete Variablen fuer die Analyse berechnen
$magnitude_abs = abs($magnitude); // 0, 5, 10, 15, 20
$magnitude_c = $magnitude_abs - 10; // -10, -5, 0, 5, 10 (zentriert)
$magnitude_sq = $magnitude_c * $magnitude_c; // 100, 25, 0, 25, 100

// Direction-Dummy als if-else (statt ternaerem Operator)
if ($direction == 'increase') {

$direction_dum = 1;

} else {

$direction_dum = 0;

}

$mag_x_dir = $magnitude_c $direction_dum;
$magsq_x_dir = $magnitude_sq
$direction_dum;

// Alle Variablen persistieren
put('VA01_01', $condition);
put('VA02_01', $direction);
put('VA03_01', $magnitude);
put('VA04_01', $magnitude_abs);
put('VA05_01', $magnitude_c);
put('VA06_01', $magnitude_sq);
put('VA07_01', $direction_dum);
put('VA08_01', $mag_x_dir);
put('VA09_01', $magsq_x_dir);

// Textbausteine fuer Vortext und Shop-Bild anzeigen
text($sc_text);
text($sc_shop);

1 Answer

+1 vote
ago by SoSci Survey (370k points)
selected ago by s195319
 
Best answer

Die Urne von RG02 wird also offenbar trotz der Filterbedingung auf Seitenebene konsumiert

Das liegt vermutlich daran, dass Sie beide Zufallsgeneratoren in die Seite gezogen haben anstatt nur einen per show() oder question() im IF-Filter aufzurufen.

Meine Empfehlung ist aber ohnehin, dass Sie nur einen Zufallsgenerator verwenden. Und zwar mit 9 (oder 10, je nach Gewichtung der Kontrollgruppe) Codes. Wenn Sie möchten, können Sie dort auch gleich Ihre komplette "Treatment Map", wie Sie es im Code bezeichnet haben, hinterlegen, also z.B.

1 = KG
2 = A1,2,-1,-5,SC12,SC02
3 = A2,3,-1,-10,SC13,SC03
...
9 = B5,9,+1,20,SC19,SC09

Die einzelnen Werte können Sie dann bequem mittels value(RG01, 'csv') als Array auslesen und mit put() in die Variablen speichern.

ago by s195319 (155 points)
Hey,

vielen Dank für den Hinweis!

Meine RG01-Variable habe ich jetzt folgendermaßen:

01 = control,1,0,0,SC11,SC01
02 = control,1,0,0,SC11,SC01
03 = decrease,2,0,-5,SC12,SC02
04 = decrease,3,0,-10,SC13,SC03
05 = decrease,4,0,-15,SC14,SC04
06 = decrease,5,0,-20,SC15,SC05
07 = increase,6,1,5,SC16,SC06
08 = increase,7,1,10,SC17,SC07
09 = increase,8,1,15,SC18,SC08
10 = increase,9,1,20,SC19,SC09

Und den PHP-Block, habe ich so aufgebaut:

// Werte aus der Urne als Array auslesen
$values = value('RG01', 'csv');

// Bedeutung der einzelnen Felder im Array
// $values[0] = Direction-Label (control/decrease/increase)
// $values[1] = Condition-ID (1-9)
// $values[2] = Direction-Dummy (0 oder 1)
// $values[3] = Magnitude mit Vorzeichen (-20 bis +20)
// $values[4] = Vortext-ID (SC11-SC19)
// $values[5] = Shop-Bild-ID (SC01-SC09)

$direction = $values[0];
$condition = (int)$values[1];
$direction_dum = (int)$values[2];
$magnitude = (int)$values[3];
$sc_text = $values[4];
$sc_shop = $values[5];

// Abgeleitete Variablen berechnen
$magnitude_abs = abs($magnitude);              // 0, 5, 10, 15, 20
$magnitude_c   = $magnitude_abs - 10;          // -10, -5, 0, 5, 10
$magnitude_sq  = $magnitude_c * $magnitude_c;  // 100, 25, 0, 25, 100

$mag_x_dir   = $magnitude_c * $direction_dum;
$magsq_x_dir = $magnitude_sq * $direction_dum;

// Alle Variablen persistieren
put('VA01_01', $condition);
put('VA02_01', $direction);
put('VA03_01', $magnitude);
put('VA04_01', $magnitude_abs);
put('VA05_01', $magnitude_c);
put('VA06_01', $magnitude_sq);
put('VA07_01', $direction_dum);
put('VA08_01', $mag_x_dir);
put('VA09_01', $magsq_x_dir);

// Textbausteine für Vortext und Shop-Bild anzeigen
text($sc_text);
text($sc_shop);

Bin mit allen Bedinungen den FB durchgegangen und es hat wunderbar funktioniert. Danke! :-)

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

...