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

Hallo!

In meiner Umfrage sollen Teilnehmer*innen in eine von vier Experimentalgruppen zufällig zugeteilt werden. Diese Randomisierung habe ich mithilfe des Zufallsgenerators umgesetzt (Z001). (1= Kontrollgruppe, 2 = Treatmentgruppe 1, 3 = Treatmentgruppe 2, 4 = Treatmentgruppe 3).

Teilnehmerinnen der Gruppe 2 sollen den Text ("G001") und anschließend Fragen ("G002" & "G003") aus der Rubrik "GXXX" erhalten.
Teilnehmer
innen der Gruppe 3 sollen den Text ("H001") und anschließend Fragen ("H002" & "H003") aus der Rubrik "HXXX" angezeigt bekommen.
Teilnehmer*innen der Gruppe 4 angehören, sollen die Texte ("G001" & "H001") und die Fragen ("G002", "G003", "H002" & "H003" ) aus den Rubriken "GXXX" & "HXXX" erhalten.

Wenn eine der Fragen ("G002", "G003", "H002" & "H003" ) falsch beantwortet wird, sollen die Teilnehmer*innen die Möglichkeit haben, die falsch beantwortete(n) Frage(n) erneut zu beantworten ("G004", "G005", "H004", "H005" ). Wird die Frage ein zweites Mal falsch beantwortet, soll der/die Teilnehmer/in aus der Studie ausgeschlossen werden und den Text ("X003") angezeigt bekommen.

Bevor ich den Zufallsgenerator integriert habe, konnte ich diese Logik mithilfe des einfachen Fragefilters realisieren. Durch die Einteilung in die Gruppen funktioniert der Filter nicht mehr, weswegen ich mit php-Code versucht habe die Filterung vorzunehmen.

Hier ist mein aktueller php-Code:
Seite 1: Zufallsgenerator ("Z001") und php-Code

if (value('Z001') == 2) {
  text('G001');
} elseif (value('Z001') == 3) {
  text('H001');
} elseif (value('Z001') == 4) {
  text('G001');
  text('H001');
}

Seite 2: php-Code (für Gruppe 2 und 4)

if ((value('Z001') == 2) or (value('Z001') == 4)) {
  question('G002');
  question('G003');
}

Seite 3: php-Code (für Gruppe 2 - Gruppe 4 soll nachträglich hinzugefügt werden)

if ((value('Z001') == 2) and 
    (value('G002') == 3) and
    (value('G003') == 3)) {
    goToPage('Spaghetti');
} elseif ((value('Z001') == 2) and
          (value('G002') != 3) and 
          (value('G003') != 3)){
    question('G004');
    question('G005'); 
} elseif ((value('Z001') == 2) and
          (value('G002') != 3)){
    question('G004');   
} elseif ((value('Z001') == 2) and
          (value('G003') != 3)){
    question('G005');   
}

Seite 4: php-Code (für Gruppe 2 - Gruppe 4 soll nachträglich hinzugefügt werden)

if ((value('Z001') == 2) and 
    (value('G004') == 3) and
    (value('G005') == 3)) {
    goToPage('Spaghetti');
} elseif ((value('Z001') == 2) and
          (value('G004') != 3) and 
          (value('G005') != 3)){
    text('X003');
} elseif ((value('Z001') == 2) and
          (value('G004') != 3)){
    text('X003');   
} elseif ((value('Z001') == 2) and
          (value('G005') != 3)){
    text('X003');   
}

Der gleiche Code soll für Gruppe 3 angewandt werden.
Die richtige Antwort ist immer Antwort 3!

Dieser php-code funktioniert, wenn beide Fragen falsch oder beide Fragen richtig beantwortet werden. Sobald jedoch eine Frage richtig und eine Frage falsch beantwortet wird, erhalte ich folgende Fehlermeldung: "Die Variable G005 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.".
Diese Fehlermeldung erhalte ich, da die richtig beantwortete Frage nicht auf der nächsten Seite angezeigt wird, da nur die falsch beantwortete Frage wiederholt werden soll.
Ich hatte bereits versucht die Fragen für den 2. Versuch ("G004", "G005", "H004", "H005" ) als "optionale Fragen" einzustellen, jedoch erhalte ich trotzdem die selbe Fehlermeldung .

