Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
de:survey:quota [09.09.2022 21:11] – [Funktionsweise Quotierung] admin | de:survey:quota [23.06.2025 14:15] (aktuell) – [Zählung und Screenout] admin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Quotierung ====== | ====== Quotierung ====== | ||
- | Bei der [[panels|Zusammenarbeit mit Panel-Anbietern]] werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: | + | Bei der Zusammenarbeit mit Panel-Anbietern werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: |
**Hinweis: | **Hinweis: | ||
- | **Tipp:** Verwenden Sie den Debug-Modus und sehen Sie die Debug-Informationen an, um die Funktion des Quotenstopps zu prüfen und wenn dieser im Test (z.b. mit sehr kleinen Quoten) nicht sofort funktioniert ([[: | + | ===== Übersicht ===== |
+ | - Erstellen Sie einen Baustein " | ||
+ | - Falls Sie die Merkmale für die Quotierung zunächst umkodieren müssen (z.B. eine offene Eingabe des Alters in Kategorien umkodieren), | ||
+ | - Erstellen Sie einen Baustein " | ||
+ | - Ziehen Sie den Baustein " | ||
+ | - Fügen Sie vor der " | ||
+ | - Veröffentlichen Sie den Fragebogen ([[: | ||
+ | - Öffnen Sie den Baustein zur Quotierung, setzen Sie dort die Zählung für die Quoten ggf. auf 0 zurück (rechte Spalte). In diesem Baustein können Sie im Lauf der Erhebung auch nachsehen, wie viele Personen pro Quota-Gruppe den Fragebogen bereits bearbeitet haben. | ||
- | ===== Minimal-Quotierung ===== | + | **Wichtig: |
- | Mitunter soll eine Erhebung mit dem Erreichen einer bestimmten Anzahl von Fällen beendet werden. | ||
- | Legen Sie im Fragenkatalog einen Text an, welcher nach Erreichen der Fallzahl angezeigt werden soll und fügen Sie auf der ersten Seite des Fragebogens ganz oben folgenden PHP-Code ein. Der Beispiel-Code geht davon aus, dass der Text die Kennung " | + | ===== Zählung |
- | <code php> | + | Wenn Ihre Abfrage des Quoten-Merkmals eine Option "keine Antwort" |
- | // Abgeschlossene Fragebögen zählen | + | |
- | $finished = statistic(' | + | |
- | // Filter zum Quotenstopp | + | |
- | if ($finished >= 250) { | + | |
- | // Text anzeigen | + | |
- | text(' | + | |
- | // Weiter-Knopf ausblenden | + | |
- | buttonHide(); | + | |
- | // Keine weiteren Inhalte dieser Seite zeigen | + | |
- | pageStop(); | + | |
- | } | + | |
- | </ | + | |
- | **Hinweis:** Dieser PHP-Code zähle alle Fälle mit MODE "interview" | + | |
+ | * Wenn Sie keine Zahl eintragen, dann erfolgt | ||
- | ==== Filterung ==== | + | Für die Quotierung gezählt werden alle Fälle, bei denen (a) der Quotierungs-Baustein verwendet wurde und (b) die den Status ('' |
- | Falls Sie sicherstellen | + | * Wenn Sie in unterschiedlichen Fragebogen separate Quote zählen |
+ | * Falls Sie die Quotierung nachträglich einfügen, werden nur die Fälle | ||
- | <code php> | + | Wenn Sie mehrere Fragebögen mittels [[: |
- | $time = caseTime('hitherto'); | + | |
- | if ($time >= 600) { | + | |
- | put('QS02_01', | + | |
- | } | + | |
- | </code> | + | |
- | Der eigentliche Quotestopp bezieht sich dann nicht mehr auf die Variable " | ||
- | <code php> | ||
- | // Gültige Fragebögen zählen | ||
- | $valid = statistic(' | ||
- | // Filter wie oben | ||
- | if ($valid >= 250) { | ||
- | text(' | ||
- | buttonHide(); | ||
- | pageStop(); | ||
- | } | ||
- | </ | ||
+ | ===== Unabhängige und verbundene Quoten ===== | ||
- | ===== Funktionsweise | + | Wenn Sie mehr als ein Merkmal zur Quotierung |
- | Die Quotierung nach demografischen Gruppen erfolgt | + | Wenn Sie in dem Baustein " |
- | - Abfrage | + | Wenn Sie mehrere Bausteine " |
- | | + | |
- | - Vergleich der Zählung mit einer Quotentabelle, | + | |
- | - Abweisen von Personen, wenn für eine demografische Zelle bereits ausreichend Fälle vorliegen, mittels '' | + | |
- | Mit " | + | **Zur Orientierung: |
- | Prinzipiell kann man unverbundene und verbundenen Quoten prüfen. Bei der unverbundenen Quotierung werden die Merkmale einzeln nacheinander geprüft (" | + | ===== Vollständigkeitsprüfung ===== |
- | Bei der verbundenen Quotierung | + | Standardmäßig |
- | Beim Zusammenspiel von '' | + | Wenn viele Teilnehmer:innen den Fragebogen gleichzeitig ausfüllen, kann es passieren, dass zunächst alle zugelassen |
- | - Nach Abfrage der Quotenmerkmale (auf der darauf folgenden Seite) wird die vom Teilnehmer angegeben Ausprägung gegen die Anzahl vorhandener Fälle geprüft. | ||
- | - Direkt vor dem Complete-Redirect wird die Ausprägung des Quoten-Merkmals in eine interne Variable kopiert. | ||
- | Sofern das Quotenmerkmal zunächst umkodiert werden muss, wird dieser PHP-Code in beiden Teilen verwendet. | + | ==== Vorzeitige Zählung ==== |
- | + | Sie können die Zählung bereits auf einer früheren Seite auslösen, indem Sie dort folgenden | |
- | ===== Technische Umsetzung (unverbundene Quoten) ===== | + | |
- | + | ||
- | Die technische Umsetzung erfolgt mittels [[: | + | |
- | + | ||
- | Im folgenden werden exemplarisch zwei Merkmale quotiert: Alter (offen abgefragt in Variable " | + | |
- | + | ||
- | + | ||
- | ==== Definition der Quoten ==== | + | |
- | + | ||
- | Zunächst wird eine Liste ([[: | + | |
- | + | ||
- | Im folgenden Beispiel wird der Screenout direkt in der Quotenprüfung integriert. Es wäre aber genauso ein vorgelagerter Screenout möglich. | + | |
<code php> | <code php> | ||
- | $quotaAge = [ | + | setStatus('quota count'); |
- | 2 => 200, // 200 Personen in Altersgruppe 2 (18-30 Jahre) | + | |
- | 3 => 250, // 250 Personen in Altersgruppe 3 (31-50 Jahre) | + | |
- | 4 => 150 // 150 Personen in Altersgruppe 4 (51-68 Jahre) | + | |
- | ]; | + | |
- | $quotaGender = [ | + | |
- | 1 => 300, // 300 Frauen (Code 1) | + | |
- | 2 => 300 // 300 Männer (Code 2) | + | |
- | ]; | + | |
</ | </ | ||
- | Beachten Sie, dass für die Altersgruppen 1 (Personen unter 18 Jahre) und 5 (Peronen älter als 68 Jahre) keine Einträge in der Tabelle vorliegen. Ebenso für das Geschlecht 3 (Personen, sie sich einem sonstigen Geschlecht zuordnen). Dies wird im Screenout (unten) durch die Funktion '' | ||
+ | ==== Ungültige Fälle aussortieren ==== | ||
- | ==== Merkmale auslesen | + | Eventuell möchten Sie Teilnehmer: |
- | Die Merkmalsausprägung des aktuellen Teilnehmers wird mittels '' | + | Platzieren Sie an geeigneter Stelle |
<code php> | <code php> | ||
- | // Geschlecht wird direkt ausgelesen | + | if ( |
- | $gender = value(' | + | (value(' |
- | // Das Alter wird umkodiert | + | (value(' |
- | $age = value(' | + | ) { |
- | if ($age < 18) { | + | |
- | $ageGroup | + | |
- | } elseif ($age <= 30) { | + | |
- | | + | |
- | } elseif ($age <= 50) { | + | |
- | | + | |
- | } elseif | + | |
- | $ageGroup = 4; | + | |
- | } else { | + | |
- | $ageGroup = 5; | + | |
} | } | ||
</ | </ | ||
+ | Um Fälle abzuweisen, die den Fragebogen in welcher als 5 Minuten (300 Sekunden) durchgeklickt haben, würden Sie folgenden PHP-Code oberhalb des '' | ||
- | ==== Zählung der vorliegenden Fälle ==== | ||
- | |||
- | Nun wird mitels '' | ||
- | |||
- | **Wichtig: | ||
- | |||
- | Im folgenden Code werden __nicht__ die Variablen gezählt, mit denen die Quotenmerkmale abgefragt wurden (" | ||
- | |||
- | **Wichtig: | ||
<code php> | <code php> | ||
- | // Abruf der vorliegenden Fälle für diese Merkmalsausprägung | + | if (caseTime('hitherto' |
- | $casesAge | + | |
- | $casesGender = statistic(' | + | |
- | + | ||
- | // Screenout | + | |
- | if (!array_key_exists($ageGroup, | + | |
- | redirect('https:// | + | |
- | } | + | |
- | + | ||
- | // Auslesen der Quoten für die angegeben Merkmale | + | |
- | $maxPerAge | + | |
- | $maxPerGender = $quotaGender[$gender]; | + | |
- | + | ||
- | // Quotenstopp | + | |
- | if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { | + | |
- | | + | |
} | } | ||
</ | </ | ||
- | Der Bool' | ||
- | Den Redirect-Link erhalten Sie vom Panel-Anbieter. Wichtig ist, dass Sie die Teilnehmer-ID übermitteln. Im Beispiel kommt der Platzhalter '' | + | ===== Bereinigte Quotierung ===== |
- | **Wichtig: | + | Nicht alle Befragten füllen den Fragebogen ordentlich aus. Hier wird erklärt, wie Sie die Quoten manuell nachjustieren. |
+ | Sie finden im Datensatz unter der Kennung des Quotierungs-Bausteins eine Variable '' | ||
- | ==== Kopieren der Quotenmerkmale ==== | + | |
- | + | - Bereinigen | |
- | Zuletzt müssen die Quoten-Merkmale noch in die internen Variablen kopiert werden. Das heißt, direkt vor dem Complete-Redirect, | + | - Erstellen Sie eine Häufigkeitsstatistik |
- | + | - Tragen Sie im Quotierungs-Baustein | |
- | Hierzu benötigen | + | |
- | + | ||
- | <code php> | + | |
- | put(' | + | |
- | put(' | + | |
- | </ | + | |
- | + | ||
- | Danach folgt üblicherweise der Complete-Redirect. | + | |
- | + | ||
- | <code php> | + | |
- | redirect(' | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ===== Verbundene Quoten ===== | + | |
- | + | ||
- | ==== Quotenprüfung zu Beginn ==== | + | |
- | + | ||
- | Wenn Sie mit verbundenen Quoten arbeiten, müssen Sie eine größere Anzahl an Quoten definieren: Ein Grenzwert pro demografischer Zelle. Bei 3 Ausprägungen für das Alter und 2 Ausprägungen für das Geschlecht sind das insgesamt 6 Quoten. | + | |
- | + | ||
- | Im folgenden PHP-Code wird eine demografische Zelle durch einen Code aus Altersgruppe (2-4) und Geschlecht (1-2) definiert. Die 6 Quoten sind der Übersichtlichkeit halber in 3 Zeilen mit jeweils 2 Quoten notiert -- technisch macht es keinen Unterschied, | + | |
- | + | ||
- | <code php> | + | |
- | $quota = [ | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ]; | + | |
- | </ | + | |
- | + | ||
- | Das Auslesen der quotenrelevanten Ausprägungen und das Umkodieren erfolgt zunächst genauso wie bei den unverbundenen Quoten. | + | |
- | + | ||
- | <code php> | + | |
- | // Geschlecht wird direkt ausgelesen | + | |
- | $gender = value(' | + | |
- | // Das Alter wird umkodiert | + | |
- | $age = value(' | + | |
- | if ($age < 18) { | + | |
- | | + | |
- | } elseif ($age <= 30) { | + | |
- | $ageGroup = 2; | + | |
- | } elseif ($age <= 50) { | + | |
- | $ageGroup = 3; | + | |
- | } elseif ($age <= 68) { | + | |
- | $ageGroup = 4; | + | |
- | } else { | + | |
- | $ageGroup = 5; | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | Allerdings wird zusätzlich noch eine Variable definiert, welche den Code der demografischen Zelle beinhaltet. Der Punkt ('' | + | |
- | + | ||
- | <code php> | + | |
- | // Definition einer Variable mit Altesgruppe und Geschlecht | + | |
- | // Aus 3 und 2 wird hier '3-2' | + | |
- | $demGroup = $ageGroup.' | + | |
- | </ | + | |
- | + | ||
- | Die Quotenprüfung erfolgt nun für dieses (kombinierte) Merkmal. Erneut wird eine interne Variable (SD04_01) verwendet, die vorab im **Fragenkatalog** definiert werden muss. | + | |
- | + | ||
- | <code php> | + | |
- | // Abruf der vorliegenden Fälle für diese Merkmalsausprägung | + | |
- | $cases = statistic(' | + | |
- | + | ||
- | // Screenout | + | |
- | if (!array_key_exists($demGroup, | + | |
- | redirect(' | + | |
- | } | + | |
- | + | ||
- | // Auslesen der Quote für die demografische Gruppe | + | |
- | $maxPerGroup = $quota[$demGroup]; | + | |
- | + | ||
- | // Quotenstopp | + | |
- | if ($cases >= $maxPerGroup) { | + | |
- | redirect(' | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== Speicherung des Zellen-Codes ==== | + | |
- | + | ||
- | Vor dem Complete-Redirect muss der Code für die demografische Zelle in die interne | + | |
- | + | ||
- | <code php> | + | |
- | // Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01 | + | |
- | put(' | + | |
- | </ | + | |
- | + | ||
- | Damit dieser Code funktioniert, | + | |
- | + | ||
- | <code php> | + | |
- | // Geschlecht wird direkt ausgelesen | + | |
- | $gender = value(' | + | |
- | // Das Alter wird umkodiert | + | |
- | $age = value(' | + | |
- | if ($age < 18) { | + | |
- | | + | |
- | } elseif ($age <= 30) { | + | |
- | $ageGroup = 2; | + | |
- | } elseif ($age <= 50) { | + | |
- | $ageGroup = 3; | + | |
- | } elseif ($age <= 68) { | + | |
- | $ageGroup = 4; | + | |
- | } else { | + | |
- | $ageGroup = 5; | + | |
- | } | + | |
- | + | ||
- | // Definition einer Variable mit Altesgruppe und Geschlecht | + | |
- | // Aus 3 und 2 wird hier '3-2' | + | |
- | $demGroup = $ageGroup.' | + | |
- | + | ||
- | // Speichern der Gruppenzugehörigkeit in der internen Variable SD04_01 | + | |
- | put(' | + | |
- | + | ||
- | // Complete-Redirect | + | |
- | redirect(' | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ===== Fehlersuche ===== | + | |
- | + | ||
- | Die Implementierung einer Quotierung ist im Moment nicht ganz trivial (Optimierung in Arbeit) | + | |
- | + | ||
- | Wir setzen voraus, dass Sie mir der Funktion der Debug-Information (siehe [[: | + | |
- | + | ||
- | Damit alle für die Fehlersuche notwendigen Informationen angezeigt werden, sind zwei Modifikationen sehr hilfreich. | + | |
- | + | ||
- | ==== (1) Redirect zweitweise deaktivieren ==== | + | |
- | + | ||
- | Deaktivieren Sie die Redirects, sodass die Debug-Informationen überhaupt angezeigt werden. Sie können das '' | + | |
- | + | ||
- | <code php> | + | |
- | // Quotenstopp | + | |
- | if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { | + | |
- | redirect(' | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | ... dann ändern Sie den Code zur Fehlersuche wie folgt. | + | |
- | + | ||
- | <code php> | + | |
- | // Quotenstopp | + | |
- | if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { | + | |
- | // redirect(' | + | |
- | html('< | + | |
- | pageStop(); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | ==== (2) Quoten-Zählung anzeigen ==== | + | |
- | + | ||
- | In der Debug-Information sehen Sie beriets, welche Werte '' | + | |
- | + | ||
- | Ergänzen Sie einfach für alle Filter-relevanten Variablen eine Zeile '' | + | |
- | + | ||
- | <code php> | + | |
- | // Zusätze Informationen anzeigen | + | |
- | debug($casesAge); | + | |
- | debug($maxPerAge); | + | |
- | debug($casesGender); | + | |
- | debug($maxPerGender); | + | |
- | + | ||
- | // Quotenstopp | + | |
- | if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) { | + | |
- | // redirect(' | + | |
- | html('< | + | |
- | pageStop(); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | Damit können Sie unmittelbar nachvollziehen, | + | |
- | + | ||
- | <code php> | + | |
- | // Auslesen der Quoten für die angegeben Merkmale | + | |
- | $maxPerAge | + | |
- | $maxPerGender = $quotaGender[$gender]; | + | |
- | </ | + | |
- | + | ||
- | Wenn z.B. unklar ist, woher der Wert für '' | + | |
- | + | ||
- | <code php> | + | |
- | // Auslesen der Quoten für die angegeben Merkmale | + | |
- | $maxPerAge | + | |
- | $maxPerGender = $quotaGender[$gender]; | + | |
- | + | ||
- | // Zusätzliche Informationen anzeigen | + | |
- | debug($ageGroup); | + | |
- | debug($quotaAge); | + | |
- | debug($maxPerAge); | + | |
- | </ | + | |
- | Diese Informationen helfen auch im [[https:// |