0 votes
in SoSci Survey (dt.) by s169511 (135 points)

Lieber Support,

ich habe versucht die Multi-Level Struktur umzusetzen aber es kommt aktuell immer der Fehler, dass Index i nicht da wäre.

Allgemein:
Ich möchte, dass 20 Seiten in zufälliger Reihenfolge dargestellt werden, auf denen jeweils 1 unterschiedliches Bild, 2 Texte und der Befehl zum Abspeichern der interne Variablen zur Codierung des Bildes sind. Auf diesen 20 Seiten wird immer die gleiche Frage [RA01] abgefragt. Für die Randomisierung der Seiten habe ich die Zufallsvariable [ZU01] erstellt.
Es gibt aber noch eine weitere Randomisierung [ZU02], weil in drei Bedingungen unterschiedliche Ausgangstexte beschrieben werden. Diese Zuweisung findet schon zuvor im Fragebogen statt.

Inhalt einer Seite Also alle 20 Seiten unterscheiden sich und auf einer würde dann beispielsweise stehen:

  1. Das Aufrufen des Textes je nach Bedingung

    if (value('ZU02') == 1) { text('MA01'); } elseif (value('ZU02') == 2) { text('MA02'); }elseif (value('ZU02') == 3) { text('MA03');}

  2. Bild
  3. Text [TE24]
  4. PHP Code je nach Bild

    put('IV01_01', 3); put('IV01_02', 5); put('IV02_01', 2); put('IV02_02', 2); put('IV03_01', 2); put('IV03_02', 1); put('IV04_01', 2); put('IV04_02', 1); put('IV05_01', 3); put('IV05_02', 1); put('IV06_01', 3); put('IV06_02', 1); put('IV07_01', 4); put('IV07_02', 1); put('IV08_01', 02);

Ohne Multi-Level Struktur funktionieren beide Randomisierungen und die Internen Variablen super. Mit leider überhaupt nicht.

Für die Multi-Level Struktur habe ich bisher wie in der Anleitung den Top und Sub Fragebogen erstellt.
Im Top Fragebogen steht auf der entsprechenden Seite zum Starten der Loop:

$codes = array_values(valueList('ZU01'));
$i = loopToPage('loopEnd', count($codes));
multiLevelDown('Sub', $codes[$i]);
// Festlegen, dass die Zettel nicht automatisch abgelegt werden
randomUse('ZU01', array());

und zum Beenden der loop auf der nächsten Seite:

$data = multiLevelResponse();
// Hat der Teilnehmer die Frage beantwortet (Code 1)?
if ($data == 1) {
$i = loopIndex(); // Wiederholung 0, 1, ...
$num = $i + 1; // Nummer des gezogenen Zettels 1, 2, ...
randomUse('ZU01', array($num));
}

Im Sub Fragebogen steht:

// Item-ID vom übergeordneten Fragebogen entgegennehmen
$itemID = multiLevelData();
// Weiter Daten aus dem Datenbank für Inhalte abrufen und z.B. ein Bild anzeigen
$data = dbGet('i'.$itemID);
// ID in eine interne Variable speichern (wichtig)
put('IN01_01', $itemID);
// Auswahlfrage, ob man das Item bewerten will
question('RA01');

Und eine Seite später

multiLevelReturn(1);

Also habe ich quasi zwei Fragen:

  1. Wie bekomme ich den Inhalt der 20 Seiten in die Loop neben der Frage
  2. Wo ist mein Fehler in der Loop? Liegt es in meiner Internen Variable?

Ich bedanke mich jetzt schon al für die Hilfe, weil ich weiß wirklich nicht mehr weiter!

by s169511 (135 points)
edited by s169511
Da kommt: Inhalt: $zahl = 1 (integer), deswegen wird auch immer nur das erste Bild angezeigt. Aber sollte nicht bei dem RansomUse bei jeder Loop eine andere Zahl aus den 20 angelegten Zetteln gezogen werden?
In dem Kästchen mit dem Debug informationen steht aber auch davor value("ZU03") =""


Ich hatte da noch die Alternativ Idee zu der Randomisierung, dass man eine Liste von 1-20 anlegt, die einmal Shufflet und dann bei jedem Loop einen Punkt weiter in der Liste geht, das wäre ja in meinem Fall ausreichend weil ich ja nur die reihenfolge von 20 Bildern verändern muss.

