0 votes
in SoSci Survey (dt.) by s153023 (140 points)

Hi!

Ich möchte meinen Versuchspersonen insgesamt fünf Fragebögen (PB, SDO, SX, Aut, Fem) in zufälliger Reihenfolge präsentieren. Hierfür habe ich einen Zufallsgenerator angelegt und auch den entsprechenden PHP-Code auf der Seite vor der Randomisierung platziert. Von diesen Fragebögen ziehen sich manche über mehrere Seiten. Bei SDO und SXO habe ich einen PHP-Code erstellt, der die Items beider Fragebögen über mehrere Seiten shuffelt, daher habe ich für diese beiden Fragebögen jeweils nur eine Seite angeben. Bei PB ziehen sich die Fragen auch über mehrere Seiten, da ist aber die Abfolge der Blöcke vorgegeben.

Mein Problem ist, dass mir manchmal bestimmte Fragebögen (z. B. PB) gar nicht erst angezeigt werden und andere wiederum doppelt (zu Beginn sieht es laut Debug ja alles noch richtig aus)! Obwohl ich angegeben hatte, dass 5 Zettel gezogen werden sollen, wurden mir eben 6 Instrumente angezeigt (von denen zwei doppelt). Eine Fehlermeldung bekomme ich nicht.

Es gab zur Rotation verbundener Seiten zwar schon einen Post, allerdings schien mir das Problem da ein anderes zu sein und die Lösung des Problems stand da leider auch nicht.

Ich wäre serh dankbar, wenn jemand eine Idee hat, woran es liegen könnte.

VG

1 Answer

0 votes
by SoSci Survey (330k points)

Bei SDO und SXO habe ich einen PHP-Code erstellt, der die Items beider Fragebögen über mehrere Seiten shuffelt

Ich lese aus Ihrer Beschreibung, dass Sie im Fragebogen sowohl loopPage() als auch setPageOrder() verwenden. Diese beiden Funktionen darf man nicht mischen, heißt: Sobald Sie eine davon (oder auch setNextPage() oder loopToPage()) aufrufen, wird eine vorher definierte Seitenabfolge überschrieben und damit deaktiviert. Deshalb das beobachtete Verhalten.

Eine triviale Lösung habe ich nicht im Angebot, aber zumindest Workarounds: Sie können entweder den Teil mit loopPage() in einen separaten Fragebogen auslagern und dort mittels mulziLevelDown() hin springen. Oder Sie können im Zufallsgenerator angeben, dass die Seite z.B. 5-mal wiederholt weden soll ...

1 = PB01-PB06
2 = SDO,SDO,SDO,SDO,SDO
3 = SX,SX,SX,SX,SX
4 = Aut
5 = Fem

... und dann auf der Seite folgendes machen:

if (!isset($offsetSDO)) {
    $offsetSDO = loopIndex();
    registerVariable($offsetSDO);
}
$i = loopIndex() -  $offsetSDO;

Das würde in dem Fall folgenden Code ersetzen:

$i = loopPage(5);
by s153023 (140 points)
Hi!

Viele Dank für die schnelle Rückmledung!

Ah, das wusste ich nicht, dass man die Funktionen "loopPage()" und "setPageOrder()" nicht kombinieren darf.

Ich könnte bei SDO und SX ja eigentlich genau so verfahren, wie bei PB01-PB06 und die Items der Fragebögen auf mehreren Seiten verteilen. Allerdings sind die Items dann nur auf der jeweiligen Seite gemischt und nicht für SDO bzw. SX gesamt, richtig?

Viele Grüße und danke noch mal!
by SoSci Survey (330k points)
> Allerdings sind die Items dann nur auf der jeweiligen Seite gemischt und nicht für SDO bzw. SX gesamt, richtig?

Genau ... deshalb der Workaround mit dem 6-fachen wiederholen der Seite.
by s153023 (140 points)
Mir kam gerade noch eine andere Idee, die ich in einem anderen Projekt mal benutzt hatte. Ich könnte die Items auch als einzelne Fragen umwandeln (SD01-SD22) und dann über eine bestimmte Anzahl von Seiten shuffeln - oder würde sich das auch nicht mit setpageorder vertragen?


// PHP-Code auf Seite 1
 
// Teil 1: Erstellen und mischen der Liste - nur einmalig ausführen
if (!isset($fragen1)) {
  // Liste der Frage-Kennungen erstellen
  $fragen1 = array(
    'SD01',  'SD02',
    'SD03',  ...,  
  );
  // Die Liste zufällig mischen
  shuffle($fragen1);
  // Die Listen auf allen Seiten verfügbar machen
  registerVariable($fragen1);
}
 
// Teil 2a
// Die ersten drei Kennungen der Liste anzeigen
question($fragen1[0]);
by SoSci Survey (330k points)
Möglich ... aber warum verwenden Sie nicht Ihren bisherigen Code und ersetzen einfach nur das loopPage() wie oben beschrieben? Das scheint mir einfacher.
by s153023 (140 points)
Ich habe den PHP-Code für die SDO-Variable wie untenstehend geändert (kurze Anmerkung: die Kennung der Variable ist SD). Allerdings werden auf den entsprechenden Seiten die Items nicht mehr angezeigt.



// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsSD01)) {
  // Alle Items der Frage SD01 auflisten
  $itemsSD01 = getItems('SD01', 'all');
  // Liste Mischen
  shuffle($itemsSD01);
  // Die Liste in Teillisten à 8 Items teilen
  $itemsSD01 = array_chunk($itemsSD01, 8);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable($itemsSD01);
}
 
// Die Items über mehrere Seiten verteilt anzeigen
if (!isset($offsetSD)) {
    $offsetSD = loopIndex();
    registerVariable($offsetSD);
}
$i = loopIndex() -  $offsetSD;
by SoSci Survey (330k points)
Sie haben hier noch keinen Code zur Anzeige der Items gepostet. Was kommt denn unterhalb von der Zeile mit loopIndex() noch? Ich würde dort etwas erwarten wie z.B.

$subset = $itemsSD01[$i];
question('SD01', $subset);
by s153023 (140 points)
Das erklärt dann wohl, warum keine Items angezeigt werden, denn nach dem, was ich heir gepostet hatte, kommt kein weiterer 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

...