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

0 votes

Hallo,

in meiner Arbeitseinheit möchten wir einen Fragebogen erstellen, der sowohl Seitenblöcke randomisiert, als auch die Blöcke selbst. Dennoch sollen die Anfangsseite als auch die Endseite des jeweiligen Blocks gleich bleiben.
Der Aufbau eines Blocks ist:
Instruktion - (Zufällige Variantenreihenfolge: 0% - 25% - 50%) - Abschluss
Hiervon gibt es 5 Blöcke, wovon die ersten 4 in zufälliger Reihenfolge erscheinen sollen.
Gibt es eine elegangte Möglichkeit, hierfür ein Array zu erstellen, das der Funktion setPageOrder() übergeben werden kann?

Aktuell haben wir die Blöcke einzeln mit setPageOrder() randomisiert und versuchen, über eine Urnenziehung und Weiterleitung (Ja, mit If-Abfragen) die Blockrandomisierung zu gestalten.
Die Rotation innerhalb der Blöcke klappt gut, nur die Rotation der Blöcke mit der Urnenziehung funktioniert nicht richtig, da nur zwei Blöcke korrekt weitergeleitet werden, dann die Weiterleitung aber nicht mehr funktioniert.
Der Code ist exakt derselbe, wie bei den Weiterleitungen zuvor.

Hier die Urnenziehung:
urnDraw('condition', 'IV02');
$Urne = value('IV02_01');
registerVariable($Urne);
html($Urne);

Hier ein Teil der Weiterleitung (1. Verteiler, ist für jeden Verteiler individuell):
if ($Urne == 1) {goToPage('1BlockIns');}
...
elseif ($Urne == 6) {goToPage('1BlockIns');}
elseif ($Urne == 7) {goToPage('2BlockIns');}
...
elseif ($Urne == 12) {goToPage('2BlockIns');}
elseif ($Urne == 13) {goToPage('3BlockIns');}
..
elseif ($Urne == 18) {goToPage('3BlockIns');}
elseif ($Urne == 19) {goToPage('4BlockIns');}
...
elseif ($Urne == 24) {goToPage('4BlockIns');}

Hier ist die Rotation der Blöcke (für jeden Block angepasst):
if (!isset($seitenVA)) {
$seitenVA = array('1Block0-1Block0Erg', '1Block25-1Block25Erg', '1Block50-1Block50Erg');
shuffle($seitenVA);
$seitenVA[] = 'nextblock1';
registerVariable($seitenVA);
}

setPageOrder($seitenVA);

Wichtig ist noch: wir nutzen SoSci auf unserem eigenen Server und mit der Programm-VErsion Programm-Version 2.6.00-i.

Vielen herzlichen Dank für Ihre Rückmeldung!
Verzweifelter HiWi

in SoSci Survey (dt.) by s070245 (110 points)

1 Answer

0 votes

Die Rotation innerhalb der Blöcke klappt gut, nur die Rotation der Blöcke mit der Urnenziehung funktioniert nicht richtig, da nur zwei Blöcke korrekt weitergeleitet werden, dann die Weiterleitung aber nicht mehr funktioniert.

Nun, wenn Sie die einzelnen Blöcke intern rotieren können, dann ist es eigentlich gar nicht mehr schwierig, auch noch zwischen den Blöcken zu rotieren. Was ich Ihrem Code auf den ersten Blick nicht entnehmen kann, ist die Kennung der ersten (fixen) Seite. Aber nehmen wir mal an, diese hieße 1BlockStart. Dann wäre das eine kleine Modifikation Ihres Codes:

  $inner = array('1Block0-1Block0Erg', '1Block25-1Block25Erg', '1Block50-1Block50Erg');
  shuffle($inner);
  // Die fixen Seiten pro Block vorne und hinten ergänzen
  $seitenVA = array_merge(array('1BlockStart'), $inner, array('1BlockDone'));

Da hätten wir also die Seite 1BlockStart fix am Anfang, dann die 3 Teile gemischt und dann 1BlockDone am Ende. Das kann man nun 5-mal machen (der Übersichtlichkeit halber hier nur 3-mal) und das wiederum in ein Array speichern. Dann hat man ein Array mit 5 Einträgen, die jeweils wieder ein Array sind. Dieses Array (also die Blöcke) mischt man nochmal.

if  (!isset($seiten)) {
  // Einmal
  $inner = array('1Block0-1Block0Erg', '1Block25-1Block25Erg', '1Block50-1Block50Erg');
  shuffle($inner);
  $seitenVA = array_merge(array('1BlockStart'), $inner, array('1BlockDone'));
  // Zweimal
  $inner = array('2Block0-2Block0Erg', '2Block25-2Block25Erg', '2Block50-2Block50Erg');
  shuffle($inner);
  $seitenVB = array_merge(array('2BlockStart'), $inner, array('2BlockDone'));
  // Dreimal
  $inner = array('3Block0-3Block0Erg', '3Block25-3Block25Erg', '3Block50-3Block50Erg');
  shuffle($inner);
  $seitenVC = array_merge(array('3BlockStart'), $inner, array('3BlockDone'));
  // Ein Array mit allen
  $mix = array($seitenVA, $seitenVB, $seitenVC);
  shuffle($mix);
  // Jetzt noch die Teile hintereinander schreiben
  $seiten = array_merge($mix[0], $mix[1], $mix[2]);
  registerVariable($seiten);
}
by SoSci Survey (108k points)
Herzlichen Dank für die ausführliche Antwort - so geht das jetzt auch! :-)
...