0 votes
in SoSci Survey (dt.) by s083193 (110 points)

Hallo,

ich habe folgendes Problem. Ich habe ein Befragungsprojekt mit 2 Experimentalgruppen, welche je Gruppe 50% der Fragen erhalten sollen.
Auf der ersten Seite habe ich angegeben, das die Teilnehmer zu Beginn der Testung randomisiert zu den entsprechenden Gruppen zugeordnet werden sollen:

put('XX03_01', random(0,1)); // Für die Testversionen

Die Zuteilung funktioniert.

Nun möchte ich das 3 Seiten + Intro randomisiert erscheinen und der Test danach normal weiterläuft:

$sequence = array('VisIntro-VisAB', 'AudIntro-AudAB', 'SemIntro-SemAB');

shuffle($sequence);
$seiten[] = 'T123ende';
setPageOrder($sequence);

Die Fragen auf den zu randomisierenden Seiten (VisAB,AudAB, SemAB), sollten jeweils auf einer eigenen Seite erscheinen und ebenfalls randomisiert werden. Es soll jede Frage nur 1 x angezeigt werden! Für die Gruppenzuteilung(AB); Randomisierung, Eine Frage pro Seite, habe ich folgenden Code verwendet: (Bsp für Seite VisAB, auf Seite AudAB, SemAB identischer Codes nur mit anderen Fragen):

$versionA = array('T402','T405','T403','T407','T411','T413','T416','T425','T421',
'T422','T423','T419','T429','T430','T432','T435','T437','T438','T440','T443',
'T445','T446','T448','T451','T453','T454','T457','T472','T474','T461','T459','T464',
'T465','T467','T469','T501','T503','T506','T508','T509','T511','T515','T517',
'T518','T520','T523','T525','T526','T528','T531','T533','T534','T536','T539',
'T541','T542','T544','T547','T549','T550','T552','T555','T557','T558','T560',
'T563','T566','T414','T568','T573','T571','T565');

$versionB = array('T401','T404','T409','T408','T410','T412','T415','T417',
'T418','T420','T424','T426','T427','T428','T431','T433','T434','T436','T439','T441',
'T442','T444','T447','T449','T450','T452','T455','T458','T460','T462','T463',
'T466','T468','T470','T471','T473','T502','T504','T505','T507','T510','T512',
'T513','T516','T521','T519','T524','T527','T529','T522','T530','T532','T535',
'T537','T540','T538','T545','T543','T546','T551','T548','T554','T553','T556',
'T559','T561','T562','T564','T567','T569','T570','T572');

