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,

in meinem Fragebogen habe ich auf der ersten Seite einen Quotenstopp eingebaut. Dieser funktioniert auch, aber leider etwas "zu gut".

Da im weiteren Verlauf des Fragebogens noch Screenouts eingebaut sind, soll die Zählung der Quote nur dann greifen, wenn der Fragebogen auch komplett ausgefüllt wurde. Leider zählt der Code für den Quotenstopp im Moment auch die Fragebögen mit, die wegen Screenout nicht vollständig beantwortet wurden.

Ich stehe hier leider auf dem Schlauch, wie kann ich dieses Problem beheben?

closed with the note: Eine neue Anleitung klärt einige offene Fragen: https://www.soscisurvey.de/help/doku.php/de:survey:quota
in Datenauswertung by s090325 (150 points)
closed by SoSci Survey

2 Answers

0 votes

SoSci Survey differenziert in der Variable FINISHED bislang nicht, ob ein Fragebogen abgeschlossen wurde, weil die letzte Seite erreicht wurde oder weil der Teilnehmer mittels redirect() abgewiesen wurde.

Möglichkeit 1: Sie können die Quoten-Variablen auf der vorletzen Seite mittels put() in interne Variablen kopieren und dann die letztgenannten (statt der Original-Variablen) zählen.

Möglichkeit 2: Es gibt für statistic() eine bisher nicht in der Anleitung dokumentierte Filterfunktion. Sie könnten vor Ihre Quotenfolter testweise einmal folgende Zeile setzen:

statistic('filter', false, '(LASTPAGE >= 10)');

Statt der 10 müssten Sie bitte die Seitennummer der vorletzten Seite im Fragebogen angeben.

by SoSci Survey (245k points)
Danke für die schnelle Antwort. Ich habe mich jetzt an Möglichkeit 2 versucht, da mir das einfacher erschien. Ich bekomme aber eine Fehlermeldung (siehe folgende Antwort)
Update: Nun kann statistic('filter', ...) auch korrekt mit FINISHED umgehen.
0 votes

by s090325 (150 points)
Schade, ich hatte gehofft, dass der Filter mit LASTPAGE bereits umgehen kann. Ich habe der Filterfunktion gerade nochmal versucht, LASTPAGE näher zu bringen. Ändert sich an der Fehlermeldung dadurch etwas?

Wichtig: Schreiben Sie bitte 5, nicht 05. Sonst interpretiert PHP das als Oktalzahl - was bei 5 eigentlich kein Problem ist, aber wehe Sie kommen zu 08 oder darüber...
Also die Fehlermeldung ist weg, aber der Quotenstopp rechnet trotzdem halb ausgefüllte Fragebögen mit ein. Vielleicht liegt es daran, dass ich keine direkte Filterfunktion habe? Mein PHP-Code für den Quotenstopp sieht im Moment folgendermaßen aus (Zum Testen habe ich das Limit auf 2 festgelegt):

$CompanyHQ = value('PC04');
$limits = array(
  1 => 2,
  2 => 2,
);
$nQnr = statistic('count', 'PC04', $CompanyHQ);
$nMax = $limits[$CompanyHQ];
if ($nQnr >= $nMax) {
  redirect('http://endlinks.researchnow.com/d?status=3&rnid=%PanelID1%&study=%PanelID2%');
}

Über diesem Code habe ich ein PHP-Feld mit dem Code aus Möglichkeit 2 eingefügt:

statistic('filter', false, '(LASTPAGE >= 5)');
Bitte packen Sie den Filter (zur Sicherheit - es sollte keinen Unterschied machen) in dasselbe PHP-Code Element wie den weiteren Code.

