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

Liebes SosciSurvey Support Team,

ich habe für die Zusammenarbeit mit einem Panel-Anbieter am Anfang des Fragebogens verbundene Quoten programmiert mit 5 Altersgruppen und 2 Geschlechtsausprägungen. Die interne Variable heißt SD11_01. Auf der Seite mit der Kennung RQ ist der Redirect Link für die vollen Quoten eingefügt. Hier der Code:

$quota = [
  '1-1' => 68, '1-2' => 62,  //  males,  females in age group 18-29
  '2-1' => 66, '2-2' => 63,    //  males, females in age group 30-39
  '3-1' => 60, '3-2' => 59,  //  males, females in age group 40-49
  '4-1' => 79, '4-2' => 78,  // males, females in age group 50-59
  '5-1' => 61, '5-2' => 65    //  males, females in age group 60-69
];
// Geschlecht wird direkt ausgelesen
$gender = value('SD05');

// Das Alter wird umkodiert
$age = value('SD10_01');
if ($age <= 29) {
  $ageGroup = 1;
} elseif ($age <= 39) {
  $ageGroup = 2;
} elseif ($age <= 49) {
  $ageGroup = 3;
} elseif ($age <= 59) {
  $ageGroup = 4;
} else {
  $ageGroup = 5;
}

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

// Speichern der Gruppenzugehörigkeit in der internen Variable SD11_01
put('SD11_01', $demGroup);

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$cases = statistic('count', 'SD11_01', $demGroup);
 
// Auslesen der Quote für die demografische Gruppe
$maxPerGroup = $quota [$demGroup];
 
// Quotenstopp
if ($cases >= $maxPerGroup) {
  goToPage('RQ');  // Gleich weiter zu Seite 20 mit Kennung "RQ" (QuotaFull)
}

Das Problem ist jetzt, dass die Teilnehmer:innen rausgescreent werden, obwohl die Quoten nicht voll sind. Ich habe die Quotierung mit eurer Hilfsseite programmiert und mich am Abschnitt "verbundene Stichproben" orientiert. Ich sehe leider nicht, wo der Fehler in meinem Code liegt. Könnten Sie mir weiterhelfen?

Kann es daran liegen, dass die Filterfragen zu Beginn gefragt werden und so wie ich es bisher im PHP Code geschrieben habe alle Aufrufe gezählt werden und nicht nur die Quoten für diejenigen, die den Fragebogen bis zum Ende ausgefüllt haben? Falls ja, wie berücksichtige ich, dass nur vollständig ausgefüllte Fragebögen für die Quotierung gezählt werden sollen?

Vielen Dank bereits im Voraus!

by s153789 (140 points)
Ich habe jetzt mit Hilfe alter Forenbeiträge (https://support.soscisurvey.de/?qa=3737/quotenstoppzahlung-erst-nach-complete), folgende Ergänzung vorgenommen:

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$criteria = statistic('filter', false, '(LASTPAGE >=17)');
$cases = statistic('count', 'SD11_01', $demGroup);

Der Fragebogen hat 18 Seiten und über statistic () habe ich vor der Zählung der Quoten in $demGroup, die abgeschlossenen Fragebögen gefiltert.

So müsste es jetzt stimmen oder?
by SoSci Survey (325k points)
Ob es stimmt testen Sie bitte mithilfe der Debug-Information (https://www.soscisurvey.de/help/doku.php/de:create:debugging) und der Funktion debug().

In 30 Zeilen PHP-Code kann sich ein Fehler gut verstecken, deshalb kann ich nicht per se sagen, ob alles korrekt funktioniert.
by SoSci Survey (325k points)
Generell ist die Kombination von statistic('filter') mit der Zählung relativ rechenaufwändig - wobei das für zu einigen tausend Fällen nicht kritisch ist. Besser wäre es, auf Seite 17 die demogrfaische Gruppe in eine interne Variable zu kopieren und diese dann für die Zählung zu verwenden.
by s153789 (140 points)
Insgesamt sollen 660 Teilnehmer:innen erhoben werden, das müsste dann von der Rechenleistung passen, wenn ich Ihre Anmerkung richtig verstehe?

Falls die Teilnehmer:in nicht mehr in die festgelegten Quoten passen, sollen sie direkt am Anfang des Fragebogens ausgescreent werden, weshalb ich dachte, die Zählung sollte auch direkt hinter die Filterfragen am Anfang des Fragebogens? Falls nichts gegen die Verwendung von statistic('filter') spricht, würde ich das jetzt so lassen?

1 Answer

0 votes
by s153789 (140 points)

Wenn ich den Debug Modus anschaue, erhalte ich folgende Informationen:
Geschlecht (SD05) und Alter (SD10_01) wurden richtig in der internen Variable SD11_01 als demografische Gruppe 1_1 gespeichert.
Der Filter hat korrekt die 554 bis zum Ende ausgefüllten Fragebögen gefiltert. Und der statistic (count) Befehl mit 48 Fällen (als $cases in interner Variable SD12_01 gespeichert) stimmt auch.

Ob der Quotenstopp bei Übersteigen der definierten Quoten funktioniert, kann ich jetzt im Debug Modus noch nicht testen, wenn noch nicht genügend Teilnehmer:innen teilgenommen haben nehme ich an?

by SoSci Survey (325k points)
Im Debug-Modus werden Test-Daten mitgezählt, im normalen Interview nicht. Dies nur als Info zu statistic()

Wenn Sie vor dem IF-Filter am Ende noch folgende Zeilen einfügen, dann sehen Sie, ob alles korrekt für den Vergleich übernommen wird:

debug($cases);
debug($maxPerGroup);

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

...