0 votes
in SoSci Survey (dt.) by s195837 (170 points)
edited by SoSci Survey

Ich habe das Problem, dass bei dem folgenden Code plötzlich bei allen Probanden der Re-direct erscheint, dass die quotafull ist, aber die Quote ist noch nicht voll... Bei den ersten 20 Probanden hat alles geklappt, dann habe ich die Zahlen erhöht weil quotafull kam, dann ging es, aber nur wenn die Anzahl bei allen Kombinationen gleich ist. Vorallem muss '1-1' & '1-2' die gleiche Anzahl haben wie die anderen Kombinationen auch...

Ich habe es aus schon mit der Fehlersuche probiert, aber das hilft mich nicht weiter.

Das ist der Code:

$quota = [
  '1-1' => 7, '1-2' => 8,  // 7 Frauen und 8 Männer für die Altersgruppe 1
  '2-1' => 13, '2-2' => 13,  // 13 Personen pro Geschlecht für die Altersgruppe 2
  '3-1' => 13, '3-2' => 14,  // 13 Frauen und 14 Männer für die Altersgruppe 3
  '4-1' => 13,  '4-2' => 14,   //  13 Frauen und 14 Männer für die Altersgruppe 4
  '5-1' => 15,  '5-2' => 15    //  15 Personen pro Geschlecht für die Altersgruppe 5
];

// Geschlecht wird direkt ausgelesen
$gender = value('SD01');
// Das Alter wird umkodiert
$age = value('SD03');
if ($age < 24) {
  $ageGroup = 1;
} elseif ($age <= 34) {
  $ageGroup = 2;
} elseif ($age <= 44) {
  $ageGroup = 3;
} elseif ($age <= 54) {
  $ageGroup = 4;
} elseif ($age <= 64) {
  $ageGroup = 5;
}

// Definition einer Variable mit Altesgruppe und Geschlecht
// Aus 3 und 2 wird hier '3-2'
$demGroup = $ageGroup.'-'.$gender;

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count', 'SD20_01', $demGroup);
 
// Screenout
if (!array_key_exists($demGroup, $quota)) {
  redirect('https://gateway.gapfish.com/routings/%reference%/finish/screenout');
}
 
// Auslesen der Quote für die demografische Gruppe
$maxPerGroup = $quota[$demGroup];
 
// Quotenstopp
if ($cases >= $maxPerGroup) {
  redirect('https://gateway.gapfish.com/routings/%reference%/finish/quota_full');
}

Worin liegt das Problem?

Bei SD03 werden schon Antworten zur Auswahl bereitgestellt, muss age dann überhaupt noch umkodiert werden? Würde nicht reichen:

// Auslesen Geschlecht & Alter 
$gender = value('SD01'); 
$ageGroup = value('SD03');

Ich erhalte die Fehlermeldung: Undefined array key "1-"..

Ich bin absolut verwirrt...

by s195837 (170 points)
edited by s195837
Ich erhalte folgende Fehlermeldung:
Die Variable SD01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Warnung (Seite 3)
Die Variable SD03 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

Den PHP-Code habe ich auf S. 3 und die beiden Fragen nach Alter & Geschlecht auf S. 2
Warum kann der Wert nicht ermittelt werden?
by SoSci Survey (305k points)
Sie haben den Test auf Seite 1 oder 2 begonnen?

Sind Sie sicher, dass die Variable zum Alter die Kennung SD03 hat? Also nicht die Frage, sondern die Variable, wo der Wert steht?

Was sagt denn die Debug-Information?
https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s195837 (170 points)
Auf S.1 ist der Einleitungstext und Auf S. 2 die Fragen zu Alter und Geschlecht und auf S. 3 der PHP Code

In SD03 wir nach dem Alter gefragt:
Ken    Text
03       18-24 Jahre
05       25 bis 34 Jahre
07        35-44 Jahre
09       45-54 Jahre
11        55-64 Jahre
13         Keine Angaben

Oder muss das Alter eine offene Frage sein?

Debug-Information sagt:

Die Variable SD01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Warnung (Seite 3)
Die Variable SD03 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

