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

Ich habe ein Problem bei einer aktuell laufenden Umfragen:

Ich habe seperate Quoten für Alter, geschlecht und Bildung gesetzt und nun stelle ich während der Umfrage fest, dass niemand über diesen Code zum Panelanbieter zurückgeführt wird, obwohl die Quoten voll (bzw. bereits überfüllt) sind. Es funktioniert für keine der drei Kategorien.

Ich habe denselben Code schon für eine früherer Befragung verwendet, hier hat alles geklappt, ich habe ausschliesslich die Variablencodes und den redirect-Link ausgetauscht, aber es funktioniert nicht.

Code für Geschlecht:

$Sex = value('DG01');   
if (($Sex < 1) or ($Sex > 2)) {   
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true); 
}   

$limitsSex = array(   
1 => 325,   
2 => 325   
);   

$nQnrSex = statistic('count', 'DG01', $Sex); 

$nMaxSex = $limitsSex[$Sex];   

if ($nQnrSex >= $nMaxSex) {   
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true); 
}

Code für Alter:

$age = (int)value('DG02_01');
if ($age < 1948) {
$ageGrp = 1;
} elseif ($age <= 1958) {
$ageGrp = 2;
} elseif ($age <= 1968) {
$ageGrp = 3;
} elseif ($age <= 1978) {
$ageGrp = 4;
} elseif ($age <= 1988) {
$ageGrp = 5;
} elseif ($age <= 2000) {
$ageGrp = 6;
} else {
$ageGrp = 7;
}
put('ID01_01', $ageGrp);
$ageGrp = (int)value('ID01_01');
if (($ageGrp < 2) or ($ageGrp > 6)) {
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true);
} 

$limitsAge = array(   
2 => 102,   
3 => 139,   
4 => 137,
5 => 133,
6 => 139);   

$nQnrAge = statistic('count', 'ID01_01', $ageGrp); 

$nMaxAge = $limitsAge[$ageGrp];   

if ($nQnrAge >= $nMaxAge) {   
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true); 
}

Code für Bildung:

$edu = (int)value('DG13');
if ($edu < 1) {
$eduGrp = 0;
} elseif ($edu <= 5) {
$eduGrp = 1;
} elseif ($edu <= 10) {
$eduGrp = 2;
} elseif ($edu <= 13) {
$eduGrp = 1;
} elseif ($edu <= 16) {
$eduGrp = 2;
} elseif ($edu <= 23) {
$eduGrp = 3;
} else {
$eduGrp = 4;
}
put('ID01_02', $eduGrp);
$eduGrp = (int)value('ID01_02');
if (($eduGrp < 1) or ($eduGrp > 3)) {
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true);
}

$limitsEdu = array(   
1 => 78,   
2 => 312,   
3 => 260);   

$nQnrEdu = statistic('count', 'ID01_02', $eduGrp); 

$nMaxEdu = $limitsEdu[$eduGrp];   

if ($nQnrEdu >= $nMaxEdu) {   
setNextPage('repeat');
redirect('Link-Panelanbieter.de&return_tic=%reference%', true); 
}

Ich schätze es liegt daran, dass die Fragebögen nicht als vollständig ausgefüllt zählen, weil sie vor Errreichen der letzten Seite zurückgeleitet werden. Kann ich das irgendwie einstellen, dass der Zähler bereits Fragebögen, die auf Seite 70 enden als vollständig ausgefüllt erkennt?

Vielen Dank für Ihre Hilfe!

EDIT:

Ich füge die Debug Info hier an, da ich bei den comments keine neuen Bilder einfügen kann.

in SoSci Survey (dt.) by s053303 (170 points)
edited by s053303
Die Debug-Information weist für alle drei Kategorien einen relativ kleinen Anteil an Fragebögen aus: 35 für Geschlecht=1, 14 für Alter=4, 21 für Bildung=3. Demnach scheint es korrekt zu sein, dass kei Quoten-Stopp greift.

Sie schreiben, dass die Quoten teilweise schon überschritten sind. Nun stellt sich die Frage, weshalb sich das nicht in der Statistik spiegelt.

Könnten Sie bitte einmal den Datensatz abrufen (nur "MODE=interview") und eine Häufigkeitsauswertung über die Variablen DG01, ID01_01 und ID01_02 laufen lassen? Stimmen die Werte mit den o.g. Zahlen überein?
Die Zahlen stimmen nicht.

Bei den zu Ende ausgefüllten Fragebögen gibt es nur N= 8 (ich habe Pretest und Fragbogenentwicklung ausgeschlossen)

DG01= 3 (müsste N= 35 sein)
ID01_01= 4 (müsste N= 14)
ID01_02= 1 (müsste N= 21)
Ich hoffe, das war was Sie meinten?
Im Debug-Modus werden (damit man besser Testen kann) auch die Debug-Datensätze mitgezählt. Aber wenn Sie sogar noch kleinere Fallzahlen haben, dann können die Quoten ja erst recht noch nicht erfüllt sein?!
Das Problem besteht darin, dass die Teilnehmer schon auf Seite 70 von 72 aus dem Fragebogen geleitet werden, so dass nicht richtig gezählt werden kann. Ich wollte fragen, ob es einen Weg gibt, die Fragebögen schon auf Seite 70 zu zählen beziehungsweise, die Fragebögen als beendet zu markieren, die es bis Seite 70 geschafft haben, weil dort der redirect zum Panelbetreiber installiert ist. Oder gibt es eine bessere Möglichkeit?

1 Answer

0 votes

Das Problem besteht darin, dass die Teilnehmer schon auf Seite 70 von 72 aus dem Fragebogen geleitet werden, so dass nicht richtig gezählt werden kann.