if (value('XX03_01') == 0) {
    
    debug('Version A');
    shuffle($versionA);
    $i = loopPage(count($versionA));
    question($versionA[$i]);

} elseif (value('XX03_01') == 1) {
  
    debug('Version B');
    shuffle($versionB);
    $i = loopPage(count($versionB));
    question($versionB[$i]);  

Die Randomisierung der Seiten funktionert, nur werden die Fragen häufig doppelt angezeigt und einige nicht. Zudem springt er einfach zum Ende wenn der Test durch die Randomisierung mit der letzten Seite ('SemIntro-SemAB') beginnt.

Wer kann mir helfen??!
ich würde gerne dass die Seiten zufällig erscheinen, jede Frage einer Seite aber nur 1 x dran kommt, aber sichergestellt wird, das alle Seiten vom Probanden durchlaufen werden!
Vielen Dank

1 Answer

0 votes
by SoSci Survey (327k points)

Die Funktionen loopPage() und setPageOrder() vertragen sich nicht. In Ihrem Fall hebt das loopPage() das vorherige setPageOrder()auf.

In Ihrem Fall müssten Sie wohl abhängig von der gewählten Reihenfolge (es gibt ja nur 6 Möglichkeiten) nach jedem Block mittels Filter und goToPage() zum passenden Block springen.

Dass die Frage doppelt angezeigt werden, hängt mit folgender Zeile zusammen:

shuffle($versionA);

Hier mischen Sie das (von Ihnen ja bereits gemischte) Array noch einmal. Und zwar jedes Mal, wenn Sie die Seite erneut anzeigen. Das heißt, es wird effektiv immer irgend eine der Fragen mit (!) Zurücklegen gezeigt.

Wenn ich Ihren Test korrekt verstehe, möchten Sie ohnehin nur eine von zwei Zufallsabfolgen (A oder B). Das heißt, das shuffle() könnte weg. Wenn Sie mischen möchten (unterscheiden sich $versionA und $veresionB inhaltlich?), dann sollten Sie die Version unbedingt per Urne ziehen und das shuffle() mit einem registerVariable() und einem isset() kombinieren. Und vielleicht sollten Sie das Ganze erledigen, bevor Sie mittels loppPage() die Fragen anzeigen.

Und last but not least: Ein Zufallsgenerator ist m.E. einem random() unbedingt vorzuziehen. Unterschiedliche große Versuchsgruppen sind fast immer ein Problem.

by s083193 (110 points)
Erstmal vielen Dank, für die ausführliche Antwort, leider hab ich grad das Gefühl, dass ich den Wald vor lauter Bäumen nicht seh... Also ja ich habe 2 Gruppen die nun zufällig mit dem Zufallsgenerator bestimmt werden. Gruppe A bekommt andere Fragen als Gruppe B.

1. Wie genau definiere ich die Urnen:
 - Ich habe nun 2 Urnen (gruppe A und gruppe B), mit jeweils 6 Zeilen (Möglichkeiten)
AudA ,SemA ,VisA
AudA,VisA ,SemA ....
AudB ,SemB ,VisB
AudB,VisB ,SemB ....

2. Ebenfalls habe ich 2 Interne Variablen mit Gruppe A /B
XX02 (XX02_01= Aud; XX02_02= Vis; XXO2_03= Sem

Hier bin ich mir sehr unsicher? Oder muss mal alle Fragenkombinationen in der Urne/Internen angeben??? Das wären bei mir viel zu groß.

3. Nun habe ich folgenden Code verwendet:

if (value('ZG01') == 1) {
  urnDraw('gruppe_a', 'XX02');
} else if (value('ZG01') == 2) {
  urnDraw('gruppe_b', 'XX04');
}
$z = value('ZG01');
if ($z == 1) {
if (!isset($SeitenA))
// Liste der Seiten definieren
$seitenA = array('AudA','SemA','VisA');
// Liste mischen
shuffle($seitenA);
// Die Seite ergänzen, wo es nachher weiter geht
$seiten1[] = 'EINTRO';
// Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
registerVariable('seitenA');
}
if ($z == 2) {
if (!isset($SeitenB))
// Liste der Seiten definieren
$seitenB = array('AudB','SemB','VisB');
// Liste mischen
shuffle($seitenB);
// Die Seite ergänzen, wo es nachher weiter geht
$seiten1[] = 'EINTRO';
// Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
registerVariable('seitenB');
}

Und folgend auf der Seite AudA, dann:

$AudA = array('T101','T103','T181','T108','T109','T111',
'T116','T119','T120','T122','T125','T127','T128','T130','T135','T134','T136',
'T138','T141','T143','T144','T146','T151','T150','T152','T154','T174','T159','T161','T162',
'T164','T166','T169','T172','T265','T262','T267','T264','T257','T253','T259',
'T255','T250','T252','T245','T247','T242','T244','T209','T211','T204','T206',
'T219','T217','T212','T214','T224','T202','T220','T222','T226','T228','T229','T231',
'T234','T236','T237','T239');

if (value('ZG01') == 1) {
    
    debug('AudA');
    $i = loopPage(count($AudA));
    question($AudA[$i]);}
elseif (value('ZG01') == 1) {
  goToPage('SemA');  }
elseif (value('ZG01') == 1) {
  goToPage('VisA');  }

Das Problem bleibt leider, die Blöcke werden nicht randomisiert und die einzelnen Fragen auf den Seiten auch nicht ( wenn ich auf der entsprechenden Seite den Befehl shuffle gebe, werden die Fragen wieder mehrfach angezeigt).

Tut mie leid, für die lange Leitung und schonmal Danke für die Hilfe!!
by SoSci Survey (327k points)
ad 1) Sie benötigen nur einen Zufallsgenerator mit 2 Zetteln - die Urne ersetzt nur das random(). Einen zweiten Zufallsgenerator können Sie verwenden, um die 6 Möglichkeiten der Blockabfolge abzubilden. Oder - wenn Sie es perfekt machen möchten - können Sie auch statt der zwei Zufallsgeneratoren eine (!) Urne anlegen mit 12 Zetteln, die jeweils 2 Zahlen enthalten (1/1, 1/2, ... 1/6, 2/1, 2/2 ... 2/6). Dafür brauchen Sie dann 2 interne Variablen.

ad 2) Die interne Variable fällt weg, wenn Sie mit einer Urne arbeiten. Nur falls Sie die spätere Rotation aufzeichnen möchten, brauchen Sie noch eine interne Variable.

ad 3) das goToPage() muss auf die Seite nach (!) dem loopPage(), sonst wird zu früh gesprungen. Evtl. fügen Sie einfach nach jedem der drei Blöcke einfach eine goToPage()-Seite ein.

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

...