0 votes
in SoSci Survey (dt.) by s275430 (160 points)
edited by SoSci Survey

Ich möchte einen PhP-Code in meinen Fragebogen einbauen, der TN automatisch aussortiert (also als QuotaFail zurück zum Panel-Anbieter leitet), wenn sie weniger als 2 von 4 Attention-Check-Items richtig beantworten.

Dazu habe ich folgenden PhP-Code erstellt:

> // Calculate the number of correct answers to the control items  
> $richtig = (value('PM49_01') == 4) + (value('PM50_01') == 3) +
> (value('PM51_01') == 2) + (value('KF_01_01') == 5);
>      // Check if the number of correct answers is less than 2   if ($richtig < 2) {
>     redirect('LINK');   }

Ich habe den PhP-Code auf der Seite hinter dem letzten Kontroll-Item platziert. Beim Prüfen der Funktion kommt es jedoch nicht zum Rausschmiss - selbst wenn ich alle Kontroll-Items in meinem Fragebogen falsch beantworte.
Ich habe mich nun gefragt, ob der PhP-Code an der falschen Stelle steht oder ein anderer Fehler vorliegt?

Außerdem würde ich befürchten, dass so auch TN, bei denen nach 2 Kontroll-Items schon klar ist, dass sie rausfliegen würden, den Fragebogen bis zum letzten Kontroll-Item weiter durchklicken müssen, bevor sie rausfliegen..?

Vielen Dank für die Unterstützung im Voraus,

1 Answer

0 votes
by SoSci Survey (348k points)

Ich habe den PhP-Code auf der Seite hinter dem letzten Kontroll-Item platziert.

Im Idealfall heißt "hinter" auf der nächsten Seite ... sonst wird der Code ausgeführt bevor Sie überhaupt geantwortet haben.

Beim Prüfen der Funktion kommt es jedoch nicht zum Rausschmiss - selbst wenn ich alle Kontroll-Items in meinem Fragebogen falsch beantworte.

Lassen Sie sich doch mal anzeigen, was in $richtig steht:

debug($richtig);
by s275430 (160 points)
a) ja, mit "hinter" meine ich auf der nächsten Seite
b) wie kann ich mir das $richtig denn anzeigen lassen, ohne den Fragebogen komplett durchzuklicken - ist der Wert nicht davon abhängig, was ich geantwortet habe?
by SoSci Survey (348k points)
Ja. Wenn Sie im Debug-Modus starten können Sie über die orange Zeile oben bequem die Seiten mit den Kontrollitems anspringen, diese beantworten und dann zur Seite mit dem debug() springen, um den Filter zu testen bzw. die Formel.

Achten Sie auch darauf, was in der Debug-Information angezeigt wird.
by s275430 (160 points)
Die Debug Information hilft mir leider nicht so wirklich weiter...aber aus irgendeinem Grund scheint es jetzt zu funktionieren. Danke!
by s275430 (160 points)
Ich habe hierzu doch nochmal eine Folgefrage, und zwar geht es um den Quality Check, meine Vorgabe ist "Data of participants will be excluded if they respond incorrectly to 3 of the 4 attention check items."

Das bereits oben  formulierte Problem, ist dass ich den PhP-Code zum Quality-Check erst hinter dem letzten Kontroll-Item habe, und so TN, bei denen nach dem 3. Kontroll-Item schon klar ist, dass sie rausfliegen würden, den Fragebogen trotzdem bis zum letzten Kontroll-Item weiter durchklicken müssen, bevor sie rausfliegen.

Die Herausforderung ist nun, dass ich 35 Seiten randomisiert anzeigen lasse, und darunter auch die Kontrollitems 2, 3 und 4 sind.

Gibt es eine Möglichkeit, im PhP-Code anzugeben, dass die Seite mit dem Kontroll-Item 3 und 4 jeweils mit der Seite mit dem PhP-Code, der prüft, wie viele Kontroll-Items falsch beantwortet wurden und gfls. zurück zum Panelanbieter leitet, zu verknüfen? Also dass sie bei der Randomisierung sozusagen als "Pärchen" mit dem Rest durchmischt werden?

Mein bisheriger Randomisierungs-Code sieht so aus:
"question('ZU01');  // Zettel in zufälliger Reihenfolge ziehen
$pages = valueList('ZU01', NULL, 'label');  // Gezogene Zettel auslesen
setPageOrder($pages, 'DQ');  // Seiten als Seitenabfolge definieren"

und dahinter habe ich einen Zufallsgenerator eingefügt.
by SoSci Survey (348k points)
> Data of participants will be excluded if they respond incorrectly to 3 of the 4 attention check items.

Man braucht also nur einen Zufallstreffer :-))

> Gibt es eine Möglichkeit, im PhP-Code anzugeben, dass die Seite mit dem Kontroll-Item 3 und 4 jeweils mit der Seite mit dem PhP-Code, der prüft, wie viele Kontroll-Items falsch beantwortet wurden

Dafür gibt es unten das "Antworten mittels PHP-Code verarbeiten". Dieser Code wird immer direkt nach dem Einlesen der Antworten einer Seite ausgeführt - und damit eben auch bei rotierten Items an der richtigen Stelle.

Die Herausforderung ist hier eher zu prüfen, ob überhaupt schon drei Kontrollitems beantwortet wurden. Ich würde es wie folgt machen:

$incorrect =
  (value('AB01', 'code:ifany') && (value('AB01') =! 2)) +
  (value('AB02', 'code:ifany') && (value('AB02') =! 3)) +
  (value('AB03', 'code:ifany') && (value('AB03') =! 4)) +
  (value('AB04', 'code:ifany') && (value('AB04') =! 5));

Hier würde erstmal nur getestet, ob in der Variable (exemplarisch AB01 bis AB04) schon irgend eine Antwort steht (also nicht der leere String und nicht 0). Und wenn dem so ist (das wird über den UND-Operator && erledigt) dann wird erst geprüft, ob die Antwort von der korrekten Antwort abweicht (hier exemplarisch 2 bis 5).

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

...