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

Hallo,
ich möchte in meinem Fragebogen Probanden in drei zufällige Gruppen einteilen lassen, die jeweils auf einen anderen Block mit jeweils vier Seiten geleitet werden. Auf jeder Seite stehen unterschiedliche Informationen, zu denen jeweils am Ende der Seite eine Frage gestellt wird. Ein Proband soll also entweder Block 1, Block 2 oder Block 3 bekommen, wobei die dann angezeigten Seiten immer in randomisierter Reihenfolge gezeigt werden.
Wie schaffe ich es, dass eine Gruppe zu einem Seiten-Block weitergeleitet wird und dort die vier Seiten randomisiert angezeigt werden?

Ich habe bereits den Zufallsgenerator SZ18 erstellt:
1 = SSZ1-SSZ4
2 = KSZ1-KSZ4
3 = ISZ1-ISZ4

Mit diesem Code bekomme ich es hin, dass schon einmal einer der drei Blöcke ausgelost wird, allerdings sind die Seiten nicht rotiert:
question('SZ18');
$pages = value('SZ18', 'label');
setPageOrder($pages, 'posttest');

Wenn ich es über den Weg mit drei Zufallsgeneratoren (SZ19, SZ20 und SZ21) für die drei Blöcke versuche, in denen die Zettel für die Zufallsziehung eingetragen sind (1 = SSZ1, 2 = SSZ2, 3 = SSZ3, 4 = SSZ4; 1 = KSZ1, 2 = KSZ2, 3 = KSZ3, 4 = KSZ4; 1 = ISZ1, 2 = ISZ2, 3 = ISZ3, 4 = ISZ4), werden alle Seiten übersprungen und man wird ans Ende des Fragebogen geleitet.

Ich freue mich sehr über Tipps!

1 Answer

0 votes
by SoSci Survey (306k points)

Diese Anleitung sollte Ihrem Anwendungsfall entsprechend:
Rotierte Block-Abfolge (Variante 1)

... werden alle Seiten übersprungen und man wird ans Ende des Fragebogen geleitet.

Wenn das Problem mit der o.g. Anleitung auftreten sollte, dann verwenden und posten Sie bitte die Hilfsmittel zur Fehlersuche, also insb. die Debug-Information: Fragebogen-Probleme lösen

by s109802 (140 points)
edited by s109802
Vielen Dank für den Verweis auf die Seite! Damit hat es noch nicht ganz geklappt.
Mit diesem Code werden alle Seiten rotiert angezeigt, jedoch von allen drei Blöcken, und ich möchte ja, dass pro Person nur ein Block angezeigt wird:
$pages = [
  ['SSZ1', 'SSZ2', 'SSZ3', 'SSZ4'],
  ['KSZ1', 'KSZ2', 'KSZ3', 'KSZ4'],
  ['ISZ1', 'ISZ2', 'ISZ3', 'ISZ4']
];
 
for ($i=0; $i<count($pages); $i++) {
  shuffle($pages[$i]);
}
 
shuffle($pages);
 
setPageOrder($pages, 'posttest');

Das ist die Debug-Info dazu:
[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr2
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
12 [ISZ2], 11 [ISZ1], 13 [ISZ3], 14 [ISZ4], 3 [SSZ1], 4 [SSZ2], 5 [SSZ3], 6 [SSZ4], 8 [KSZ2], 7 [KSZ1], 9 [KSZ3], 10 [KSZ4], 15 [posttest]
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 12
[Verarbeitung]    Erstelle Seite 12 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ03
[Inhalt]    Erstelle Frage SZ14

Mit der anderen Variante aus der Anleitung:
$blockfolge = array_values(valueList('SZ22'));
$blocks = [
  1 => valueList('SZ19', null, 'label'),
  2 => valueList('SZ20', null, 'label'),
  3 => valueList('SZ21', null, 'label')
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);
setPageOrder($gesamtliste, 'SD');

...erscheinen die rote Fehlermeldung im Anhang und diese Debug-Info:

[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ22
[Information]    Vom Zufallsgenerator SZ22 wurden folgende Codes gezogen: 2
[Inhalt]    Erstelle Frage SZ19
[Information]    Vom Zufallsgenerator SZ19 wurden folgende Codes gezogen: 4, 1, 3, 2
[Inhalt]    Erstelle Frage SZ20
[Information]    Vom Zufallsgenerator SZ20 wurden folgende Codes gezogen: 4, 2, 1, 3
[Inhalt]    Erstelle Frage SZ21
[Information]    Vom Zufallsgenerator SZ21 wurden folgende Codes gezogen: 1, 3, 4, 2

Auf der nächsten Seite werden alle Seiten in der Reihenfolge angezeigt, wie sie im Fragebogen angeordnet sind.
by s109802 (140 points)
Die rote Fehlermeldung ist diese:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 1
Zeile: 11

PHP-Code

008 ];
009 $gesamtliste = array_merge(
010   $blocks[$blockfolge[0]],
011   $blocks[$blockfolge[1]],
012   $blocks[$blockfolge[2]]
013 );
014 setPageOrder($gesamtliste, 'SD');
Fehler im Fragebogen: Undefined array key ""
Zeile: 11

PHP-Code

008 ];
009 $gesamtliste = array_merge(
010   $blocks[$blockfolge[0]],
011   $blocks[$blockfolge[1]],
012   $blocks[$blockfolge[2]]
013 );
014 setPageOrder($gesamtliste, 'SD');
Fehler im Fragebogen: Undefined array key 2
Zeile: 12

