0 votes
in SoSci Survey (dt.) by s084281 (190 points)
closed by SoSci Survey

Liebes Support Team,

in einer mehrsprachigen Befragung (3 Länder) habe ich pro Land verschiedene Quoten für Alter, Geschlecht und Bildung. Mit eurer Hilfe habe ich dafür die Quoten und Redirects programmiert.
Obwohl bis auf eine Kategorie (hohe Bildung in Brasilien) keine der Obergrenzen erreicht ist, werden aktuell für jedes Land sehr viele Leute direkt abgewiesen, da die Quote offenbar voll ist.

Leider finde ich den Fehler in meiner Syntax nicht. Kann es möglich sein, dass der if-Befehl für die Landeszuweisungen nicht richtig funktioniert? Oder dass die Definierung der unterschiedlichen Quoten für das gleiche Merkmal nicht funktioniert?

Ich wäre sehr dankbar für jede Hilfe!

// 1. Definition der Quoten
$quotaAge = [
1 => 91, // 91 Personen in Altersgruppe 1 (55-59 Jahre in Deutschland)
2 => 76, // 76 Personen in Altersgruppe 2 (60-64 Jahre in Deutschland)
3 => 222, // 233 Personen in Altersgruppe 3 (ab 65 Jahre in Deutschland)
4 => 84, // 84 Personen in Altersgruppe 4 (55-59 Jahre in den USA)
5 => 87, // 87 Personen in Altersgruppe 5 (60-64 Jahre in den USA)
6 => 229, // 229 Personen in Altersgruppe 6 (ab 65 Jahre in den USA)
7 => 206, // 206 Personen in Altersgruppe 7 (55-64 Jahre in Brasilien)
8 => 194, // 194 Personen in Altersgruppe 8 (ab 65 Jahre in Brasilien) 
];
$quotaGender = [
1 => 183, // 183 in Gendergruppe 1 (männlich in Deutschland)
2 => 217, // 217 in Gendergruppe 2 (weiblich in Deutschland)
3 => 40, // 40 in Gendergruppe 3 (divers in Deutschland), nur damit sie nicht rausfallen
4 => 183, // 183 in Gendergruppe 4 (männlich in den USA)
5 => 217, // 217 in Gendergruppe 5 (weiblich in den USA)
6 => 40, // 40 in Gendergruppe 6 (divers in den USA), nur damit sie nicht rausfallen
7 => 181, // 181 in Gendergruppe 7 (männlich in Brasilien)
8 => 219, // 219 in Gendergruppe 8 (weiblich in Brasilien)
9 => 40, // 40 in Gendergruppe 9 (divers in Brasilien), nur damit sie nicht rausfallen
];
$quotaEducation = [
1 => 82, // 82 Personen in Bildungsgruppe 1 (Deutschland)
2 => 218, // 218 Personen in Bildungsgruppe 2 (Deutschland)
3 => 32, // 32 Personen in Bildungsgruppe 3 (Deutschland)
4 => 8, // 8 Personen in Bildungsgruppe 4 (Deutschland)
5 => 1, // 1 Person in Bildungsgruppe 5 (Deutschland)
6 => 1, // 1 Person in Bildungsgruppe 6 (Deutschland)
7 => 54, // 54 Personen in Bildungsgruppe 7 (Deutschland)
8 => 5, // 5 Personen in Bildungsgruppe 8 (Deutschland) 
9 => 0, // 0 Personen in Bildungsgruppe 9 (Deutschland)
10 => 0, // 0 Personen in Bildungsgruppe 10 (Deutschland)
11 => 0, // 0 Personen in Bildungsgruppe 11 (Deutschland)
12 => 40, // 40 Personen in Bildungsgruppe 12 (Deutschland) offen (damit es nicht rausfällt)
13 => 42, // 42 Personen in Bildungsgruppe 13 (USA)
14 => 124, // 124 Personen in Bildungsgruppe 14 (USA)
15 => 62, // 62 Personen in Bildungsgruppe 15 (USA)
16 => 39, // 39 Personen in Bildungsgruppe 16 (USA)
17 => 77, // 77 Personen in Bildungsgruppe 17 (USA)
18 => 40, // 40 Personen in Bildungsgruppe 18 (USA)
19 => 16, // 16 Personen in Bildungsgruppe 19 (USA)
20 => 0, // 0 Personen in Bildungsgruppe 20 (USA)
21 => 0, // 0 Personen in Bildungsgruppe 21 (USA)
22 => 0, // 0 Personen in Bildungsgruppe 22 (USA)
23 => 0, // 0 Personen in Bildungsgruppe 23 (USA)
24 => 40, // 40 Personen in Bildungsgruppe 24 (USA) offen (damit es nicht rausfällt)
25 => 238, // 238 Personen in Bildungsgruppe 25 (Brasilien) gering
26 => 101, // 101 Personen in Bildungsgruppe 26 (Brasilien) mittel
27 => 61, // 61 Personen in Bildungsgruppe 27 (Brasilien) hoch
28 => 40, // 40 Personen in Bildungsgruppe 28 (Brasilien) offen (damit es nicht rausfällt)
  ];