Nur zur Sicherheit: Sie haben insgesamt nur 5 Seiten im Fragebogen?
Genau, 4 Seiten mit Text und auf der 5. Seite liegt nur noch der redirect für den complete-link. Danach kommt die Seite "letzte Seite". Ich war mir nicht sicher, welche Seite dann genau die vorletzte ist, aber ich habe statt 5 auch 4 und 3 in den Code eingegeben und es funktioniert leider trotzdem nicht.
Diese Frage ist auch für mich relevant. Gibt es hier eine Fortsetzung der Unterhaltung? ;-) Unsere Lösung für den Moment: Wir machen einen Softlaunch mit 100 Leuten und schauen, wie viele Leute unterwegs ausgescreent wurden (in unserem Fall als Quality Fails). Den entsprechenden Prozentsatz schlagen wir dann auf die Quoten auf. Schöner wäre es aber natürlich, wenn sich die Quoten wieder korrigieren oder eben erst zum Schluss gezählt werden. Der Quotenstopp muss aber vorn bleiben, sodass sich nicht Leute durchklicken, die wir eigentlich nicht mehr brauchen.
Die Unterhaltung ist noch im Gange ;) Ich muss als nächstes prüfen, warum statistic('filter') im vorliegenden Fall nicht funktioniert, wie es soll...

Für sofortige Abhilfe: Wie weiter oben schon erwähnt, gibt es auch die Möglichkeit, die Quotenvariablen via put() in eine interne Variable umzukopieren (am Ende des Fragebogens) und diese zu zählen. Dies funktioniert zuverlässig, erfordert aber eben zusätzlichen Aufand.
Sehr gut, ich bin gespannt auf die Fortsetzung.

Zu Möglichkeit 1: Evtl. verdrehe ich noch etwas: Ist es nicht so, wie ich im Kommentar schon schreibe, Teilnehmer bis zum Ende durchkommen und dann erst (wegen voller Quoten) rausgescreent werden? Die hätten dann umsonst mitgemacht.

Bzw. anders gefragt: Wo würde ich dann den Quota Full redirect platzieren? Auch erst am Ende der Befragung, eben hinter dieser neuen Quotenvariable? So wird es hier erläutert: https://support.soscisurvey.de/?qa=2096/quotierung-fur-reprasentatives-sample&show=2096#q2096
Die Idee eines Quotenstops ist, dass man ziemlich zu Beginn die Quotenmerkmale abfragt und die Teilnehmer bei Quotenerfüllung direkt abweist.

Die put()-Lösung besteht darin, dass man zusätzlich (!) am Ende die Quoten-Merkmale nochmal in eine andere Variable kopiert (die also bei unvollständigen Interviews leer bleibt) und für die Zählung, wie voll eine Quote ist, diese neue Variable heranzieht.
Verstehe, vielen Dank. Das heisst dann auch, dass die Quoten im Verlauf der Befragung vorn angepasst (sprich erhöht) werden müssen, wenn ich hinten merke, dass noch Leute fehlen. Ich frage so unsicher, weil ich grossen Respekt davor habe, bei laufender Befragung am php Code rumzuspielen.
Nein, die Quoten wären fix - man sorgt einfach dafür, dass jene gar nicht erst in die Quote gezählt werden, die später aus der Auswertung herausfallen.

Allerdings funktioniert das mit put() nicht, wenn die Erhebung schon läuft, den dann bliebe die Variable bei alten Fragebögen ja leer.

Die statistic('filter', ...) Variante würde auch nachträglich funktionieren, wenn die denn mal richtig funktioniert.
Ich werde jetzt versuchen, es mit Möglichkeit 1 zu lösen. Dazu habe ich den redirect aus dem obigen Code entfernt und werde ihn erst am Ende nach dem put()-Befehl einbauen.

Muss ich zwei interne Variablen erstellen, weil ich insgesamt zwei Antwortmöglichkeiten auf 100 limitieren will, oder reicht eine?

Und was genau muss dann in den put()-Befehl?
Ich habe jetzt auch Möglichkeit 1 umgesetzt und bei unverbundenen Quoten für jede Quote eine interne Variable auf der vorletzten Fragebogenseite abgespeichert. Diese ist vorn auf der zweiten Fragebogenseite (direkt nach Abfrage der Merkmale) auch mit dem statistic Befehl verknüpft.