PHP-Code

009 $gesamtliste = array_merge(
010   $blocks[$blockfolge[0]],
011   $blocks[$blockfolge[1]],
012   $blocks[$blockfolge[2]]
013 );
014 setPageOrder($gesamtliste, 'SD');
015 return 'ok';
Fehler im Fragebogen: Undefined array key ""
Zeile: 12

PHP-Code

009 $gesamtliste = array_merge(
010   $blocks[$blockfolge[0]],
011   $blocks[$blockfolge[1]],
012   $blocks[$blockfolge[2]]
013 );
014 setPageOrder($gesamtliste, 'SD');
015 return 'ok';
Fehler im Fragebogen: array_merge(): Argument #2 must be of type array, null given
Zeile: 9

PHP-Code

006   2 => valueList('SZ20', null, 'label'),
007   3 => valueList('SZ21', null, 'label')
008 ];
009 $gesamtliste = array_merge(
010   $blocks[$blockfolge[0]],
011   $blocks[$blockfolge[1]],
012   $blocks[$blockfolge[2]]
by SoSci Survey (306k points)
Wenn Sie in SZ22 nur einen Wert ziehen (um einen Block auszuwählen) ...

$blockfolge = array_values(valueList('SZ22'));

dann könnten Sie einfacher auch schreiben:

$blocknummer = value('SZ22');

Und statt

$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);

bräuchten SIe dann nur noch

$gesamtliste = $blocks[$blocknummer];
by s109802 (140 points)
Mein Code sieht nun so aus:
$blocknummer = value('SZ22');
$blocks = [
  1 => valueList('SZ19', null, 'label'),
  2 => valueList('SZ20', null, 'label'),
  3 => valueList('SZ21', null, 'label')
];
$gesamtliste = $blocks[$blocknummer];
setPageOrder($gesamtliste);

Jetzt werden Seiten teilweise innerhalb der Blöcke rotiert, danach aber noch Seiten anderer Blöcke angezeigt. Teilweise sind die Seiten auch zwischen Blöcken rotiert. Selten passiert es, dass nur ein Block rotiert angezeigt wird, wie ich es eigentlich möchte.