Undefined array key "1-"

  $maxPerGroup = $quota[$demGroup];      --> rot markiert
by SoSci Survey (305k points)
> Oder muss das Alter eine offene Frage sein?

Sie können das abfragen, wie Sie möchten. Aber der Code, den Sie oben gepostet haben, kodiert eine offene Angabe um in eine Kategorie. Dies ist nicht erforderlich, wenn Sie das Alter bereits in Kategorien abfragen.

> Debug-Information sagt:

Bitte posten Sie die vollständige Debug-Information, die Sie (s. Anleitung) rechts oben finden.
by s195837 (170 points)
Ich habe jetzt alternativ diesen Code:

PHP Code Seite 3:

// Quotenstopp insgesamt
if (statistic('count', 'SD22_01') > 125) { redirect('https://gateway.gapfish.com/routings/%reference%/finish/quota_full'); }

$quota = [
  '3-1' => 1, '3-2' => 1,  // 7 Frauen und 8 Männer für die Altersgruppe 1
  '5-1' => 13, '5-2' => 13,  // 13 Personen pro Geschlecht für die Altersgruppe 2
  '7-1' => 13, '7-2' => 14,  // 13 Frauen und 14 Männer für die Altersgruppe 3
  '9-1' => 13,  '9-2' => 14,   //  13 Frauen und 14 Männer für die Altersgruppe 4
  '11-1' => 15,  '11-2' => 15    //  15 Personen pro Geschlecht für die Altersgruppe 5
];

// Auslesen Geschlecht & Alter
$gender = value('SD01');
$ageGroup = value('SD03');


// Definition einer Variable mit Altersgruppe und Geschlecht
// Aus 3 und 2 wird hier 3-2
$demGroup = $ageGroup.'-'.$gender;

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count', 'SD23_01', $demGroup);

  // Auslesen der Quote für die demografische Gruppe
  $maxPerGroup = $quota[$demGroup];

  // Quotenstopp
  if ($cases >= $maxPerGroup) {
redirect('https://gateway.gapfish.com/routings/%reference%/finish/quota_full');
  }


Hier kommt die Warnung:

Warnung (Seite 3)
Die Variable SD01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Warnung (Seite 3)
Die Variable SD03 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
Fehler im Fragebogen (Seite 3)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key "-"
Zeile: 30

PHP-Code

027 $cases = statistic('count', 'SD23_01', $demGroup);
028
029    
030   $maxPerGroup = $quota[$demGroup];
031
032    
033   if ($cases >= $maxPerGroup) {

Und die Debug-Information:

[Information]    Interview gestartet (neue Nummer 1437)
[Information]    Der Fragebogen ExpV1 im Projekt forschungsprojekt09102023 wird verwendet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen ExpV1
[Information]    value("SD01") = ???
[Information]    value("SD03") = ???
[Inhalt]    Zeige Text Aufg



PHP-Code Vorletzte Seite:

// Auslesen Geschlecht & Alter
$gender = value('SD01');
$ageGrp = value('SD02');

// Kennung für die demografische Zelle erstellen
$demGroup = $gender.'-'.$ageGrp;

// Speichern vollständiger Fragebogen in der internen Variable BB24_01 für Quotenstopp insgesamt
put('SD22_01');
 
// Speichern der Gruppenzugehörigkeit in der internen Variable SD20_01
put('SD23_01', $demGroup);

// Speeder Screenout
if (caseTime('begin') < 200) {
redirect('https://gateway.gapfish.com/routings/%reference%/finish/screenout'); }
 
// Complete-Redirect
redirect('https://gateway.gapfish.com/routings/%reference%/finish/completed');

1 Answer

0 votes
by SoSci Survey (305k points)

[Information] Interview gestartet (neue Nummer 1437)
...
[Verarbeitung] Erstelle Seite 3 in Fragebogen ExpV1

Es scheint so, dass Sie den Test direkt ab Seite 3 gestartet haben. Dann können Sie in diesem Fall (CASE) aber die Fragen SD01 und SD03 gar nicht beantworten, bevor der Code ausgeführt wird. Bitte starten Sie ab Seite 1 oder Seite 2, damit Sie erst die Fragen angezeigt bekommen und dann auf "Weiter" klicken, bevor der PHP-Code ausgeführt wird.

by s195837 (170 points)
Okay ich habe auf S.1 gestartet und SD01 und SD03 beantwortet dann kommt folgende Debug-Information auf S.3:

[Information]    Interview Nummer 1498 wird fortgesetzt
[Information]    Der Fragebogen ExpV1 im Projekt forschungsprojekt09102023 wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 0 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Warnung]    Statt der erwarteten Angaben wurden Antworten für Seite 2 übermittelt, die Daten werden nicht verarbeitet
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen ExpV1
[Information]    value("SD01") = 1
[Information]    value("SD03") = 9
[Inhalt]    Zeige Text Aufg