// 2. Merkmale auslesen und umkodieren
// Das Alter wird umkodiert
$age = value('SD01_01');

if ($age < 55)
{
  redirect('https://gateway.gapfish.com/routings/participation_id/finish/screenout');
}

if (value('LANGUAGE') == 'ger') {
// Deutschland
if ($age < 60) {
$ageGroup = 1;
} elseif ($age < 65) {
$ageGroup = 2;
} elseif ($age >= 65) {
$ageGroup = 3;
}
} elseif (value('LANGUAGE') == 'eng') {
    // USA
if ($age < 60) {
$ageGroup = 4;
} elseif ($age < 65) {
$ageGroup = 5;
} elseif ($age >= 65) {
$ageGroup = 6;
    }
} elseif (value('LANGUAGE') == 'por') {
    // Brasilien 
if ($age < 65) {
  $ageGroup = 7;
} elseif ($age >= 65) {
  $ageGroup = 8;
    }
}
//Geschlecht wird umkodiert
$gender = value('Gender');
if (value('LANGUAGE') == 'ger') {
// Deutschland 
if($gender = 1){
$genderGroup = 1;
}elseif($gender = 2){
$genderGroup = 2;
}elseif($gender = 3){
$genderGroup = 3;
}
} elseif (value('LANGUAGE') == 'eng') {
    // USA
if($gender = 1){
$genderGroup = 4;
}elseif($gender = 2){
$genderGroup = 5;
}elseif($gender = 3){
$genderGroup = 6;
}
} elseif (value('LANGUAGE') == 'por') {
    // Brasilien 
if($gender = 1){
$genderGroup = 7;
}elseif($gender = 2){
$genderGroup = 8;
}elseif($gender = 3){
$genderGroup = 9;
}
}
//Bildung wird umkodiert
$education = value('Edu');
if (value('LANGUAGE') == 'ger') {
// Deutschland 
if($education = 1){
$educationGroup = 1;
}elseif($education = 2){
$educationGroup = 2;
}elseif($education = 3){
$educationGroup = 3;
}elseif($education = 4){
$educationGroup = 4;
}elseif($education = 5){
$educationGroup = 5;
}elseif($education = 6){
$educationGroup = 6;
}elseif($education = 7){
$educationGroup = 7;
}elseif($education = 8){
$educationGroup = 8;
}elseif($education = 9){
$educationGroup = 9;
}elseif($education = 10){
$educationGroup = 10;
}elseif($education = 11){
$educationGroup = 11;
}elseif($education = 12){
$educationGroup = 12;
}
} elseif (value('LANGUAGE') == 'eng') {
    // USA
if($education = 1){
$educationGroup = 13;
}elseif($education = 2){
$educationGroup = 14;
}elseif($education = 3){
$educationGroup = 15;
}elseif($education = 4){
$educationGroup = 16;
}elseif($education = 5){
$educationGroup = 17;
}elseif($education = 6){
$educationGroup = 18;
}elseif($education = 7){
$educationGroup = 19;
}elseif($education = 8){
$educationGroup = 20;
}elseif($education = 9){
$educationGroup = 21;
}elseif($education = 10){
$educationGroup = 22;
}elseif($education = 11){
$educationGroup = 23;
}elseif($education = 12){
$educationGroup = 24;
}
} elseif (value('LANGUAGE') == 'por') {
    // Brasilien 
if($education = 1){
$educationGroup = 25;
}elseif($education < 5){
$educationGroup = 26;
}elseif($education < 12){
$educationGroup = 27;
}elseif($education = 12){
$educationGroup = 28;
}
}