put('IV05_01', $ageGrp);
put('IV05_02', $sex);
put('IV05_01', $edu);

Mein redirect ist weiterhin vorn, warum siehe oben. Das funktioniert alles wunderbar. Ich danke ganz herzlich für die Hilfe von sosci survey!
Update: Nun kann statistic('filter', ...) auch korrekt mit FINISHED umgehen.
Guten Tag

Ich verstehe noch nicht ganz, wo man welchen Code hinschreiben muss. Ich habe am Anfang des Fragebogens Screeningfragen, um die Leute rauszufiltern, bei denen die Quote schon voll ist. Also auf der ersten Seite wäre dann der Redirect Link für Quotafull. In der Mitte des Fragebogens habe ich einen Quality-Fail Check-Frage, bei denen die Probanden (wenn sie die Frage nicht richtig beantwortet haben auf eine Panelseite weitergeleitet werden)

Bisher sieht mein Code folgendermassen aus (der zählt die Leute, die die Quality-Fail Check Fragen falsch beantwortet haben auch mit, was ich aber verhindern möchte):

$quota = [
  '1-1' => 50, '1-2' => 50,  // 50 Personen pro Geschlecht für die Altersgruppe 1
  '2-1' => 50, '2-2' => 50,  // 50  Personen pro Geschlecht für die Altersgruppe 2
  '3-1' => 50,  '3-2' => 50    //  50 Personen pro Geschlecht für die Altersgruppe 3
];


## Variablen auslesen und umkodieren

$gender = value('SC01');

// Das Alter wird umkodiert
$age = value('SC05_01');
if ($age <= 1969) {
  $ageGroup = 1;
} elseif ($age <= 1985) {
  $ageGroup = 2;
} elseif ($age <= 2002) {
  $ageGroup = 3;
} else {
  $ageGroup = 4;
}

// Definition einer Variable mit Altesgruppe und Geschlecht

$demGroup = $ageGroup.'-'.$gender;

put('RF03_03', $demGroup);


Welchen Code muss ich nun auf die vorletzte Seite verschieben? Wenn ich nur den Teil:

## Variablen auslesen und umkodieren

$gender = value('SC01');

// Das Alter wird umkodiert
$age = value('SC05_01');
if ($age <= 1969) {
  $ageGroup = 1;
} elseif ($age <= 1985) {
  $ageGroup = 2;
} elseif ($age <= 2002) {
  $ageGroup = 3;
} else {
  $ageGroup = 4;
}

// Definition einer Variable mit Altesgruppe und Geschlecht

$demGroup = $ageGroup.'-'.$gender;

put('RF03_03', $demGroup);

...auf die vorletzte Seite des Fragebogens verschiebe, funktioniert es nicht.

Ich glaube, ich kann auch die FINISHED Funktion nicht benutzen, weil die Probanden schon vor der letzten Seite mit einem Complete Redirect Link auf eine Panelseite weitergeleitet werden.

Ich danke Ihnen herzlichst für Ihre Hilfe.
Es ist nur bedingt zweckmäßig, eine neue Frage als Kommentar unter eine 2 Jahre alte Frage zu schreiben. Ich denke, es wäre wesentlich übersichtlicher, eine neue Frage (z.B. oben auch mit "related question") zu stellen. Dort können Sie mit dem Knopf {} auch Code gleich als solchen formatieren. Danke!

Vielleicht auch einen Blick wert, eine relativ neue Anleitung: https://www.soscisurvey.de/help/doku.php/de:survey:quota

> ...auf die vorletzte Seite des Fragebogens verschiebe, funktioniert es nicht.

Bitte prüfen Sie auch gleich noch, ob der in RF03_03 gespeicherte Wert korrekt ist. Danke.
Vielen Dank für den Hinweis. Das Problem hat sich nun gelöst durch Ihre hilfreiche Anleitung.
...