Die Debug-Info dazu:
[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ22
[Information]    Vom Zufallsgenerator SZ22 wurden folgende Codes gezogen: 2
[Inhalt]    Erstelle Frage SZ19
[Information]    Vom Zufallsgenerator SZ19 wurden folgende Codes gezogen: 1, 4, 2, 3
[Inhalt]    Erstelle Frage SZ20
[Information]    Vom Zufallsgenerator SZ20 wurden folgende Codes gezogen: 2, 3, 1, 4
[Inhalt]    Erstelle Frage SZ21
[Information]    Vom Zufallsgenerator SZ21 wurden folgende Codes gezogen: 2, 1, 4, 3
[Information]    value("SZ22") = 2
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
8 [KSZ2], 9 [KSZ3], 7 [KSZ1], 10 [KSZ4]
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 8
[Verarbeitung]    Erstelle Seite 8 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ03
[Inhalt]    Erstelle Frage SZ10

Oder so:
[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ22
[Information]    Vom Zufallsgenerator SZ22 wurden folgende Codes gezogen: 3
[Inhalt]    Erstelle Frage SZ19
[Information]    Vom Zufallsgenerator SZ19 wurden folgende Codes gezogen: 1, 3, 2, 4
[Inhalt]    Erstelle Frage SZ20
[Information]    Vom Zufallsgenerator SZ20 wurden folgende Codes gezogen: 2, 1, 4, 3
[Inhalt]    Erstelle Frage SZ21
[Information]    Vom Zufallsgenerator SZ21 wurden folgende Codes gezogen: 3, 2, 4, 1
[Information]    value("SZ22") = 3
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
13 [ISZ3], 12 [ISZ2], 14 [ISZ4], 11 [ISZ1]
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 13
[Verarbeitung]    Erstelle Seite 13 in Fragebogen qnr2
[Inhalt]    Erstelle Frage SZ07
[Inhalt]    Erstelle Frage SZ15
by SoSci Survey (306k points)
> Jetzt werden Seiten teilweise innerhalb der Blöcke rotiert, danach aber noch Seiten anderer Blöcke angezeigt.

Ergänzen Sie in setPageOrder() noch, wo es nach der Rotation weitergehen soll, z.B.

setPageOrder($gesamtliste, 'demografie');
by s109802 (140 points)
Guten Tag, ich bedanke mich für die großartige Hilfe! Alles funktioniert jetzt so wie es soll mit diesem Code:
$blocknummer = value('SZ22');
$blocks = [
  1 => valueList('SZ19', null, 'label'),
  2 => valueList('SZ20', null, 'label'),
  3 => valueList('SZ21', null, 'label')
];
$gesamtliste = $blocks[$blocknummer];
setPageOrder($gesamtliste, 'posttest');
by s109802 (140 points)
Ich habe nun diesen Code, Code für Einteilung in drei Blöcke mit rotierten Seiten + jeweils 4 darauf folgende Seiten in fester Reihenfolge.
$blocknummer = value('SZ22');
$blocks = [
  1 => valueList('SZ19', null, 'label'),
  2 => valueList('SZ20', null, 'label'),
  3 => valueList('SZ21', null, 'label')
];
// Definieren Sie die zusätzlichen Seiten für jeden Block
$additionalPages = [
  1 => ['SSZ5', 'SSZ6', 'SSZ7', 'SSZ8', 'SSZ9'],
  2 => ['KSZ5', 'KSZ6', 'KSZ7', 'KSZ8', 'KSZ9'],
  3 => ['ISZ5', 'ISZ6', 'ISZ7', 'ISZ8', 'ISZ9']
];
 
$gesamtliste = $blocks[$blocknummer];
 
// Fügen Sie die zusätzlichen Seiten nach dem ausgewählten Block hinzu
if (isset($additionalPages[$blocknummer])) {
  $additionalPagesForBlock = $additionalPages[$blocknummer];
  $gesamtliste = array_merge($gesamtliste, $additionalPagesForBlock);
}
 
setPageOrder($gesamtliste, 'posttest');
 
Wie kann ich nun noch einstellen, dass die Blöcke gleichmäßig auf beide Altersgruppen (20-35 Jahre und 65 Jahre und älter) aufgeteilt werden und jede Altersgruppe jeden Block jeweils 60 Mal bearbeitet? Wenn die 60 erreicht ist, soll der Fragebogen beendet werden. Ich habe schon in der Anleitung gelesen, dass es mit der Quotierung funktionieren soll. Ich habe dazu einen neuen PHP-Code auf der Seite erstellt, die verschiedene demographische Daten abfragt:
$quotaAge = [
  1 => 180,  // 180 Personen in Altersgruppe 1 (20-35 Jahre)
  2 => 180,  // 180 Personen in Altersgruppe 2 (>=65 Jahre)
];
$age = value('EF07_01');
if ($age >=20) {
  $ageGroup = 1;
} elseif ($age >= 65) {
  $ageGroup = 2;
}
$casesAge    = statistic('count', 'EF07_01', $ageGroup); // Abruf der vorliegenden Fälle für diese Merkmalsausprägung

if (!array_key_exists($ageGroup, $quotaAge)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
  return 'redirect';
}

// Check if the number of completed blocks in this age group has reached the limit
if ($casesAge >= $maxCompletionsPerBlock) {
  redirect('https://www.panelprovider.com/?xyz=quotaABCDEF&uid=%reference%');
}

Welcher ist der richtige redirect Link? Und wie kann ich noch einfügen, dass jeder Block je Altersgruppe maximal 60mal bearbeitet werden soll?
Ich freue mich sehr über Hilfe!
by SoSci Survey (306k points)
> Wie kann ich nun noch einstellen, dass die Blöcke gleichmäßig auf beide Altersgruppen (20-35 Jahre und 65 Jahre und älter) aufgeteilt werden und jede Altersgruppe jeden Block jeweils 60 Mal bearbeitet?

Dafür müssten Sie den Zufallsgenerator SZ22 noch auf zwei Zufallsgeneratoren verteilen, wie hier beschrieben: https://www.soscisurvey.de/help/doku.php/de:create:randomization-per-block

Der Zufallsgenerator liefert Ihnen in einer Variable auch die Information, wie häufig er schon geleert wurde - nach 20 Leerungen würden Sie dann ein Screenout anzeigen: https://www.soscisurvey.de/help/doku.php/de:create:functions:pagestop#beispielscreenout

Für Detailsfragen wäre es sinnvoll, wenn Sie eine neue Frage im Support anlegen. Hier unten wird es langsam ein wenig unübersichtlich.

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

...