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

Hallo,

in einem Forschungsprojekt habe ich ein Stimulus-Within-Block Design,
d.h. es gibt mehrere (10-30) Stimulusblöcke (z.B. 8 Stimuli pro Block) und jede Person soll nur einen dieser Blöcke bearbeiten. Jeder Stimulus und die dazugehörigen Fragen soll auf einer separaten Fragebogenseite angezeigt werden.

Gibt es eine einfache Möglichkeit, die Blöcke zu spezifizieren und jeder Person dann randomisiert einen davon darzubieten (Innerhalb der Blöcke sollen die Seiten auch in randomisierter Reihenfolge dargeboten werden).
Ich habe schon etwas recherchiert auf den SoSci-Survey Seiten, aber noch keine ganz passende Lösung gefunden (außer evtl. pro Block einen extra Fragebogen zu erstellen und dann für jede Person randomisiert einen davon anzuzeigen und die Datensätze am Schluss zusammen zu führen).

Ich würde mich über eine Antwort sehr freuen.

1 Answer

0 votes
by SoSci Survey (308k points)
selected by s115627
 
Best answer

Jeder Stimulus und die dazugehörigen Fragen soll auf einer separaten Fragebogenseite angezeigt werden.

Oftmals ist so etwas mittels loopPage() übersichtlich lösbar.

Gibt es eine einfache Möglichkeit, die Blöcke zu spezifizieren

Es gibt sogar viele Möglichkeiten. Die besseren davon nutzen einen Zufallsgenerator. Ich würde für die 8 Stimuli mit loopPage() arbeiten, und dan via Zufallsgenerator nur das Präfix variieren (z.B. Stimuli in Block A abgelegt in BA01 bis BA08, Stimuli für Block B in BB01 bis BB08, u.s.w.) und dann mit id() zusammen bauen:

question('RG01'); // Zufallsgenerator
$prefix = value('RG01', 'label');
$i = loopPage(8);
$stimulis = id($prefix, $i);
show($i);

Aber man kann es sich auch schwerer machen und 3x8 = 24 Seiten anlegen und dann mit setPageOrder() arbeiten, wie hier erklärt: Seiten rotieren, nur dass Sie natürlich pro Interview nur einen Block statt alle 3 ziehen würden.

by s115627 (460 points)
Vielen Dank für die Antwort!
Das klingt nach einer sinnvollen Lösung!
Ich habe nur den Code noch nicht komplett verstanden, könnten Sie kurz erklären, was die einzelnen Zeilen bedeuten? Das wäre sehr nett!
by SoSci Survey (308k points)
Das lässt sich machen ... obgleich der ein oder andre Blick zu den einzelnen Befehlen in die Anleitung aus nicht schadet :)

// Zufallsgeneratir einbinden
question('RG01');
// Den gezogenen Code (eine Rubrik-Kennung) aus dem Zufallsgenerator auslesen
$prefix = value('RG01', 'label');
// Die aktuelle Seite 8-mal wiederholen
$i = loopPage(8);
// Aus der Rubrik-Kennung und der laufenden Nummer eine Kennung bilden
// Da hatte ich oben das +1 vergessen (das müssen Sie aber ggf. an Ihren Bedarf anpassen)
$stimulis = id($prefix, $i + 1);
// Das Element mit dieser Kennung anzeigen
show($i);
by s115627 (460 points)
Dankeschön! Ich bin mir nicht sicher, ob der Code so schon für das reicht, was wir brauchen, ich versuche es noch einmal zu erklären:

Es gibt 15 Stimulusblocks, die aus jeweils 8 Stimuli bestehen (also 15x8 Stimuli). Zu jedem Stimulus werden auf einer Fragebogenseite jeweils mehrere Fragen gestellt, d.h. es gibt 8 Seiten pro Block. Der Stimulus wird jeweils im Feld "Anweisungen" bei den Fragen präsentiert/wiederholt. Jeder Teilnehmerin soll nun exakt einer dieser 15 Stimulusblocks (also 8 Fragebogenseiten) randomisiert zugeordnet werden. Diese 8 Fragebogenseiten wiederum sollen in für jede Person in randomisierter Reihenfolge dargeboten werden.

Wenn ich Ihren Code richtig verstanden habe, wird dort nur die Stimulusdarbietung gesteuert, oder habe ich etwas übersehen?
Und ist da schon die Randomisierung der Stimuli enthalten?
by SoSci Survey (308k points)
> d.h. es gibt 8 Seiten pro Block.

