0 votes
in SoSci Survey (dt.) by s077420 (150 points)
edited by s077420

Hallo liebes SoSci Survey Team,
für meine Studie habe ich folgendes Design vorgesehen und komme gerade nicht weiter, wie ich das mit PHP-Code programmieren kann:
Die Teilnehmer sollen zufällig einer von zwei Bedingungen zugeteilt werden, in beiden Bedingungen bekommen sie aber die gleichen 21 Bilder in randomisierter Reihenfolge zu sehen. Auf jeder Seite soll jeweils ein Bild präsentiert werden und je zwei Fragen, wobei eine Frage in beiden Bedingungen gleich ist und die andere Frage unterschiedlich ist je nach Bedingung. Zusätzlich sollten die beiden Fragen auf jeder Seite in zufälliger Reihenfolge präsentiert werden, damit nicht immer die gleiche Frage zuerst kommt.

Bisher habe ich einen Zufallsgenerator für die zwei Bedingungen erstellt (1 = Read, 2 = Reply) mit der Einstellung 1 Zettel wird pro Interview gezogen und Gleichverteilte Ziehen (Ziehen ohne Zurücklegen). Ist das soweit richtig?

Unterhalb des Zufallsgenerators habe ich folgenden Code, der funktioniert auch, aber ist momentan nur für einw einzelne Seite und ohne die Randomisierungen. Ich hatte überlegt als nächstes shuffle und loopPage zu ergänzen, bin mir aber nicht sicher, ob das richtig ist und wie genau ich die zwei Randomisierungen implementieren kann, also dass die 21 Bilder in zufälliger Reihenfolge kommen und die zwei Fragen je Seite auch in randomisierter Reihenfolge erscheinen.

      if (value('GR01') == 1) {
    
    $i = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21',);
    
    shuffle($i);
    
    // hier alle items 1 - 21 auflisten
    
    # Item1
    $item1q = array('RE'.$i[0], 'LI'.$i[0]);
    shuffle($item1q);
    $item1 = array('IT'.$i[0], $item1q[0], $item1q[1]);
    
    # Item2
    $item2q = array('RE'.$i[1], 'LI'.$i[1]);
    shuffle($item2q);
    $item2 = array('IT'.$i[1], $item2q[0], $item2q[1]);

    # usw bis Item 21

// Reply Bedingung
} elseif (value('GR01') == 2) {

    // nochmal array und shuffle
    $i = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21',);
    
    shuffle($i);
    
    // hier nochmal alle items 1 - 21 auflisten mit reply Frage
    
    
    # Item1
    $item1q = array('RP'.$i[0], 'LI'.$i[0]);
    shuffle($item1q);
    $item1 = array('IT'.$i[0], $item1q[0],$item1q[1]);
    
    # Item2
    $item2q = array('RP'.$i[1], 'LI'.$i[1]);
    shuffle($item2q);
    $item2 = array('IT'.$i[1], $item2q[0],$item2q[1]);

    # usw bis Item 21
   

   # Attention Check = Item 22, Index 21
$item22q  = array('RE22', 'LI22');
shuffle($item22q);
$item22 = array('IT.$i[21], $item22q[0], $item22q[1]);
    
    // Liste der Fragen erstellen
    if (!isset($fragen)) {
      // Liste der Frage-Kennungen definieren
      $fragen = [
    $item1,
    $item2,
    ...
    $item21
      ];

    
       // Attention Check an fester Position in der Mitte plazieren

array_splice($fragen, 10, 0, $item22);  // attention check an Index 10 einfügen
// Die Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
  registerVariable($fragen);

}
    
    // Teil 2: Fragen getrennt auf seperaten Seiten anzeigen
    $a = loopPage(count($fragen));
    question($fragen[$a][0]);
    question($fragen[$a][1]);
    question($fragen[$a][2]);

1 Answer

0 votes
by SoSci Survey (312k points)

in beiden Bedingungen bekommen sie aber die gleichen 21 Bilder in randomisierter Reihenfolge zu sehen

Gut, dann hat das mit der Bedingung schonmal nichts zu tun. Kümmern wir uns mal darum, was sich ändert:

und die andere Frage unterschiedlich ist je nach Bedingung.

BNur am Rande: Wenn Sie die Frage 21-mal abfragen, können Sie entweder 21 Kopien anlegen oder - wenn es nur ein Item z.B. einer Skala ist - können Sie eine Frage mit 21 Items anlegen und jeweils eines zeigen.

Ist das soweit richtig?

Der Zufallsgenerator sollte passen. Ich entnehmen Ihrem Code, dass er die Kennung GR01 hat.

Unterhalb des Zufallsgenerators habe ich folgenden Code, der funktioniert auch, aber ist momentan nur für einw einzelne Seite und ohne die Randomisierungen.

Wenn Sie für die 21 Bilder wirklich 21 Seiten angelegt haben (die Alternative wäre loopPage()), dann brauchen Sie auch 21-mal PHP-Code, richtig.

wie genau ich die zwei Randomisierungen implementieren kann, also dass die 21 Bilder in zufälliger Reihenfolge kommen und die zwei Fragen je Seite auch in randomisierter Reihenfolge erscheinen.

Im Prinzip so wie in der Anleitung Fragen zusammen mit weiterem Inhalt rotieren erklärt. Sie müssen nur bei der Frage noch zusammenbauen, dass z.B: die Rubrik je nach Zufallsbedingung variiert wird.

Das geht z.B. so, dass Sie statt "AB01" in dem Array (s. Anleitung) nur "01" hinterlegen. Und dann für die Anzeige der fixen Frage:

$questionNum = $blocks[$i][0];
question('FX'.$questionNum);

Der Punkt fügt in PHP zwei Strings (also hier "FX" und "01") zusammen - ein wenig un-intuitiv.

Und dann zur Anzeige der variierten Frage:

if (value('GR01') == 1) {
    question('RQ'.$questionNum);
} else {
    question('RS'.$questionNum);
}

Ihre Fragen müssten, damit es so einfach geht, natürlich parallelisiert in RQ und RS liegen. Alternativ könnten Sie im Array auch jeweils drei Fragekennungen hinterlegen und mittels PHP-Code dann zwei der Fragen zeigen. Also wieder die fixe und eine der beiden variablen.

by s077420 (150 points)
Vielen, vielen Dank für die Antwort!
Der Code für die Randomisierungen funktioniert jetzt!

Das einzige, was noch nicht funktioniert ist der Attention Check, den ich gerne in beiden Bedingungen an einer festen Position in der Mitte präsentieren würde. Ich habe es (wie in einer meiner Vorstudie) mit array splice probiert, aber es kommt folgende Fehlermeldung:

Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

    Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
    ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
    im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
    Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.

PHP-Code

284 $a = loopPage(count($fragen));
285 question($fragen[$a][0]);
286 question($fragen[$a][1]);
287 question($fragen[$a][2]);
288 return 'ok';

Die Fehlermeldung kommt aber nicht, wenn ich den attention check auskommentiere, haben Sie vielleicht eine Idee, woran das liegen könnte?
by SoSci Survey (312k points)
An dem von Ihnen zitierten Code liegt es nicht - diesen kann ich problemlos kopieren und laufen lassen. Demnach liegt das Problem wahrscheinlich weiter oben im PHP-Code.

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

...