Was hat es mit der Warnung auf sich?
by SoSci Survey (305k points)
> [Warnung]    Statt der erwarteten Angaben wurden Antworten für Seite 2 übermittelt, die Daten werden nicht verarbeitet

Offenbar wurde auf Seite 2 der "Weiter"-Knopf geklickt, dann hat der Browser Seite 3 angezeigt, und dann wurden die Daten nochmals übermittelt - vermutlich nachdem im Browser die Taste F5 zum Neu-Laden der Seite gedrückt wurde.
by s195837 (170 points)
Und worin liegt der Grund, dass der Quotenstopp nicht funktioniert?
by SoSci Survey (305k points)
Um diese Frage zu beantworten, lassen Sie sich den Code für die demografische Zelle ausgeben:

$demGroup = $ageGroup.'-'.$gender;
debug($demGroup);    // neu

Lassen Sie sich außerdem ausgeben, was die statistic() liefert:

$cases = statistic('count', 'SD23_01', $demGroup);
debug($cases);    // neu

Auf Basis dieser Information ist die Filterführung nachvollziehbar.
by s195837 (170 points)
Hinweis (Seite 3)
Debug-Information für $demGroup:
$demGroup = 9-2 (string)
Hinweis (Seite 3)
Debug-Information für $cases:
$cases = 0 (integer)
Jetzt kommt folgende Debug-Info raus:

[Information]    Interview Nummer 1565 wird fortgesetzt
[Information]    Der Fragebogen ExpV1 im Projekt forschungsprojekt09102023 wird verwendet
[Information]    Die Verweildauer auf Seite 2 war 5 Sekunden
[Verarbeitung]    Lese Antworten von Seite 2
[Information]    Antwort auf SD01 = 2
[Information]    Antwort auf SD03 = 9
[Information]    Antwort auf A401 = 4
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen ExpV1
[Information]    value("SD01") = 2
[Information]    value("SD03") = 9
debug()    Inhalt: $demGroup = 9-2 (string)
debug()    Inhalt: $cases = 0 (integer)
[Inhalt]    Zeige Text Aufg

Stimmt da was mit meiner internen Variable nicht? Was muss ich da tun?
by s195837 (170 points)
Könnte ich bitte dazu eine Information erhalten?...
by SoSci Survey (305k points)
Natürlich antworten wir auch Sonntags gerne, damit Sie nicht warten müssen :)

> debug()    Inhalt: $demGroup = 9-2 (string)

Die demografische Zelle hat den Code 9-2. Dieser Code taucht in Ihrer Liste der Quoten mit n=14 auf. Also dürfte bei n=0 (aktueller Wert) kein Screenout erfolgen.

Und soweit ich in der Debug-Information sehe, erfolgte auch kein Screenout/Quotenstopp, korrekt? Dann passt ja alles soweit.

Wenn Sie die Debug-Information auch bei einem unerwarteten Quotenstopp untersuchen möchten, dann kommentieren Sie die redirect()-Zeilen aus und zeigen Sie stattdessen eine Information, also:

// Quotenstopp
if ($cases >= $maxPerGroup) {
    // redirect('https://gateway.gapfish.com/routings/%reference%/finish/quota_full');
    html('<p>Quotenstopp</p>');
}

Dieses Vorgehen ist auch hier beschrieben:
https://www.soscisurvey.de/help/doku.php/de:survey:quota#fehlersuche

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

...