Dann sollten Sie loopToPage() statt loopPage() verwenden.

Außerdem werden Sie für die Rotation im Zufallsgenerator festlegen, dass Sie pro Interview 8 Stimuli ziehen, und der Code ändert sich dann ein wenig wie folgt:

$i = loopToPage('loopend', 8);
$prefix = value(id('RG01', $i + 1), 'label');

Und auf der Folgeseite in dem Block aus 8 Seiten dann

> Wenn ich Ihren Code richtig verstanden habe, wird dort nur die Stimulusdarbietung gesteuert, oder habe ich etwas übersehen?

$i = loopIndex();
$prefix = value(id('RG01', $i + 1), 'label');

Ob sie dann unten mittels show() den Stimulus oder die zugehörigen Fragen zeigen, macht technisch keinen großen Unterschied.
by s115627 (460 points)
edited by s115627
Vielen Dank nochmal für Ihre Antwort!

Eine Rückfrage noch dazu:
Die Stimuli werden nicht zufällig aus dem (gesamten) Stimuluspool gezogen, sondern es gibt fest gelegte Stimulusblocks (jeder Block besteht aus spezifischen Fragebogenseiten), die dann zufällig zugewiesen werden sollen.
Wenn ich ihre Antwort richtig verstehe, bezieht sie sich auf das erste Szenario.

Wäre es in unserem Fall denkbar jeweils ein array mit den 8 Fragebogenseiten pro Block zu erstellen, davon dann jeder Teilnehmerin ein array zufällig zuzuordnen (registrieren welches) und die Seiten innerhalb des arrays in randomisierter Reihenfolge darzubieten?

Falls ja, gibt es eine Anleitung dazu?

P.S. Ich habe es nun folgendermaßen versucht, bekomme aber folgende (Fehler-)Meldung auf der 1. Stimulusseite "One or more variables (ZG01_CP, ZG01) have already been asked on page 5. Please note that the answers from page 5 are shown here and that they will be subsequently replaced. If you require multiple similar questions, please create a copy of the question."

Haben Sie eine Idee, was schief läuft?

question('ZG01');
if (!isset($blocks)) {
  if (value('ZG01') == 1) {
    $blocks = array(
      array('B1I1', 'B1I2', ' B1I3', 'B1I4', 'B1I5', ' B1I6')
);
    shuffle($blocks);
  } elseif (value('ZG01') == 2) {
    $blocks = array(
      array('B2I1', 'B2I2', ' B2I3', 'B2I4', 'B2I5', ' B2I6')    
);
    shuffle($blocks);
//Block 3
    } elseif (value('ZG01') == 3) {
    $blocks = array(
       array('B3I1', 'B3I2', ' B3I3', 'B3I4', 'B3I5', ' B3I6')
    );  
shuffle($blocks);
//Block 4
    } elseif (value('ZG01') == 4) {
    $blocks = array(
       array('B4I1', 'B4I2', ' B4I3', 'B4I4', 'B4I5', ' B4I6')
    );  
shuffle($blocks);
//Block 5
    } elseif (value('ZG01') == 5) {
    $blocks = array(
       array('B5I1', 'B5I2', ' B5I3', 'B5I4', 'B5I5', ' B5I6')
    );  
shuffle($blocks);
//Block 6
    } elseif (value('ZG01') == 6) {
    $blocks = array(
       array('B6I1', 'B6I2', ' B6I3', 'B6I4', 'B6I5', ' B6I6')
    );  
shuffle($blocks);
//Block 7
    } elseif (value('ZG01') == 7) {
    $blocks = array(
      array('B7I1', 'B7I2', ' B7I3', 'B7I4', 'B7I5', ' B7I6')
    );  
shuffle($blocks);
//Block 8
    } elseif (value('ZG01') == 8) {
    $blocks = array(
array('B8I1', 'B8I2', ' B8I3', 'B8I4', 'B8I5', ' B8I6')
    );  
shuffle($blocks);
//Block 9
    } elseif (value('ZG01') == 9) {
    $blocks = array(
array('B9I1', 'B9I2', ' B9I3', 'B9I4', 'B9I5', ' B9I6')
    );  
shuffle($blocks);
//Block 10
    } elseif (value('ZG01') == 10) {
    $blocks = array(
array('B10I1', 'B10I2', ' B10I3', 'B10I4', 'B10I5', ' B10I6')
    );  
shuffle($blocks);
//Block 11
    } elseif (value('ZG01') == 11) {
    $blocks = array(
array('B11I1', 'B11I2', ' B11I3', 'B11I4', 'B11I5', ' B11I6')
    );  
shuffle($blocks);
//Block 12
    } elseif (value('ZG01') == 12) {
    $blocks = array(
array('B12I1', 'B12I2', ' B12I3', 'B12I4', 'B12I5', ' B12I6')
    );  
shuffle($blocks);
//Block 13
    } elseif (value('ZG01') == 13) {
    $blocks = array(
array('B13I1', 'B13I2', ' B13I3', 'B13I4', 'B13I5', ' B13I6')
    );  
shuffle($blocks);
//Block 14
    } elseif (value('ZG01') == 14) {
    $blocks = array(
array('B14I1', 'B14I2', ' B14I3', 'B14I4', 'B14I5', ' B14I6')
    );  
shuffle($blocks);
//Block 15
    } elseif (value('ZG01') == 14) {
    $blocks = array(
array('B15I1', 'B15I2', ' B15I3', 'B15I4', 'B15I5', ' B15I6')
    );  
shuffle($blocks);
}
  registerVariable($blocks);
}
setPageOrder($blocks,'E1');
by SoSci Survey (308k points)
> Wenn ich ihre Antwort richtig verstehe, bezieht sie sich auf das erste Szenario.