Vielen Dank im Voraus für die Hilfe!

1 Answer

0 votes
by SoSci Survey (330k points)

Dieser php-code funktioniert, wenn beide Fragen falsch oder beide Fragen richtig beantwortet werden.

Das liegt an Ihrer Fomulierung der Filter:

} elseif ((value('Z001') == 2) and
          (value('G002') != 3) and 
          (value('G003') != 3)
){
    question('G004');
    question('G005'); 
}

Das bedeutet, wenn die Gruppe 2 ist und zugleich die Frage G002 als Antwort nicht 2 hat und zugleich (and) die Antwort auf G003 nicht 3 ist, dann zeige die fragen G004 und G005.

Wenn es Ihnen reicht, dass eine Frage falsch beantwortet ist, bräuchten sie ein "or" und eine Klammer mehr:

} elseif ((value('Z001') == 2) and
          (
              (value('G002') != 3) or
              (value('G003') != 3)
          )
){
    question('G004');
    question('G005'); 
}

Ich würde aber empfehlen, dass Sie die Filter verschachteln, dann bleibt es übersichtlicher:

if (value('Z001') == 2) {
    // Alles for Gruppe 2
    if (
        (value('G002') == 3) and
        (value('G003') == 3)
    ) {
        goToPage('Spaghetti');
    } else {
        question('G004');
        question('G005'); 
    }
}

Sie könnten im Prinzip auch nur die Frage erneut anzeigen, die falsch beantwortet wurde - falls das gewünscht wäre. Ob das goToPage() sinnvoll ist oder gar nicht notwendig wäre, das kann ich auf Basis der vorliegenden Informationen nicht beurteilen.

by s296461 (110 points)
Vielen Dank für die Hilfe!
Leider konnte mein Problem damit noch nicht zu 100% gelöst werden...
Ich habe den php-Code nun wie oben beschrieben angepasst, jedoch wird mir dann die richtig beantwortete Frage auf der 2. Seiten erneut angezeigt. Das ist nicht gewünscht.

Hintergrund:
'G004' ist die gleiche Frage wie 'G002'  (mit ergänzendem Hinweis: "Leider falsch. Versuchen Sie es erneut.")
'G005' ist die gleiche Frage wie 'G003'  (mit ergänzendem Hinweis: "Leider falsch. Versuchen Sie es erneut.")

Das heißt wenn bspw. 'G003' falsch beantwortet wurde und 'G002' richtig, soll 'G004' nicht auf der nächsten Seite angezeigt werden sondern nur 'G005'.

Haben Sie eine Idee wie dies behoben werden kann?

Nochmal vielen Dank!!
by SoSci Survey (330k points)
> jedoch wird mir dann die richtig beantwortete Frage auf der 2. Seiten erneut angezeigt. Das ist nicht gewünscht.

Wie oben schon geschrieben ... man kann den Code auch so anpassen, dass nur die falsch beantwortete Frage angezeigt wird. Für die Formulierung des Codes wäre aber die Frage zu klären, ob Sie das goToPage() brauchen oder nicht?
by s296461 (110 points)
Oh super, danke!

Als Hintergrund:
Die Seite "Spaghetti" ist die erste Seite des neuen Frageblocks und soll allen vier Experimentalgruppen angezeigt werden.
Der erste Frageblock besteht demnach aus den Kontrollfragen ("G002", "G003" und/oder "H002", "H003" ) und wenn diese (ggf. mit 2. Versuch) richtig beantwortet wurden, soll der Teilnehmer die Seite "Spaghetti" als erstes angezeigt bekommen.

Ich vermute der Befehl "goToPage()" ist demnach nicht dringend notwendig, wenn die Filterung korrekt funktioniert. Jedoch weiß ich nicht, wie ich der Code dann aussehen müsste...

Zur Verdeutlichung noch einmal die Reihenfolge Seiten:
Seite 1: Zufallsgenerator
Seite 2: Infotext für Gruppe 2 und Gruppe 4
Seite 3: Kontrollfragen 1. Versuch für Gruppe 2 und Gruppe 4
Seite 4: Kontrollfragen 2. Versuch für Gruppe 2 und Gruppe 4
Seite 5: Infotext für Gruppe 3 und Gruppe 4
Seite 6: Kontrollfragen 1. Versuch für Gruppe 3 und Gruppe 4
Seite 7: Kontrollfragen 2. Versuch für Gruppe 3 und Gruppe 4
Seite 8: Spaghetti - Gruppe 1 bis 4

