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

0 votes

Hallo liebes Sosci Survey Team

Für die Datenerhebung über einen Panelanbieter habe ich eine Quotierung (Alter, Geschlecht, Bildung) im Fragebogen eingefügt. Zuvor habe ich (auf einer separaten Seite, Q1) ein Screenout-Redirect beim Alter eingefügt, um unter 18 Jährige oder über 74 Jährige auszuschliessen. Dieser Screenout funktioniert auch, wenn ich z.B. beim Alter 16 oder 80 Jahre eingebe. Gebe ich aber ein Alter zwischen 18-74 Jahre ein, erfolgt immer ein Quota-Full Redirect zum Panelanbieter.

In der Debug-Information (über die Fehlersuche bei Quotierung) habe ich gesehen, dass die Anzahl Fälle bei Alter, Geschlecht und Bildung gezählt werden und die angegeben Quoten übersteigt, weshalb der Redirect ausgelöst wird. Wie kann ich das umgehen (bzw. zurücksetzen?), damit ich den Fragebogen weiter testen kann? Ich möchte allerdings nicht meine bisher erhobenen Daten oder Anmerkungen aus dem Pretest löschen.

Oder sollte die Quotierung funktionieren, sobald der Fragebogen über den Panelanbieter verschickt wird?

Auf jeden Fall vielen Dank für jegliche Tipps und Hinweise!

Hier noch mein Code, evtl. habe ich ja da etwas falsch gemacht...?

Seite 1 - Q1

// Screenout Alter
$alter = value('SD02_01');
if ((value('SD02_01') < 18) or (value('SD02_01') > 74)) {
setNextPage('repeat');
redirect('XXXXXXscreenout-redirectXXXXXXXX', true);
}

Seite 2 - Q2

$quotaGender = [
'1' => 225, // 225 Frauen kodiert mit 1
'2' => 225 // 225 Männer kodiert mit 2
];

// Geschlecht wird direkt ausgelesen
$gender = value('SD01');

$quotaAge = [
'1' => 90, // 90 Personen in Altersgruppe 1 (18-29 Jahre)
'2' => 90, // 90 Personen in Altersgruppe 2 (30-39 Jahre)
'3' => 90, // 90 Personen in Altersgruppe 3 (40-49 Jahre)
'4' => 90, // 90 Personen in Altersgruppe 4 (50-59 Jahre)
'5' => 90 // 90 Personen in Altersgruppe 5 (60-74 Jahre)
];

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

$quotaEdu = [
'1' => 150, // 150 Personen in Bildungsgruppe 1 (niedrig)
'2' => 150, // 150 Personen in Bildungsgruppe 2 (mittel)
'3' => 150 // 150 Personen in Bildungsgruppe 3 (hoch)
];

// Bildung wird umkodiert
$edu = value('SD10');
if ($edu <= 2) {
    $eduGroup = 1;
} elseif ($edu <= 5) {
    $eduGroup = 2;
} else {
    $eduGroup = 3;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesGender = statistic('count', 'IV05_01', $gender);
$casesAge = statistic('count', 'IV04_01', $ageGroup);
$casesEdu = statistic('count', 'IV06_01', $eduGroup);

// Screenout
if (!array_key_exists($gender, $quotaGender) || !array_key_exists($ageGroup, $quotaAge) || !array_key_exists($eduGroup, $quotaEdu)) {
    redirect('XXXXXXXscreenout-redirectXXXXXXX', true);
}

// Auslesen der Quoten für die angegebenen Merkmale
$maxPerGender = $quotaGender[$gender];
$maxPerAge = $quotaAge[$ageGroup];
$maxPerEdu = $quotaEdu[$eduGroup];

// Quotenstopp
if (($casesGender >= $maxPerGender) || ($casesAge >= $maxPerAge) || ($casesEdu >= $maxPerEdu)) {
    redirect('XXXXquotafull-redirectXXXXX', true);
}

in SoSci Survey (dt.) by s235384 (110 points)

1 Answer

0 votes

Wenn Sie den Fragebogen im Debug-Modus starten, dann zählt statistic() auch alle Testdaten mit - wenn der Fragebogen hingegen regulär läuft, dann werden nur Fälle mit MODE=interview gezählt.

Kurze Antwort: Es sollte funktionieren :)

Lange Antwort: Mittels statistic('filter', ...) könnten Sie einstellen, dass nur neue Fälle gezählt werden. Allerdings bin ich nicht sicher, ob ein CASE>123 funktioniert oder ob Sie eine interne Variable erstellen und dieser mittels put() einen festen Wert zuweisen und anschließend nach diesem Filtern müssen. Tendenziell zweiteres.

Hinweis: Die Filter-Funktion bremst den Fragebogen aus und stellt eine zusätzliche Fehlerquelle für die Erhebung dar. Wenn Sie das vermeiden möchten, laden Sie Ihre Pretest-Daten herunter und löschen Sie diese dann.

by SoSci Survey (251k points)
Vielen Dank für Ihre Antwort!
Leider erfolgt der Redirect-Link (Quota full) auch, wenn ich den Fragebogen nicht im Debug-Modus starte, sondern den normalen Fragebogenlink mit einer Test-ID verwende. Da die Datenerhebung aber noch nicht begonnen hat, sollten ja die Quoten noch nicht gefüllt sein.. ? Ich hatte dieses Problem bei vorherigen Fragebögen nicht und weiss leider wirklich nicht, woran das liegen könnte.. Hätten Sie noch eine andere Idee, was ich probieren könnte? LG
Es scheint so, als würde Sosci Survey auch im "Normal-Modus" die Fälle in den Quoten im Hintergrund weiter zählen. Denn wenn ich das Code-Schnipsel für den Quotenstopp herausnehmen bzw. deaktiviere, läuft der Fragebogen ohne Redirect-Link weiter. Ich würde den Quotenstopp aber ungern bei der Erhebung weglassen, da es ja dann passieren kann, dass einige Quoten überfüllt und andere Quoten nicht ausreichend gefüllt sind...
Was steht denn bei den Test-Daten in der Variable MODE ?

Schreiben Sie doch das Ergebnis von statistic() mal in eine interne Variable - oder lassen Sie es testweise statt dem redirect() anzeigen:

$casesGender = statistic('count', 'IV05_01', $gender);
$casesAge = statistic('count', 'IV04_01', $ageGroup);
$casesEdu = statistic('count', 'IV06_01', $eduGroup);

// Screenout
if (!array_key_exists($gender, $quotaGender) || !array_key_exists($ageGroup, $quotaAge) || !array_key_exists($eduGroup, $quotaEdu)) {
    // redirect('XXXXXXXscreenout-redirectXXXXXXX', true);
    html('<p>casesGender: '.$casesGender.'</p>');
    html('<p>casesAge: '.$casesAge.'</p>');
    html('<p>casesEdu: '.$casesEdu.'</p>');
    pageStop();
}

Damit sollte sich das Problem besser eingrenzen lassen.
...