Den Zufallsgenerator kann man sowohl für eine Ziehung verwenden als auch füür die Rotation. Wenn Sie in jedem Interview alle Stimuli ziehen, dann bekommen Sie eine Rotation.

Oder meinen Sie mit

> die dann zufällig zugewiesen werden sollen.

etwas anderes?
by s115627 (460 points)
Ich bin mir nicht sicher, ob wir das gleiche meinen.

Wenn es 1 Interview pro Person ist, sollen nicht in jedem Interview alle Stimuli gezogen werden, sondern pro Interview ein spezifischer vorher festgelegter Block an Fragebogenseiten. (Also bspw. Person A: Seiten 1-6, Person B: Seiten 7-12, ...)

Geht die vorgeschlagene Lösung in dafür in die richtige Richtung?
by SoSci Survey (308k points)
Okay, die Randomisierung dadurch zu realisieren, dass man unterschiedliche Seiten anzeigt, ist nicht sehr elegant ... aber wenn Sie es schonmal so aufgesetzt haben, okay.

> Also bspw. Person A: Seiten 1-6

In dem Fall sprechen wir von einer klassischen Randomisierung. Die kann man natürlich gut mit einem Zufallsgenerator lösen. Dann ziehen Sie nur einen Zettel pro Interview - und auf dem steht einfach, welche Seiten angezeigt werden sollen, z.B.

S1-S6
S7-S12
u.s.w.

Sie Kennungen S1, S6, S7, S12 müssen Sie natürlich als Seitenkennungen im Fragebogen eintragen.

question('RG01');
$pages = value('RG01');
setPageOrder($pages, 'part2');

Das wäre dann der komplette PHP-Code, den Sie brauchen.

Eine Rotation der Seiten ist hier explizit noch nicht vorgesehen.
by s115627 (460 points)
Vielen Dank für Ihre Antwort!

Eine Rückfrage: was genau bedeutet hier 'part2' im Code?

"Eine Rotation der Seiten ist hier explizit noch nicht vorgesehen." D.h. die Seiten in den einzelnen Blocks würden so noch nicht in randomisierter Reihenfolge dargeboten?
Wie wäre das zu realisieren?

Für zukünftige Projekte mit eleganteren Lösungen:
Hier wäre es so, dass auf den Fragebogenseiten ausschließlich der PHP-Code steht, über den die Fragen (spezifiziert in Arrays) dann reingezogen werden, richtig?
Wie wäre mit Looptopage dann eine zufällige Zuweisung zu einem der Stimulusblocks möglich?
Hier: $i = loopToPage('loopend', 8);
$prefix = value(id('RG01', $i + 1), 'label')
ist noch nicht gegeben, dass exakt die 8 Stimuli eines Blocks dargeboten werden, oder?
by SoSci Survey (308k points)
>  was genau bedeutet hier 'part2' im Code?

Das ist die Kennung der Seite, wo es nach der Randomisierung weitergehen soll.

> Für zukünftige Projekte mit eleganteren Lösungen

