0 votes
in SoSci Survey (dt.) by s115627 (460 points)

Hallo,

mir ist leider erst während der Datenerhebung aufgefallen, dass es praktisch sein könnte die Reihenfolge der zufällig angezeigten Fragebogenseiten pro teilnehmender Person zu haben.

Bisher habe ich folgenden funktionierenden PHP-Code zur Rotation der Fragebogenseiten verwendet:

if (!isset($seiten)) {
$seiten = array('TR01', 'TR02', 'TR03', 'TR04', 'TR05', 'TR06', 'IN01', 'IN02', 'IN03', 'IN04', 'TV01', 'TV02', 'TV03', 'TV04', 'CD01', 'CD02', 'CD03', 'CD04', 'PE01', 'PE02');
shuffle($seiten);
$seiten[] = 'TYPINT';
 registerVariable($seiten);
}
setPageOrder($seiten);

Da die Datenerhebung wie gesagt schon läuft, möchte ich nicht groß rumprobieren müssen, deswegen meine Frage: fällt jemand ein Fehler in meinem umgeschriebenen Code nach der Anleitung unter https://www.soscisurvey.de/help/doku.php/de:create:functions:put#beispielrandomisierung_i
auf, oder sollte das so funktionieren?

if (!isset($seiten)) {
$seiten = array('TR01', 'TR02', 'TR03', 'TR04', 'TR05', 'TR06', 'IN01', 'IN02', 'IN03', 'IN04', 'TV01', 'TV02', 'TV03', 'TV04', 'CD01', 'CD02', 'CD03', 'CD04', 'PE01', 'PE02');
$indices = array_keys($seiten);
shuffle($indices);
$random = array();
for ($i=0; $i<count($indices); $i++) {
 $id = id('IV01', $indices[$i] + 1);
  put($id, $i + 1);
  $random[$i] = $pages[$indices[$i]];
 registerVariable($seiten);
}
setPageOrder($random, 'TYPINT');

Außerdem:
Muss ich die Variable IV01 irgendwo erstellen bzw. was genau bedeutet "interne Variable aus Frage-Kennung"? Wo finde ich diese bzw. wie erstelle ich diese?
Und (wenn es dann funktioniert) wie genau wird die Rangfolge im Datensatz gespeichert?

1 Answer

+1 vote
by SoSci Survey (302k points)
selected by s115627
 
Best answer

Muss ich die Variable IV01 irgendwo erstellen

Fange wir mal damit an: Ja. Und zwar brauchen Sie eine Frage vom Typ "interne Variablen". Darin müssen Sie so viele Variablen (Items) anlegen wie Sie Seiten in der Rotation haben.

Apropos "könnte ganz praktisch sein": Überlegen Sie sich gut, ob es das wert ist, die laufende Erhebung zu gefährden. Ein Restrisiko bleibt immer - und wenn Sie die Daten ohnehin nur für die Hälfte der Datensätze haben, ist der Nutzwert in der Auswertung beschränkt.

Und (wenn es dann funktioniert) wie genau wird die Rangfolge im Datensatz gespeichert?

Sie haben den Code für die Ränge verwendet. Wenn die Variable IV01_01 für die erste Seite (TR01) steht und diese an Position 5 kommt, dann wird in IV01_01 der Code 5 abgespeichert.

Ich sehe im PHP-Code keine groben Fehler. Das muss aber nicht heißen, dass es auf Anhieb klappt. Einen kleinen technischen Test sollten Sie auf jeden Fall machen.

Tipp: Legen Sie innerhalb des Befragungsprojekt eine Kopie des Fragebogens an, nehmen Sie die Änderungen an der Kopie vor, testen sie, und ändern Sie dann den Standard-Fragebogen.

by s115627 (460 points)
Vielen Dank für die schnelle und hilfreiche Antwort und den Tipp.

Eine Frage noch zum Code mit den internen Variablen, müsste der dann (für 20 Fragebogenseiten) wie folgt geändert werden? Oder sieht die Lösung anders aus?

[...]
 $id = id('IV01_01', $indices[$i] + 1);
  put($id, $i + 1);
 $id = id('IV01_02', $indices[$i] + 2);
  put($id, $i + 2);
 $id = id('IV01_03', $indices[$i] + 3);
  put($id, $i + 3);
[...]
 $id = id('IV01_20', $indices[$i] + 20);
  put($id, $i + 20);
$random[$i] = $pages[$indices[$i]];
 registerVariable($seiten);
}
setPageOrder($random, 'TYPINT');
by SoSci Survey (302k points)
Nein, die FOR-Schleife belegt bereits alle internen Variablen. Ich würde dringend davon abraten, das manuell auszuschreiben. Bei so etwas schleichen sich nur Fehler ein ;)
by s115627 (460 points)
Wie sieht dann die richtige Lösung aus?
Und was ist eine FOR-Schleife?
by SoSci Survey (302k points)
Ich meinte den Code, den Sie oben in Ihrer Frage gepostet haben. Das ab "for" ist die FOR-Schleife :)
by s115627 (460 points)
Ah, Danke, ich verstehe.
Was ich allerdings noch nicht verstehe, ist wie ich das ganze nicht manuell schreiben kann.
Habe ich es richtig verstanden, dass ich nicht die einzelnen Items der internen Variablen manuell auflisten sollte?
Ich stehe ein bisschen auf dem Schlauch
by SoSci Survey (302k points)
> Habe ich es richtig verstanden, dass ich nicht die einzelnen Items der internen Variablen manuell auflisten sollte?