Danke für Ihre Zeit & Unterstützung!
by SoSci Survey (330k points)
> Ich vermute der Befehl "goToPage()" ist demnach nicht dringend notwendig

Gut, denn ohne diesen wird es deutlich einfacher.

Allerdings würde ich dann empfehlen, dss Sie die Fragen auch nicht auf 2-mal 3 Seiten verteilen, sondern alle Infotexte für alle Gruppen auf Seite 2 packen und alle Fragen auf Seite 3/4. Im verschachtelten IF-Filter können Sie die 4 Gruppen j recht einfach untereinander stellen. Hier wäre dann der passende Teil für Gruppe 2 für den zweiten Versuch der Kontrollfrage.

if (value('Z001') == 2) {
    // Alles for Gruppe 2
    if (value('G002') != 3) {
        question('G004');
    }
    if (value('G003') != 3) {
        question('G005');
    }
}
by s296461 (110 points)
Ich habe den Code nun einmal für Gruppe 2 ausprobiert.
Leider funktioniert es noch immer nicht wie gewollt... ich fasse die Szenarien inkl. Fehlermeldung nochmal zusammen:

Szenario 1 - beide Fragen werden beim 1. Versuch richtig beantwortet:
Ich werde zur Endseite (text('X003') weitergeleitet, die eigentlich nur angezeigt werden sollte wenn wiederholt die Frage falsch beantwortet wurde.
Fehlermeldung: 'Warnung - Die Variable G004 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.'

Szenario 2 - eine Frage richtig & eine Frage falsch beantwortet:
Die falsch beantwortete Frage wird mir auf der 2. Seite korrekt angezeigt. Wenn ich diese dann aber richtig beantworte, wird mir trotzdem die Endseite (text('X003')) angezeigt.
Fehlermeldung: 'Warnung - Die Variable G005 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.'

Szenario 3 - beide Fragen falsch beantwortet:
Beide Fragen werden korrekt auf Seite 2 angezeigt.
Wenn ich beide Fragen beim 2. Versuch korrekt beantworte, kann ich wie gewollt den Fragebogen weiter ausfüllen.
Sobald ich eine Frage falsch beantworte, werde ich wie gewollt zur Endseite (text('X003')) weitergeleitet.

Hier der php-Code den ich für Seite 3 & 4 verwendet habe.
Seite 3:
if (value('Z001') == 2) {
    // Gruppe 2
    if (value('G002') != 3) {
        question('G004');
    }
    if (value('G003') != 3) {
        question('G005');
    }
}

Seite 4:
if (value('Z001') == 2) {
    // Gruppe 2
    if (value('G004') != 3) {
        text('X003');
    }
    if (value('G005') != 3) {
        text('X003');
    }
}

Ich habe deshalb folgenden php-Code nochmal ausprobiert mit folgenden Outcomes:
Seite 3:
if (value('Z001') == 2) {
    // Gruppe 2
    if (value('G002') != 3) {
        question('G004');
    }
    if (value('G003') != 3) {
        question('G005');
    }
    if ((value('G002') == 3) and
       (value('G003') == 3)) {
        goToPage('Spaghetti');
    }
}

Seite 4:
if (value('Z001') == 2) {
    // Gruppe 2
    if (value('G004') != 3) {
        text('X003');
    }
    if (value('G005') != 3) {
        text('X003');
    }
    if ((value('G004') == 3) and
       (value('G005') == 3)) {
        goToPage('Spaghetti');
    }
}

Szenario 1 - beide Fragen werden beim 1. Versuch richtig beantwortet:
Ich kann wie gewollt den Fragebogen weiter ausfüllen.

Szenario 2 - eine Frage richtig & eine Frage falsch beantwortet:
Die falsch beantwortete Frage wird auf der 2. Seite angezeigt.
Wenn ich diese richtig beantworte, wird mir trotzdem die Endseite angezeigt.
Fehlermeldung: 'Warnung - Die Variable G004 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.'

Szenario 3 - beide falsch beantwortet:
Hier werden beide falsch beantwortete Fragen auf der 2. Seite angezeigt.
Wenn ich beide Fragen richtig beantworte, kann ich den Fragebogen wie gewollt weiter ausfüllen.

Ich habe auch versucht wie von Ihnen beschrieben die Fragen für Gruppe 2 und 3 auf eine Seite zu kombinieren, jedoch hat dies neue Probleme verursacht.

Nochmal danke! Ich hoffe ich konnte das Problem verständlich darstellen.
by SoSci Survey (330k points)
> Szenario 1 - beide Fragen werden beim 1. Versuch richtig beantwortet:
> Ich werde zur Endseite (text('X003') weitergeleitet, die eigentlich nur angezeigt werden sollte wenn wiederholt die Frage falsch beantwortet wurde.

Zu Szenario 1 sehe ich keinen PHP-Code und Sie haben auch keine Debug-Information gepostet, daher kann ich dazu nichts dagen.

>  Wenn ich diese dann aber richtig beantworte, wird mir trotzdem die Endseite (text('X003')) angezeigt.

Was sagt denn der PHP-Code dazu? Haben Sie X003 zufällig noch auf eine Seite gezogen? In Ihrem Code nur text('X003') anzuzeigen, scheint mir wenig sinnvoll, wenn Sie nicht zusätzlich noch ein pageStop() einbauen.

> Die Variable G004 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt

Welche Antworten in welche Variablen gespeichert werden, sehen Sie nach dem Klick auf "Weiter" ebenfalls in der Debug-Information.
by s296461 (110 points)
Vielen Dank nochmal für Ihre Rückmeldung.

> Was sagt denn der PHP-Code dazu? Haben Sie X003 zufällig noch auf eine Seite gezogen?
Ich habe X003 nicht auf die Seite gezogen, daher wundert mich das auch.

> In Ihrem Code nur text('X003') anzuzeigen, scheint mir wenig sinnvoll, wenn Sie nicht zusätzlich noch ein pageStop() einbauen.
Ich habe den Code nochmals für alle Gruppen angepasst und auch den pageStop() eingebaut. Seit dem kommt Szenario 1 wie in der letzten Nachricht beschrieben auch nicht mehr vor.

Ich fasse hier nochmal alle relevanten Informationen zusammen, inklusive php-code und Debug-Information.

FRAGEBOGEN
Seite 1: Randomisierung
Zufallsgenerator Z001
php-Code:
if ((value('Z001') == 2) or (value('Z001') == 4)) {
  text('G001');
}
if (value('Z001') == 3) {
  goToPage('Info');
}

Seite 2: Infotext Gruppe 2 & 4
if ((value('Z001') == 2) or (value('Z001') == 4)) {
  question('G002');
  question('G003');
}

Seite 3: 1. Versuch Gruppe 2 & 4
if (value('Z001') == 2) {
    // Gruppe 2
    if (value('G002') != 3) {
        question('G004');
    }
    if (value('G003') != 3) {
        question('G005');
    }
    if ((value('G002') == 3) and
       (value('G003') == 3)) {
        goToPage('Spaghetti');
    }
}
if (value('Z001') == 4) {
    // Gruppe 4
    if (value('G002') != 3) {
        question('G004');
    }
    if (value('G003') != 3) {
        question('G005');
    }
    if ((value('G002') == 3) and
       (value('G003') == 3)) {
        goToPage('Info');        // Seite 5
    }
}

Seite 4: 2. Versuch Gruppe 2 & 4
if (value('Z001') == 2) {
    // Gruppe 2
    if ((value('G004') == 3) and
       (value('G005') == 3)) {
        goToPage('Spaghetti');
    }
    if (value('G004') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
    if (value('G005') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
}
if (value('Z001') == 4) {
    // Gruppe 4
    if ((value('G004') == 3) and
       (value('G005') == 3)) {
        goToPage('Info');
    }
    if (value('G004') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
    if (value('G005') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
}

Seite 5: Gruppe 3 & 4
if ((value('Z001') == 3) or (value('Z001') == 4)) {
  text('H001');
}

Seite 6: Infotext Gruppe 3 & 4
if ((value('Z001') == 3) or (value('Z001') == 4)) {
  question('H002');
  question('H003');
}

Seite 7: 1. Versuch Gruppe 3 & 4
if ((value('Z001') == 3) or (value('Z001') == 4)) {
    // Gruppe 3
    if ((value('H002') == 3) and
       (value('H003') == 3)) {
        goToPage('Spaghetti');
    }
    if (value('H002') != 3) {
        question('H004');
    }
    if (value('H003') != 3) {
        question('H005');
    }
    if ((value('H002') == 3) and
       (value('H003') == 3)) {
        goToPage('Spaghetti');
    }
}

Seite 8: 2. Versuch Gruppe 3 & 4
if ((value('Z001') == 3) or (value('Z001') == 4)) {
    // Gruppe 3 & 4
    if ((value('H004') == 3) and
       (value('H005') == 3)) {
        goToPage('Spaghetti');
    }
    if (value('H004') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
    if (value('H005') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
}

Szenario 1 - beide Fragen werden beim 1. Versuch richtig beantwortet:
kein Fehler - Funktioniert jetzt bei allen Gruppen!

Szenario 2 - eine Frage richtig & eine Frage falsch beantwortet:
a) beim 2. Versuch wird die Frage richtig beantwortet
Fehler - Ich werde zur Endseite X003 weitergeleitet, obwohl die Frage beim 2. Versuch richtig beantwortet wurde.
Fehlermeldung:
Die Variable H005 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Debug-Information:
[Information]    Interview Nummer 483 wird fortgesetzt
[Information]    Der Fragebogen test im Projekt MA_duallabelling wird verwendet
[Information]    Die Verweildauer auf Seite 14 war 2 Sekunden
[Verarbeitung]    Lese Antworten von Seite 14
[Information]    Antwort auf H004 = 3
[Information]    Bedingung in Filter H004/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 15 in Fragebogen test
[Information]    value("Z001") = 3
[Information]    value("H004") = 3
[Information]    value("H005") = ???
[Information]    value("H004") = 3
[Information]    value("H005") = ???
[Inhalt]    Zeige Text X003
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet

b) beim 2. Versuch wird die Frage falsch beantwortet
Kein Fehler - die Endseite X003 wird angezeigt
Fehlermeldung:
Die Variable G004 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Debug-Information:
[Information]    Interview Nummer 495 wird fortgesetzt
[Information]    Der Fragebogen test im Projekt MA_duallabelling wird verwendet
[Information]    Die Verweildauer auf Seite 10 war 1 Sekunden
[Verarbeitung]    Lese Antworten von Seite 10
[Information]    Antwort auf G005 = 1
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 11 in Fragebogen test
[Information]    value("Z001") = 4
[Information]    value("Z001") = 4
[Information]    value("G004") = ???
[Information]    value("G004") = ???
[Inhalt]    Zeige Text X003
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet

Szenario 3 - beide Fragen werden beim 1. Versuch falsch beantwortet:
a) beim 2. Versuch werden die Fragen richtig beantwortet
kein Fehler

b) beim 2. Versuch werden die Fragen falsch beantwortet
kein Fehler - die Endseite X003 wird angezeigt

Ich hoffe Sie haben alle Informationen, um mir bei meiner Problemstellung weiterhelfen zu können.

Vielen Dank für Ihre Hilfe!
by SoSci Survey (330k points)
Danke, jetzt ergibt das ganze mehr Sinn :)

> Die Variable H005 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

Das Problem ist, dass die Frage H005 ja gar nicht angezeigt wurde, weil die zweite frage ja bereits korrekt beantwortet war. Sie müssten den Filter

    if (value('H004') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }
    if (value('H005') != 3) {
        text('X003');
        buttonHide();
        pageStop();
    }

daher bitte ändern in

    if ((value('H002') != 3) && (value('H004') != 3)) {
        text('X003');
        buttonHide();
        pageStop();
    }
    if ((value('H003') != 3) && (value('H005') != 3)) {
        text('X003');
        buttonHide();
        pageStop();
    }
by s296461 (110 points)
Viiielen herzlichen Dank!
Das war der Fehler, 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

...