Ja, in aller Regel ist es deutlich einfacher zu verwalten, wenn man wenige Seite anlegt und dort einfach per PHP-Filter (sei es über ein Array oder anderweitig) den "richtigen" Inhalt anzeigt.

Ob man dann 6 Seiten anlegt und diese mittels loopPage() noch auf eine reduziert, das hängt wesentlich davon ab, ob die sechs Seiten alle sehr ähnlich sind oder sich stark unterscheiden.

> ist noch nicht gegeben, dass exakt die 8 Stimuli eines Blocks dargeboten werden, oder?

Der Code wird so noch nicht ganz funktionieren, weil der Zufallsgenerator für die Kombination bestimmter Stimuli-Sets ein wenig anders aussehen müsste. Wahrscheinlich käme dann noch ein value(..., 'csv') zum Einsatz. Aber doch, mit loopPage() könnte man alle 8 Stimuli schön nacheinander präsentieren.
by s115627 (460 points)
Hallo,
noch einmal eine Rückfrage zur Randomisierung der Stimuli (Seiten) innerhalb der Blocks, wäre das so oder so ähnlich lösbar?

question('RG01');
$pages = value('RG01');
shuffle($pages);
  $pages[] = 'part2';
  registerVariable($pages);
setPageOrder($pages, 'part2');
by SoSci Survey (308k points)
> wäre das so oder so ähnlich lösbar?

Eher nicht, weil die Variable $pages einen Text enthält, z.B. "S1-S7", kein Array (s. Anleitung, was ein Array ist). Wenn Sie die Seite noch in sich mischen wollten, müssten Sie so etwas in der Art hineinlegen:

S1,S2,S3,...,S7
S8,S9,S10,...,S14

Und dann den PHP-Code wie folgt anpassen:

$pages = value('RG01', 'csv');

Dadurch bekommen Sie ein Array, das SIe dann mischen können.
by s115627 (460 points)
Vielen Dank für die schnelle Antwort!

Ich habe es nun mit folgendem Code versucht (+ Listen der Seiten im Zufallsgenerator) und bekomme die folgende Fehlermeldung (auch wenn ich einen neuen Zufallsgenerator anlege).

"Items of the following question have been used repeatedly on this page. This inevitably results in data loss! If you need the same question more than once, please create a copy of this question. The following items are duplicates: RG01."

Haben Sie eine Idee warum?

Das ist der Code, der nun verwendet wurde:
question('RG01');
$pages = value('RG01', 'csv');
shuffle($pages);
  $pages[] = 'E1';
  registerVariable($pages);
setPageOrder($pages, 'E1');

Der Zufallsgenerator sieht folgendermaßen aus
01 = B1I1, B1I2, B1I3, B1I4, B1I5, B1I6
02 = B2I1, B2I2, B2I3, B2I4, B2I5, B2I6   
03 = B3I1, B3I2, B3I3, B3I4, B3I5, B3I6
04 = B4I1, B4I2, B4I3, B4I4, B4I5, B4I6
05 = B5I1, B5I2, B5I3, B5I4, B5I5, B5I6
06 = B6I1, B6I2, B6I3, B6I4, B6I5, B6I6
07 = B7I1, B7I2, B7I3, B7I4, B7I5, B7I6
08 = B8I1, B8I2, B8I3, B8I4, B8I5, B8I6
09 = B9I1, B9I2, B9I3, B9I4, B9I5, B9I6
10 = B10I1, B10I2, B10I3, B10I4, B10I5, B10I6
11 = B11I1, B11I2, B11I3, B11I4, B11I5, B11I6
12 = B12I1, B12I2, B12I3, B12I4, B12I5, B12I6
13 = B13I1, B13I2, B13I3, B13I4, B13I5, B13I6
14 = B14I1, B14I2, B14I3, B14I4, B14I5, B14I6
15 = B15I1, B15I2, B15I3, B15I4, B15I5, B15I6
by SoSci Survey (308k points)
> Haben Sie eine Idee warum?

Eigentlich sollte diese Warnung beim Zufallsgenerator generell nicht erscheinen. Aber ... haben Sie den Zufallsgenerator RG01 zusätzlich zum Aufruf via question('RG01') auch noch in die Seite gezogen?
by s115627 (460 points)
Ja, das war der Fehler, vielen Dank, nun scheint es zu funktionieren!
by SoSci Survey (308k points)
Wir haben die Warnung für den Zufallsgenerator jetzt zudem noch deaktiviert, denn dieser passt selbst auf, dass bei doppelter Verwendung nichts passiert.

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

...