Die Funktion statistic() erlaubt eine Angabe, ob nur "vollständig ausgefüllte" (FINISHED=1) Datensätze gezählt werden oder alle.

  • Setzen Sie die internen Variablen erst auf Seite 70 mittels put() - dafür müssen Sie den Code zum Umkodierung von Werten in Kategorien wahrscheinlich einfach nochmal kopieren.
  • Das put() und value() muss dann im PHP-Code vom Quotenstopp entfernt werden.
  • Die Variable zum Geschlecht muss auch Seite 70 auch in eine interne Variable umkopiert werden.
  • Beim Quotenstopp zu Beginn zählen Sie dann im Gegenzug alle Fragebögen:

    $nQnrAge = statistic('count', 'ID01_01', $ageGrp, true);

Nun ist Ihr Fragebogen schon im Feld. Was also tun? Sie haben min. 2 Möglichkeiten:

  • Zählen Sie einfach alle Daten (auch die Abbrecher) und passen Sie die Quote $limits um die ABbrecherzahlen an.
  • Ändern Sie die Zählung wie oben beschreiben, verwenden Sie aber komplett neue interne Variablen und passen Sie die Quoten so an, dass dort nur noch die Anzahl noch fehlender Fälle steht.
by SoSci Survey (206k points)
Kann der Quotenstopp-Code auf den ersten Seiten enthalten bleiben oder muss es auch auch auf die hinteren Seiten zusammen mit dem Code für die internen Variablen?
Der eigentliche Quotenstopp vorne muss bleiben - nur put() und das ohnehin überflüssige value() müssen raus.
Ich hatte die Umfrage pausieren lassen und jetzt ist sie wieder gestartet, selbst mit den neuen Internen Variablen funktioniert der Zähler nicht. Er steht für geschlecht auf 0, obwohl zwei Männer mitgemacht haben. Beim Alter ist nur eine Antwort vermerkt, obwohl beide Teilnehmer dieselbe Alterstufe angegeben haben. Bei der Bildung sind sogar drei Antworten vermerkt, obwohl nur zwei neue Teilnehmer mitgemacht haben. Ich verstehe nicht, wo die Zahlen herkommen.

Vielleicht sollt ich noch erwähnen, ich habe Möglichkeit 2 umgesetzt.
Wenn ich die Value() Codes entferne funktioniert der Code auch nicht mehr, weil der Bezug fehlt, da er erst am Ende des Fragebogens gegeben wird.
> Wenn ich die Value() Codes entferne funktioniert der Code auch nicht mehr, weil der Bezug fehlt, da er erst am Ende des Fragebogens gegeben wird.

Das vlue() ruft ja nur den Wert, den Sie vorher in eine interne Variable gepsiechert haben aus dieser wieder ab. Das ist nicht sinnvoll - hatte in der ursprünglichen Umsetzung aber auch nicht gestört. Nur wenn Sie nun das put() herausnehmen, dann schadet das value().

Wichtig ist, dass Sie vorne beim Quotencheck die Gruppenvariablen berechnen und diese in statistic() verwenden.

Und am Ende berechnen Sie die gleichen Variablen dann erneut und speichern sie mittels put() in den Datensatz, damit sie von statistic() beim nächsten Teilnehmer gezählt werden.

Und nochmal der Hinweis, dass im Debug-Modus auch Fälle aus dem Debug-Modus mitgezählt werden, damit man testen kann - im Interview aber nicht.
Wie kann ich die Gruppenvariable berechnen ohne den value() Befehl zu verwenden? Ich stehe mittlerweile total auf dem Schlauch - alle Änderungen, die ich am Fragebogen vornehme führen zu Fehlfunktionen.

$age = (int)value('DG02_01');
if ($age < 1948) {
$ageGrp = 1;
} elseif ($age <= 1958) {
$ageGrp = 2;
} elseif ($age <= 1968) {
$ageGrp = 3;
} elseif ($age <= 1978) {
$ageGrp = 4;
} elseif ($age <= 1988) {
$ageGrp = 5;
} elseif ($age <= 2000) {
$ageGrp = 6;
} else {
$ageGrp = 7;
}
if (($ageGrp < 2) or ($ageGrp > 6)) {
setNextPage('repeat');
redirect('https://anbieter&return_tic=%reference%', true);
}

$limitsAge = array(   
2 => 0,   
3 => 0,   
4 => 27,
5 => 32,
6 => 46);   

$nQnrAge = statistic('count', 'ID05_01', $ageGrp, true);

$nMaxAge = $limitsAge[$ageGrp];   

if ($nQnrAge >= $nMaxAge) {   
setNextPage('repeat');
redirect('https://anbieter&return_tic=%reference%', true);
}

und auf der letzten Seite habe ich die Codes noch einmal in die interne Variable ID05_01 mittels gespeichert.
Der Code sieht korrekt aus - welche Fehlfunktion erzeugt er?
ich habe endlich das Problem gefunden: es wurden alle Fälle aus allen Fragebögen des Projekts mitgezählt (insgesamt 6), deshalb haben die Zahlen nie gestimmt. Jetzt funktioniert es mit neuen internen Variablen pro Fragebogen. Danke für Ihre Hilfe!
Gut, darauf wäre ich nicht gekommen, dass Sie mehrere Projekte im Befragungprojekt laufen haben :)

Ich empfehle ein Befragungsprojekt pro Erhebung - außer, Sie haben unterschiedliche Zielgruppen und denselben Fragebogen.

Mittels statistic('filter', ...) kann man übrigens auch einen Filter festlegen, der z.B. nur Fälle aus einem bestimmten Fragebogen verwendet.
...