// 3. Zählung der vorliegenden Fälle

//Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge = statistic('count', 'SD14_01', $ageGroup);
$casesGender = statistic('count', 'SD14_02', $genderGroup);
$casesEducation = statistic('count', 'SD14_03', $educationGroup);
//Screenout
if(! array_key_exists($ageGroup, $quotaAge)||
! array_key_exists($genderGroup, $quotaGender)||
! array_key_exists($educationGroup, $quotaEducation)){
redirect('https://gateway.gapfish.com/routings/participation_id/finish/screenout');
}

//Auslesen der Quoten für die angegebenen Merkmale
$maxPerAge = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$genderGroup];
$maxPerEducation = $quotaEducation[$educationGroup];
//Quotenstopp
if(($casesAge >= $maxPerAge)||($casesGender >= $maxPerGender)||($casesEducation >=                   $maxPerEducation)){
redirect('https://gateway.gapfish.com/routings/%reference%/finish/quota_full');
}
closed with the note: Es liegen keine weiteren Informationen zu dem Problem vor, welche für eine hilfreiche Antwort erforderlich wären.
by SoSci Survey (304k points)
Prüfen Sie doch bitte mal, welche Merkmale die Personen aus Brasilien angegeben haben, die dann abgewiesen wurden. In den erhobenen Daten sollte das gut ersichtlich sein.

Sie können auch noch eine zusätzliche interne Variable anlegen (ich nehme als Beispiel mal SD14_04) und dort hineinschreiben, was der Filter sich so denkt.

...
//Quotenstopp
put('SD14_01',
  $casesAge.'/'.$maxPerAge.' '.
  $casesGender.'/'.$maxPerGender.' '.
  $casesEducation.'/'.$maxPerEducation
);
if(($casesAge >= $maxPerAge)||($casesGender >= $maxPerGender)|| ...

Dann sehen Sie im Datensatz genauer, warum die Personen abgewiesen wurden.
by s084281 (190 points)
Vielen Dank für die schnelle Antwort!

Die internen Variablen hatte ich schon gebildet, und jetzt gecheckt.
Das Problem scheint zu sein, dass pro Eigenschaft (Alter, Geschlecht, Bildung) und pro Land alle ProbandInnen in nur eine ageGroup, genderGroup, und educationGroup eingeteilt werden. Also alle Deutschen werden unabhängig von ihrem Alter in ageGroup 1 zugeteilt, alle US-Amerikaner in ageGroup 4, und alle Brasilianer in ageGroup 7- und genau das gleiche passiert bei der Bildungsabfrage. Also haben zB alle Brasilianer in der internen Variable für Bildung die Gruppenzugehörigkeit 25, obwohl es verschiedene Bildungsgroups gibt (25 bis 28) und sie auch eigentlich diesen verschiedenen Gruppen zugeteilt werden sollten. Also aktuell werden alle aus einem Land jeweils der ersten Group jedes Merkmals zugeteilt, und daher werden jetzt fast alle aus allen Ländern abgewiesen, da die ersten Gruppen voll sind. Scheinbar scheint also etwas mit der Gruppenzuweisung nicht zu klappen, kann das sein?

Ich habe jetzt zusätzlich noch eine interne Variable für die Landeszugehörigkeit gebildet, aber auch damit funktioniert es nicht.
Außerdem habe ich auch Tabs vor die jeweils 2. if-Befehle gesetzt, aber das hat auch nichts geändert.

Vielen Dank für die Hilfe!
by SoSci Survey (304k points)
> Also alle Deutschen werden unabhängig von ihrem Alter in ageGroup 1 zugeteilt

Das klingt so, als könnte der PHP-Code nicht auf die Antwort der Befragten zugreifen.

Nur zur Sicherheit: Der PHP Code steht nicht auf serselben Seite wie die Frage SD01 - und in der Variable SD01_01 ist das Alter gespeichert?

Was wir denn in der Debug-Information angezeigt, wenn Sie den Fragebogen im Debug-Modus starten und als Alter z.B. 65 Jahre eingeben? Was zeigt der Fragebogen für $age und $ageGroup, wenn Sie unter dem IF für die Altersgruppe noch

debug($age);
debug($ageGroup);

ergänzen?

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

...