Korrekt, die FOR-Schleife geht alle Items nacheinander durch (genauer: alle Einträge in der Seiten-Liste) und das id() macht aus der Frage-Kennung plus Nummer die Kennung der internen Variable(n).
by s115627 (460 points)
Vielen Dank für die schnelle Antwort. Das heißt ich lege manuell EINE interne Variable mit 20 Items an und verwende den oben vorgeschlagenen Code ohne Veränderung:

if (!isset($seiten)) {
$seiten = array('TR01', 'TR02', 'TR03', 'TR04', 'TR05', 'TR06', 'IN01', 'IN02', 'IN03', 'IN04', 'TV01', 'TV02', 'TV03', 'TV04', 'CD01', 'CD02', 'CD03', 'CD04', 'PE01', 'PE02');
$indices = array_keys($seiten);
shuffle($indices);
$random = array();
for ($i=0; $i<count($indices); $i++) {
 $id = id('IV01', $indices[$i] + 1);
  put($id, $i + 1);
  $random[$i] = $pages[$indices[$i]];
 registerVariable($seiten);
}
setPageOrder($random, 'TYPINT');

Richtig?
by SoSci Survey (302k points)
Im Prinzip: ja. Versuchen Sie es einmal in einer Kopie (!) des Fragebogens (im selben Projekt). Eventuelle Probleme sollten sich dann schnell identifizieren lassen.
by s115627 (460 points)
Vielen Dank für die Antwort. Ich habe eine Kopie angelegt.
Ist es richtig, dass ich um den Code in der Kopie zu testen trotzdem die laufende Erhebung kurz unterbrechen muss und den kopierten Fragebogen als Standardfragebogen festlegen?
by SoSci Survey (302k points)
Nein, Sie können unter "Fragebogen zusammenstellen" in der Kopie testen und den Rest der Erhebung ganz regulär laufen lassen.
by s115627 (460 points)
Wenn ich im Code noch 'pages' durch 'seiten' ersetze, funktioniert es in der Kopie des Fragebogens ohne Fehlermeldung. Ist es dann sicher, den Code in den tatsächlichen Fragebogen zu übernehmen, oder sind noch andere Vortests notwendig?
by SoSci Survey (302k points)
Machen Sie einen gründlichen Test des neuen Fragebogens. Und dann ändern Sie unter "Fragebögen verwalten" den Standard-Fragebogen. Dadurch werden neue Teilnehmer auf den neuen Fragebogen geleitet und Sie können im Datensatz nachvollziehen, wer welchenm Fragebogen ausgefüllt hat.
by s115627 (460 points)
Vielen Dank für die schnelle Antwort.
Mit gründlichem Test meinen Sie, den Fragebogen im Testmodus komplett durchzuklicken? Oder noch irgendwelche weiteren Tests?
(Einen Testdatensatz habe ich dann nicht, oder?)
by SoSci Survey (302k points)
Wenn Sie sonst nichts geändert haben, werden Sie keinen kompletten technischen Funktionstest benötigen. Aber zumindest den Teil mit der rotierten Abfolge und ob die im Datensatz gespeicherten Daten korrekt sind, sollten Sie schon nochmal testen.

> Einen Testdatensatz habe ich dann nicht, oder?

Natürlich :) Im Datensatz klar an der Variable MODE erkennbar.
by s115627 (460 points)
Vielen Dank für die Hilfe bei der Lösung des Problems.
Ich habe den Code nun im Originalfragebogen ersetzt (natürlich die Zeit und genaue Änderung dokumentiert) und dort auch nochmal getestet, es hat funktioniert, sodass bei der internen Variablen die Werte von 1-20 gespeichert sind. Im kopierten hat mit dem Code auch alles funktioniert, allerdings tauchte dort ein anderer kleiner Bug auf (For the placeholder %BCr% neither an input field by prepare_input() has been created nor any content by using replace().) von dem ich mir nicht erklären konnte, woher er kommt, da ich keinen solchen placeholder verwendet habe.

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

...