also:
$n = 20
$index= range(1,$n)

shuffle($index)

und ab dann wüsste ich nicht mehr weiter:
$zahl = index[$i]+ 1 ## oder so?
by SoSci Survey (305k points)
Tun Sie das nicht ... das macht nur Ärger ;)

Haben Sie denn den Zufallsgenerator ZU03 über dem PHP-Code auf die Seite gezogen?

Was bezwecken Sie genau mit dieser Zeile?

randomUse('ZU03', array());
by s169511 (135 points)
Alles klar:)

Ja habe ich, die ZU03 ist aber immernoch leer..
Die Zeile habe ich aus dieser Anleitung: https://www.soscisurvey.de/help/doku.php/de:create:functions:randomuse

Das Array wird dann so wie ich verstanden habe bei jeder ziehung gefüllt oder?

Auf meiner zweiten Subfragebogen Seite habe ich dann diesen Code:
multiLevelReturn(1);

$data = multiLevelResponse();
// Hat der Teilnehmer die Frage beantwortet (Code 1)?

$i = loopIndex(2);  // Wiederholung 0, 1, ...
$num = $i + 1;     // Nummer des gezogenen Zettels 1, 2, ...
randomUse('ZU03', array($num));


Aber anders als in dem Beispiel, gibt es ja bei mir keine Antworten, zwischen denen ich differeziere, alle sollen alle bilder gezeigt werden.
by SoSci Survey (305k points)
> Ja habe ich, die ZU03 ist aber immernoch leer..

Könnten Sie bitte mal die komplette Debug-Information der Seite (also die mit Zufallsgenerator und PHP-Code) hier posten? Danke.

> Aber anders als in dem Beispiel, gibt es ja bei mir keine Antworten, zwischen denen ich differeziere, alle sollen alle bilder gezeigt werden.

Dann lassen Sie das randomUse() bitte weg. Das ist nur für solche Fälle, wo man aus einem großen Pool zieht und nicht weiß, ob alle Befragten alle Wiederholungen mitmachen.
by s169511 (135 points)
edited by s169511
Hab es raus gelöscht. Jetzt wurde der Code gezogen, aber $zahl ist immer noch leer:

[Information]    Interview Nummer 649 wird fortgesetzt
[Information]    Der Fragebogen NEW im Projekt hilfsangebote wird verwendet
[Information]    Die Verweildauer auf Seite 8 war 2 Sekunden
[Verarbeitung]    Lese Antworten von Seite 8
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 9 in Fragebogen NEW
[Inhalt]    Erstelle Frage ZU03
[Information]    Vom Zufallsgenerator ZU03 wurden folgende Codes gezogen: 7, 13, 6, 14, 3, 11, 18, 1, 4, 10, 17, 20, 19, 5, 15, 16, 2, 9, 12, 8
[Information]    loopToPage() wiederholt nun 2 Seiten 20 mal
[Information]    value("ZU03") = ""
[Information]    value("ZU02") = 3
[Information]    Neuer Datensatz erstellt (CASE )
[Information]    Wechsel des Datensatzes: CASE 649 → CASE 650
[Information]    Interview Nummer 650 wird fortgesetzt
[Verarbeitung]    Erstelle Seite 1 in Fragebogen Sub2
[Inhalt]    Zeige Text MA03
[Inhalt]    Erstelle Frage RA01
[Inhalt]    Erstelle Frage TE24
debug()    Inhalt: $zahl = 1 (integer)

1 Answer

0 votes
by SoSci Survey (305k points)
selected by s169511
 
Best answer

Danke für die Debug-Information. Soweit alles gut, jetzt müssen Sie nur noch in jedem Durchlauf eine andere der ZU03-Variablen auslesen. Im übergeordneten Fragebogen sieht das so aus.

$i = loopPage(20);
$code = value(id('ZU03', $i+1));

multiLevelDown(..., [
  'code' => $code,
  ...
]);

Und im untergeordneten wie bekannt:

$data = multiLevelData();
$code =$data['code'];

Das id('ZU03', $i+1) im ersten Code liefert im ersten Durchganz ZU03x01, im zweiten Durchgang ZU03x02 u.s.w. Die Alternative wäre:

$codes = valueList('ZU03');
$code = loopPage($codes);
by s169511 (135 points)
edited by s169511
Super! Danke! Der Loop funktioniert jetzt!

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

...