0 votes
in SoSci Survey (dt.) by s273725 (110 points)
edited by SoSci Survey

Für meine Datenerhebung arbeite ich mit einem Panel-Anbieter zusammen und habe dementsprechend Quoten für das Alter, Geschlecht, den Bildungsstatus und das Bundesland vorgegeben. Ich habe die Redirects vom Pandel Provider erhalten und mich dementsprechend an die Umsetzung der Quotierung (unverbundene Quoten) in SoSci-Survey gemacht. Ich habe mich an der technischen Umsetzung für unverbundene Quoten orientiert und die PHP-Codes wie beschrieben in der Seite nach den soziodemografischen Daten eingefügt, damit die Proband/-innen direkt eine Rückmeldung erhalten, ob sie noch an der Umfrage teilnehmen können. Nun kommen wir zu meinem Problem. Ich habe den Fragebogen getestet und bei jeder Durchführung wird mir die folgende Meldung angezeigt "Vielen Dank für Ihre Teilnahme! Leider gehören Sie bei dieser Umfrage nicht zur gesuchten Zielgruppe.". Ich bin nun überfragt wie ich dieses Problem lösen kann, weil ich mich 1:1 an den PHP-Codes von SoSci-Survey orientiert habe.

Hier mein PHP-Code (Seite direkt nach den soziodemografischen Daten).

$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  2 => 494,  // 494 Personen in Bildungsgruppe 1 (Haupt- und Mittlerer Schulabschluss) 
  3 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03_01');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaeducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}

Hier mein PHP-Code (vorletzte Seite).
// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03_01');
if ($education <= 2) {
  $educationGroup = 1;
} elseif ($education <= 4) {
  $educationGroup = 2;
} elseif ($education = 5) {
  $educationGroup = 3;
} else {
  $educationGroup = 4;
}

put('SD10_01', $ageGroup);
put('SD09_01', $gender);
put('SD11_01', $educationGroup);
put('SD12_01', $region);

1 Answer

0 votes
by SoSci Survey (327k points)

Bitte folgen Sie der Anleitung Quotierung -> Fehlersuche, um das Problem einzugrenzen. Wenn Sie die Ausgabe hier posten (am besten als Kommentar unter diese Antwort), kann ich gerne weiterhelfen.

by s273725 (110 points)
Bei der vorherigen Ausgabe habe ich vergessen den Screenout und Pagestopp auszukommentieren. Wenn ich die html()-Befehle wieder einfüge, erhalte ich wieder den Redirect Screenout mit den folgenden Debug-Informationen:

[Information]    Interview Nummer 451 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 12 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 1
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 23
[Information]    Antwort auf SD03 = 3
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 5
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 2
[Information]    Antwort auf SD06 = 3
[Information]    Antwort auf SD07 = 2
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 1
[Information]    value("SD05") = 2
[Information]    value("SD02_01") = 23
[Information]    value("SD03") = 3
debug()    Inhalt: $gender = 1 (string)
debug()    Inhalt: $region = 2 (string)
debug()    Inhalt: $ageGroup = 2 (integer)
debug()    Inhalt: $educationGroup = 1 (integer)
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet

PHP-Code
$quotaAge = [
  1 => 380,  // 380 Personen in Altersgruppe 1 (18-22 Jahre)
  2 => 380,  // 380 Personen in Altersgruppe 2 (23-26 Jahre)
];
$quotaGender = [
  1 => 380,  // 380 Frauen (Code 1)
  2 => 380   // 380 Männer (Code 2)
];
$quotaEducation = [
  1 => 494,  // 494 Personen in Bildungsgruppe 1 (Kein, Haupt- und Mittlerer Schulabschluss)
  2 => 380   // 380 Personen in Bildungsgruppe 2 (Fachhochschul- oder Hochschulreife)
];
$quotaRegion = [
  1 => 167,  // 167 aus NRW (Code 10)
  2 => 121,   // 121 aus BAY (Code 2)
  3 => 106,   // 106 aus BAWÜ (Code 1)
  4 => 76,   // 76 aus NDS (Code 9)
  5 => 61,   // 61 aus HS Männer (Code 7)
  6 => 38,   // 38 aus RLP (Code 11)
  7 => 34,   // 34 aus SACH (Code 14)
  8 => 34,   // 34 aus BER (Code 3)
  9 => 27,   // 27 aus SH (Code 15)
  10 => 15,   // 15 aus BB (Code 4)
  11 => 15,   // 15 aus SA (Code 13)
  12 => 15,   // 15 aus TH (Code 2)
  13 => 19,   // 19 aus HH (Code 6)
  14 => 15,   // 15 aus MV (Code 8)
  15 => 8,   // 8 aus SL (Code 12)
  16 => 8,   // 8 aus BRE (Code 5)
];

