Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
de:survey:quota [19.07.2017 20:16] – [Quotierung] autsch | de:survey:quota [23.06.2025 14:15] (aktuell) – [Zählung und Screenout] admin |
---|
====== Quotierung ====== | ====== Quotierung ====== |
| |
Bei der [[panels|Zusammenarbeit mit Panel-Anbietern]] werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: Liegen für eine demografische Gruppe also genug Fragebögen vor, werden weitere Teilnehmer dieser Gruppe an eine Quotafull-Adresse des Panel-Anbieters zurück geschickt. | Bei der Zusammenarbeit mit Panel-Anbietern werden oft quotierte Stichproben gebucht. Der Fragebogen ist dann für den Quotenstopp verantwortlich: Liegen für eine demografische Gruppe also genug Fragebögen vor, werden weitere Teilnehmer dieser Gruppe an eine QuotaFull-Adresse des Panel-Anbieters zurück geschickt. |
| |
**Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt. | **Hinweis:** Für andere Formen der Rekrutierung ist ein Quotenstopp i.d.R. __nicht__ sinnvoll. Die Folge wäre, dass man die Mehrheit der interessierten Teilnehmer abweist -- zugleich aber noch rekrutieren muss, damit man die fehlenden demografischen Gruppen vervollständigt. |
| |
**Hinweis:** Vorsicht beim Zusammenspiel von ''[[:de:create:functions:statistic]]'' und ''[[:de:create:functions:redirect]]''. Der Befehl ''redirect()'' markiert die Fragebögen von Abbrechern und aufgrund der Quote abgewiesenen Teilnehmern als "abgeschlossen", sodass sie von ''statistic()'' gezählt werden. Um hier falsche Zählungen zu vermeiden, ist es sinnvoll, die zu zählende Variable gegen Ende des Fragebogens mittels ''[[:de:create:functions:put]]'' in eine [[:de:create:questions:internal]] zu kopieren und mittels ''statistic()'' dann die interne Variable abzuzählen. Alternativ kann man in einer internen Variable für vollständige Fälle einen bestimmten Wert ablegen und dann mit ''statistic('filter', ...)'' oder ''statistic('crosscount', ...)'' arbeiten. | ===== Übersicht ===== |
| |
**Tipp:** Verwenden Sie den Debug-Modus und sehen Sie die Debug-Informationen an, wenn die Quotenstopp im Test nicht sofort funktioniert ([[:de:create:filter-solving]]). | - Erstellen Sie einen Baustein "Panel-Redirects" und tragen Sie dort die Redirect-URLs ein, die Sie vom Panel-Anbieter bekommen haben, mindestens eine URL für //QuotaFull// und eine für //Complete// ([[:de:create:tasks:panel-redirects]]). |
| - 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 "Antworten unmkodieren" und tragen Sie dort die Original-Variablen und die Regeln für das Umkodieren ein. |
| - Erstellen Sie einen Baustein "Quotierung", wählen Sie dort die Merkmale aus, welche für die Quotierung herangezogen werden sollen und tragen Sie nach dem Speichern die Quoten pro Quota-Gruppe ein. Lassen Sie Die Anzahl frei, wenn Personen in der entsprechenden Quota-Gruppe direkt abgewiesen werden sollen (//Screenout//). |
| - Ziehen Sie den Baustein "Panel-Redirects" unter **Fragebogen zusammenstellen** auf die erste Seite des Fragebogens, den Baustein "Quotierung" (ggf. auch Bausteine zum Umkodieren der Antworten) auf die früheste Seite, auf welcher Teilnehmer:innen abgewiesen werden sollen, wenn die Quota-Gruppe voll ist. |
| - Fügen Sie vor der "Letzten Seite" des Fragebogens eine zusätzliche Seite ein, ziehen Sie ein Element "PHP-Code" in die Seite und schreiben Sie den folgenden PHP-Code hinein: ''%%setStatus('complete');%%'' |
| - Veröffentlichen Sie den Fragebogen ([[:de:survey:publish]]) und öffnen Sie den anfangs erstellen "Panel-Redirects" Baustein. Sehen Sie in diesem Baustein nach, wie der "Link für das Panel" lautet (inkl. der Parameter für die Panel-ID) und teilen Sie dem Panel-Anbieter diesen Link mit. |
| - Ö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. |
| |
Mit "demografische Zelle" oder "demografische Gruppe" ist jeweils eine Kombination der zu quotierenden Merkmale gemeint (z.B. "männliche Teilnehmer zwischen 15 und 25 Jahre", wenn Alter und Geschlecht quotiert werden). | **Wichtig:** Der Screenout für ungeeignete Teilnehmer:innen funktioniert nur dann, wenn Sie in den "Panel-Redirects" eine Screenout-URL eingetragen oder einen Text für den Screenout ausgewählt haben. |
| |
Prinzipiell kann man unverbundene und verbundenen Quoten prüfen. Bei der unverbundenen Quotierung werden die Merkmale einzeln nacheinander geprüft ("Liegen schon genug Fragebögen von männlichen Teilnehmern vor?" "Liegen schon genug Fragebögen von jungen Teilnehmern vor?"). Entsprechend wäre es bei der unbverbundenen Quotierung möglich, die Quoten mit jungen Frauen und alten Männer zu füllen -- ganz ohne junge Männer. Bei der verbundenen Quotierung werden die demografischen Zellen überprüft ("Liegen schon genug Fragebögen von jungen männlichen Teilnehmen vor?"). Die verbundene Quotierung ist damit weniger anfällig für systematische Verzerrungen (Konfundierung zwischen den demografischen Merkmalen) -- allerdings werden auch mehr potenzielle Teilnehmer abgewiesen. | |
| |
| ===== Zählung und Screenout ===== |
| |
===== Technische Umsetzung ===== | Wenn Ihre Abfrage des Quoten-Merkmals eine Option "keine Antwort" erlaubt, dann können Sie im Quotierungs-Baustein auch dafür eine Anzahl eintragen. |
| |
Die technische Umsetzung erfolgt mittels [[:de:create:php]] und umfasst aus drei oder vier Teile: | * Wenn Sie eine Zahl eintragen, kann die entsprechende Anzahl Teilnehmer:innen, die "keine Antwort" auswählen, teilnehmen. |
| * Wenn Sie keine Zahl eintragen, dann erfolgt ein Screenout. Das heißt, es wird der Screenout-Redirect verwendet, der im [[:de:create:tasks:panel-redirects|Panel-Redirects]]-Baustein angegeben wurde oder der Screenout-Text gezeigt, der dort ausgewählt wurde. |
| |
- Eine Definition, welche Gruppen es gibt und wie viele Teilnehmer dort jeweils erlaubt sind. Hierfür kommt ein sog. [[de:create:array|Array]] zum Einsatz. | Für die Quotierung gezählt werden alle Fälle, bei denen (a) der Quotierungs-Baustein verwendet wurde und (b) die den Status (''STATUS'') COMPLETE oder FINISHED (und keinen ''STATUS'') haben. |
- Falls ein Merkmal umkodiert werden muss (z.B. Alter in Alterskategorien), werden [[:de:create:questions:internal|interne Variablen]] in Verbindung mit der Funktion ''[[:de:create:functions:put]]'' verwendet. | |
- Die eigentliche Überprüfung, ob der aktuelle Teilnehmer noch teilnehmen darf. Dies erfolgt mittels der PHP-Funktion ''[[:de:create:functions:statistic]]''. | |
- Eine Umleitung (Redirect) von Teilnehmern, wenn eine demografische Zelle bereits gefüllt ist. Diese erfolgt mittels ''[[:de:create:functions:redirect]]'' und i.d.R. sind noch [[:de:create:placeholders]] erforderlich, um die Teilnehmer-ID des Panels an den Panel-Anbieter zu übermitteln ([[panels]]). | |
| |
Die zentrale Funktion hierbei ist ''[[:de:create:functions:statistic]]'', sie zählt, wie viele Fragebögen mit bestimmten Kriterien bereits vorliegen. Standardmäßig zählt ''statistic()'' nur abgeschlossene Fragebögen (Variable [[:de:results:variables#interview-fortschritt|FINISHED]]), d.h. jene, bei denen die letzte Seite erreicht oder en ''redirect()'' aufgerufen wurde. | * Wenn Sie in unterschiedlichen Fragebogen separate Quote zählen möchten, dann legen Sie für jeden Fragebogen einen eigenen Baustein "Quotierung" an. |
| * Falls Sie die Quotierung nachträglich einfügen, werden nur die Fälle ab diesem Zeitpunkt gezählt - passen Sie die Zählung im Baustein bei Bedarf manuell an. |
| |
**Wichtig:** Wenn Sie ''redirect()'' verwenden, um Teilnehmer an den Anbieter zurückzuleiten, die zu schnell geantwortet haben ("Speedster") oder deren Antworten Qualitätsmängel aufweisen ("Quality"), dann setzen Sie in der ''[[:de:create:functions:redirect]]''-Funktion den zweiten Parameter (''true''), damit diese Teilnehmer nicht für die Quote gezählt werden. Damit die Teilnehmer den Fragebogen dann nicht weiter ausfüllen können, setzen Sie ein ''setNextPage('repeat');'' vor das ''redirect()''. | Wenn Sie mehrere Fragebögen mittels [[:de:create:multilevel]] oder ''[[:de:create:functions:gotoquestionnaire]]'' verknüpfen, sind die "Panel-Redirects" und die "Quotierung" nur einmal erforderlich, üblicherweise im übergeordneten/ersten Fragebogen. Der Aufruf von ''setStatus()'' funktioniert dann auch in einem unter-/nachgeordneten Fragebogen. |
| |
| |
===== Umsetzung: Ein Merkmal ===== | |
| |
Im einfachsten Fall ist nur ein Merkmal zu quotieren. Das folgende Beispiel geht davon aus, dass Sie das Alter auf Seite 2 des Fragebogens mit einer geschlossenen Auswahl-Frage "AB01" in 6 Stufen abgefragt haben: | ===== Unabhängige und verbundene Quoten ===== |
| |
1 = jünger als 18 Jahre | Wenn Sie mehr als ein Merkmal zur Quotierung heranziehen, gibt es zwei Möglichkeiten: Sie können entweder für jedes Merkmal getrennte (unabhängige) Quoten definieren oder Sie können für alle möglichen Kombinationen aus den Ausprägungen der beiden Merkmale Quoten definieren (verbundene Quoten). |
2 = 18-25 Jahre | |
3 = 26-35 Jahre | |
4 = 36-45 Jahre | |
5 = 46-55 Jahre | |
6 = älter als 55 Jahre | |
| |
Sie möchten nur Personen von 18 bis 45 Jahre befragen, daher werden Teilnehmer, die nicht die Antwort 2, 3 oder 4 gewählt haben, gleich via Screenout zum Panel-Anbieter zurück geschickt. Der folgende Code geht davon aus, dass Sie eine Teilnehmer-ID im Platzhalter ''%panelID%'' gespeichert haben, wie in der Anleitung empfohlen: [[:de:survey:panels]] | Wenn Sie in dem Baustein "Quotierung" mehrere Merkmale definieren, werden verbundene Quoten überprüft. |
| |
<code php> | Wenn Sie mehrere Bausteine "Quotierung" erstellen, und darin jeweils ein Merkmal auswählen, werden die Quoten der Merkmale unabhängig voneinander überprüft. In dem Fall platzieren Sie unter **Fragebogen zusammenstellen** alle Quotierungs-Bausteine (einen pro Merkmal) im Fragebogen. |
$ageGrp = value('AB01'); | |
if (($ageGrp < 2) or ($ageGrp > 4)) { | |
// Hier der individuelle Screenout-Link für die Studie | |
redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%'); | |
} | |
</code> | |
| |
Nun definieren Sie in einem [[de:create:array|Array]], wie viele Teilnehmer pro Ausprägung erlaubt sind. Im folgenden Beispiel wären das 100 Personen in Gruppe 2 (18-25) und jeweils 200 Personen in den beiden anderen Gruppen 3 und 4. | **Zur Orientierung:** Bei zwei Merkmalen ist die verbundene Quotierung in aller Regel sinnvoll, bei drei oder mehr Merkmalen sind verbundene Quoten eventuell nur schwer zu erfüllen. Klären sie mit dem Panel-Anbieter vorab, was Sie brauchen und wofür Sie zahlen. |
| |
<code php> | ===== Vollständigkeitsprüfung ===== |
$limits = array( | |
2 => 100, | |
3 => 200, | |
4 => 200 | |
); | |
</code> | |
| |
Dieser PHP-Code hat keine direkte Auswirkung auf die Verarbeitung der Seite. Die Obergrenzen werden erst weiter unten verwendet. | Standardmäßig werden Fälle für die Quotierung gezählt, wenn der Befehl ''%%setStatus('complete')%%'' aufgerufen wird, also am Ende des Interviews. |
| |
Nun wird ermittelt, wie viele abgeschlossene Fragebögen für die Altergruppe des aktuellen Teilnehmers schon vorliegen. Welche Altergruppe das ist, wurde oben bereist via ''[[:de:create:functions:value]]'' ermittelt -- hat man den Screenout im selben PHP-Code wie ''statistic()'', kann die erste Zeile weggelassen werden. | Wenn viele Teilnehmer:innen den Fragebogen gleichzeitig ausfüllen, kann es passieren, dass zunächst alle zugelassen werden, weil die Quoten ja noch nicht gezählt wurden, und die Quoten überschritten werden, wenn die Personen das Ende des Fragebogens erreichen. Allerdings haben die Panel-Anbieter normalerweise genug Erfahrung, um solche Situationen zu vermeiden. |
| |
<code php> | |
$ageGrp = value('AB01'); | |
$n = statistic('count', 'AB01', $ageGrp); // Abzählen der Fragebögen mit AB01 = $ageGroup | |
</code> | |
| |
**Wichtig:** Die Antwort des Teilnehmers wird erst zum Server übermittelt, wenn sie der Teilnehmer mittels "Weiter" abgeschickt hat. Wenn die Frage "AB01" auf Seite 2 des Fragebogens steht, kann ''value()'' frühestens auf Seite 3 platziert werden. | ==== Vorzeitige Zählung ==== |
| |
In Variable ''$n'' ist nun die Anzahl der ausgefüllten Fragebögen aus der Altersgruppe des Teilnehmers (''$ageGroup'') abgelegt. Diesen Wert kann man nun mit den oben definierten Obergrenzen (''$limits'') vergleichen. Die eckigen Klammern sorgen dafür, dass die richtige Obergrenze verwendet wird. | Sie können die Zählung bereits auf einer früheren Seite auslösen, indem Sie dort folgenden PHP-Code platzieren. |
| |
<code php> | <code php> |
if ($n >= $limits[$ageGroup]) { | setStatus('quota count'); |
// Hier der individuelle Quotafull-Link für die Studie | |
redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%'); | |
} | |
</code> | </code> |
| |
Nachfolgended nochmal der komlette PHP-Code: | |
| |
<code php> | ==== Ungültige Fälle aussortieren ==== |
// Altersgruppe des aktuellen Teilnehmers auslesen | |
$ageGrp = value('AB01'); | |
| |
// Screenout | Eventuell möchten Sie Teilnehmer:innen nicht zählen, deren Antworten bestimmte Kriterien nicht erfüllen. Im Idealfall sollten sie vom Panel-Anbieter einen "Low Quality" oder "Quality Fail" Redirect für solche Teilnehmer:innen bekommen und bei den "Panel-Redirects" eingetragen haben. |
if (($ageGrp < 2) or ($ageGrp > 4)) { | |
redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%'); | |
} | |
| |
// Obergrenzen | Platzieren Sie an geeigneter Stelle (z.B. auf der Seite mit einer Kontrollfrage in dem Bereich "Verarbeitung der Antworten mittels PHP" oder auf der nächsten Seite ganz oben als "PHP-Code") etwa folgenden PHP-Code, um Fälle auszufiltern, in denen das Instructed-Response Item SK01_04 nicht mit dem Wert 1 oder das Item SK03_05 nicht mit dem Wert 5 beantwortet wurde. |
$limits = array( | |
2 => 100, | |
3 => 200, | |
4 => 200 | |
); | |
| |
// Ermittlung der Anzahl abgeschlossener Fragebögen in dieser Altersgruppe | <code php> |
$nQnr = statistic('count', 'AB01', $ageGrp); | if ( |
// Auslesen des Limit für diese Altergrsuppe | (value('SK01_04') != 1) || |
$nMax = $limits[$ageGrp]; | (value('SK03_05') != 5) |
| ) { |
// Quotenstopp | setStatus('quality fail'); |
if ($nQnr >= $nMax) { | |
// Hier der individuelle Quotafull-Link für die Studie | |
redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%'); | |
} | } |
</code> | </code> |
| |
| Um Fälle abzuweisen, die den Fragebogen in welcher als 5 Minuten (300 Sekunden) durchgeklickt haben, würden Sie folgenden PHP-Code oberhalb des ''%%setStatus('complete')%%'' platzieren. |
| |
===== Umkodieren ===== | |
| |
Falls das Alter nicht geschlossen, sondern offen abgefragt wurde, muss es zunächst umkodiert werden. Die Altersgruppe muss dann im Datensatz abgelegt werden, damit ''statistic()'' korrekt zählen kann. | |
| |
Legen Sie zunächst eine Frage vom Typ [[:de:create:questions:internal|interne Variablen]] an (z.B. Kennung "IV01") und darin eine Variable (Item), welche Sie z.B. mit "Altersgruppe" beschriften (Kennung z.B. "IV01_01"). | |
| |
Das folgende Beispiel geht davon aus, dass die offene Frage nach dem Alter mit einer Texteingabe (Beschränkung "nur Ziffern") mit der Kennung "AB02_01" abgefragt wird. | |
| |
<code php> | <code php> |
$age = (int)value('AB02_01'); | if (caseTime('hitherto') < 300) { |
| setStatus('quality fail'); |
// Umkodieren | |
if ($age < 18) { | |
$ageGrp = 1; | |
} elseif ($age <= 25) { | |
$ageGrp = 2; | |
} elseif ($age <= 35) { | |
$ageGrp = 3; | |
} elseif ($age <= 45) { | |
$ageGrp = 4; | |
} else { | |
$ageGrp = 5; | |
} | } |
| |
// Im Datensatz speichern | |
put('IV01_01', $ageGrp); | |
</code> | </code> |
| |
Dieser PHP-Code wird einfach vor die Qutierung (s. oben) gesetzt. Im PHP-Code für die Quotierung würde dann ''AB01'' durch ''IV01_01'' (die kennung der internen Variable) ersetzt. | |
| |
| ===== Bereinigte Quotierung ===== |
| |
===== Unverbundene Quoten ===== | Nicht alle Befragten füllen den Fragebogen ordentlich aus. Hier wird erklärt, wie Sie die Quoten manuell nachjustieren. |
| |
Die Prüfung unverbundener Quoten erfolgt nun einfach dadurch, dass man den PHP-Code für die Quotierung (s. oben) für jedes Merkmal wiederholt. Dabei müssen lediglich die Kennung für die Variable (''AB01'') und die Obergrenzen (''$limits'') angepasst werden. | Sie finden im Datensatz unter der Kennung des Quotierungs-Bausteins eine Variable ''_GRP''. Wenn Ihr Baustein die Kennung ''QT01'' hat, heißt die Variable z.B. ''QT01_GRP''. Hier wird eine Zahl oder ein Kürzel für die Quota-Gruppe gespeichert. |
| |
| - Laden Sie den Datensatz herunter. |
| - Bereinigen Sie den Datensatz. |
| - Erstellen Sie eine Häufigkeitsstatistik für die oben genannte Variable. |
| - Tragen Sie im Quotierungs-Baustein ein, wie viele gültige Fälle für jede Quota-Gruppe vorliegen. |
| |
===== Verbundene Quoten ===== | |
| |
Für verbundene Quoten wird ''statistic('crosscount', ...)'' statt ''statistic('count', ...)'' eingesetzt. Außerdem muss eine ID für die demografische Zelle erstellt werden. | |
| |
Das folgende Beispiel geht davon aus, dass die Altergruppe in Variable "IV01_01" vorliegt (Codes 2 bis 4, s. oben) und das Geschlecht in Variable "AB03" (1=weiblich, 2=männlich). | |
| |
Als Kennung für die demografische Zelle werden die beiden Zahlen einfach durch einen Bindestrich getrennt zusammengefügt. Der String '''2-1''' steht dann für weibliche Teilnehmer (2) aus der Altersgruppe 18-25 Jahre (1). Anhand dieser Kennungen werden die Obergrenzen definiert. | |
| |
<code php> | |
// Merkmale auslesen | |
$ageGrp = value('IV01_01'); | |
$gender = value('AB03'); | |
| |
// Evtl. Screenout | |
if (($ageGrp < 2) or ($ageGrp > 4) or ($gender < 1)) { | |
redirect('http://www.anbieter.com/p1234567/screenout.php?id=%panelID%'); | |
} | |
| |
// Kennung für die demografische Zelle erstellen | |
$demID = $ageGrp.'-'.$gender; | |
| |
// Obergrenzen definieren | |
$limits = array( | |
'1-1' => 50, | |
'1-2' => 50, | |
'2-1' => 100, | |
'2-2' => 100, | |
'3-1' => 100, | |
'3-2' => 100 | |
); | |
| |
// Abgeschlossene Fragebögen zählen | |
$n = statistic('crosscount', array('IV01_01', 'AB03'), array($ageGrp, $gender)); | |
| |
// Quoten prüfen | |
if ($n > $limits[$demID]) { | |
redirect('http://www.anbieter.com/p1234567/quotafull.php?id=%panelID%'); | |
} | |
</code> | |