// Gender wird direkt ausgelesen
$gender = value('SD01');
// Region wird direkt ausgelesen
$region = value('SD05');
// Das Alter wird umkodiert
$age = value('SD02_01');
if ($age <= 22) {
  $ageGroup = 1;
} else {
  $ageGroup = 2;
}
// Die Education wird umkodiert
$education = value('SD03');
if ($education <= 4) {
  $educationGroup = 1;
} elseif ($education = 5) {
  $educationGroup = 2;
} else {
  $educationGroup = 3;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD10_01', $ageGroup);
$casesGender = statistic('count', 'SD09_01', $gender);
$casesEducation = statistic('count', 'SD11_01', $educationGroup);
$casesRegion = statistic('count', 'SD12_01', $region);

debug($gender);
debug($region);
debug($ageGroup);
debug($educationGroup);
// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender) || !array_key_exists($educationGroup, $quotaEducation) || !array_key_exists($region, $quotaRegion)) {
  redirect('https://survey.maximiles.com/screenout?p=128822_07358555&m=%SPM_PANELIST_ID%');
}
html('<p>Redirect Screenout</p>');
pageStop();

// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation    = $quotaEducation[$educationGroup];
$maxPerRegion = $quotaRegion[$region];

// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender) || ($casesEducation >= $maxPerEducation)|| ($casesRegion >= $maxPerRegion)) {
  // redirect('https://survey.maximiles.com/quotasfull?p=128822_5898d2e3&m=%SPM_PANELIST_ID%');
}
html('<p>Redirect ausgelöst</p>');
  pageStop();
by SoSci Survey (327k points)
Jetzt haben Sie den redirect()-Befehl vom Screenout aber nicht auskommentiert und den html()-Befehl unterhalb der geschweiften Klammer. Dieser Befehl wird also immer ausgeführt. Korrekt müsste es zum Testen so aussehen:

f (!array_key_exists(...)) {
  // redirect('https://survey.maximiles.com/screenout?...');
  html('<p>Redirect Screenout</p>');
  pageStop();
}

Gilt natürlich auch für das zweite redirect().

Für mich sieht allerdings alles korrekt aus. Es wäre nur gut, wenn wir nachvollziehen könnten, was ursprünglich schief gelaufen ist.
by s273725 (110 points)
Danke für den Hinweis! Ich habe es jetzt korrekt auskommentiert und es scheint zu laufen. Ich frage mich natürlich auch, woran es davor gelegen haben könnte und habe jetzt etwas Angst den Link zum Panel Provider weiterzuleiten. Aber scheinbar läuft es ja einwandfrei.

Debug-Informationen:
[Information]    Interview Nummer 453 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt milkalternatives wird verwendet
[Information]    Die Verweildauer auf Seite 3 war 15 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf SD01 = 2
[Information]    Keine Antwort für SD01_04
[Information]    Antwort auf SD02_01 = 23
[Information]    Antwort auf SD03 = 3
[Information]    Keine Antwort für SD03_06
[Information]    Antwort auf SD04 = 2
[Information]    Keine Antwort für SD04_10
[Information]    Antwort auf SD05 = 2
[Information]    Antwort auf SD06 = 3
[Information]    Antwort auf SD07 = 2
[Information]    Keine Antwort für SD07_04
[Information]    Bedingung in Filter SD07/1 ist nicht erfüllt.
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Information]    value("SD01") = 2
[Information]    value("SD05") = 2
[Information]    value("SD02_01") = 23
[Information]    value("SD03") = 3
debug()    Inhalt: $gender = 2 (string)
debug()    Inhalt: $region = 2 (string)
debug()    Inhalt: $ageGroup = 2 (integer)
debug()    Inhalt: $educationGroup = 1 (integer)
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 5
[Information]    Entsprechend Filter SD07/F1 wird Seite 5 (SD P) nicht angezeigt.
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage TI02
[Inhalt]    Erstelle Frage TX04
[Inhalt]    Erstelle Frage DH01
[Inhalt]    Erstelle Frage DH02
[Inhalt]    Erstelle Frage DH03
by SoSci Survey (327k points)
Der Panel-Provider soll erstmal einen Soft-Start machen - und sollten dann einzelne demografische Gruppen fehlen, würden sie nochmal spezifisch testen.
by s273725 (110 points)
Alles klar! ich danke Ihnen sehr für Ihre Unterstützung und schnelle Hilfe :-)!

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

...