0 votes
in SoSci Survey (dt.) by s143454 (130 points)

Hallo,

ich abeite mit einem externen Panelanbieter zusammen und habe eine maximal Stichprobe von 1.000 Teilnehmern plus 5% Überschuss.

Ich soll nun die Quotafulls programmieren und habe dazu folgende Fragen:

  1. Muss ich auch aus bestimmten Antwortmöglichkeiten in demografischen Fragen, wei z.B. Position oder Branche manuell intere Variablen machen (diese haben ja nicht wie Items in Likert-Skalen automatisch einen internen Variable-Code)?

  2. Kann ich auch Mindestquoten mit:

$quotaD008 = [ 1 =< 83, 2 =< 83, 3 =< 83, 4 =< 650, 5 =< 100 ];

  1. Wie setzte ich die maximale Teilnehmerzahl von 1.050 fest?

  2. Muss ich, wenn ich Mindestquoten für Geschlecht, bestimmte Branchen und Positionen habe, bei jedem php-Block den Quotafull mit redirect setzen?

Vielen Dank für die Antwort

1 Answer

0 votes
by SoSci Survey (308k points)

ad 1) Ja, nehmen Sie hier bitte eine Umkodierung in die Kategorien vor, die Sie quotieren möchten.

ad 2.0) Der Operator => definiert in einem Array ein Schlüssel-Wert-Paar, es bedeutet nicht (!) größer-gleich. Entsprechend ist die Schriebweise =< hier auch nicht zulässig/sinnvoll.

ad 2.1) Sie können mit statistic() auch die Gesamtzahl ermitteln.

ad 2.2.) Den Quotenstop-Redirect setzen Sie überall dort ein, wo die Möglichkeit besteht, dass Sie jemanden aufgrund erfüllter Quoten rauswerfen müssen.

In der Anleitung zur Quotierung bzw. dem dort vorgestellten PHP-Code kommt das redirect() nur einmal vor, weil in einem IF-Filter mehrere Quoten auf einmal überprüft werden. Ob man das so realisiert oder 3-mal einzeln prüft, ist Geschmackssache.

by s143454 (130 points)
Vielen Dank für die schnelle Rückmeldung.

Wie und wo kann ich eine Mindestquote mit größer gleich setzen?
by SoSci Survey (308k points)
Der Sinn eines Quotenstopps liegt daran, dass man ungeeignete Personen abweist. Was meinen Sie denn mit "Mindestquote" bzw. was soll passieren, wenn diese Mindestquote erreicht ist?
by s143454 (130 points)
Hintergrund ist, dass mindestens 50 Leute aus bestimmten Branchen, oder 250 Führungskräfte in der Stichprobe enthalten sein sollen. Es dürfen aber auch mehr sein.
by SoSci Survey (308k points)
Nun, ich sehe nicht, was SoSci Survey da machen könnte... Für die Rekrutierung ist ja der externe Dienstleister verantwortlich. Wenn dieser nur 30 Personen aus einer Branche schickt, dann kann SoSci Survey ja nicht einfach 20 Antworten hinzu-erfinden ;)

Was Sie machen können ist, einen zweiten Fragebogen anzulegen, der mittels vieler `statistic()`-Aufrufe und ein wenig HTML die aktuellen Quoten live anzeigt. Dort kann der externe Dienstleister dann prüfen, welche Branchen noch fehlen.
by s143454 (130 points)
Vielen Dank für die Antworten. Ich denke auch, dass der Anbieter für die Mindestquoten verantwortlich ist. Das Einzige, dass ich quotieren kann ist Maximalquoten.

Dazu habe ich noch eine Frage:

$quotaPosition = [
  4 => 750
];

$position = value('D008_1');

$casesPosition = statistic('count', 'D008_1', $Position);
 
if (!array_key_exists($Position, $quotaPosition)) {
  redirect('Panellink);
}
 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('Panellink');
}

put('D008_1', $Position);


Ist diese Kodierung korrekt?

Liest der Fragebogen dann die mit 4 kodierte Anwort in D008 als D008_1 aus und überprüft, ob diese 750 oder mehr bereits erreicht hat und schmeißt den Teilnehmer dann per redirect/Quotafull raus?

Kommt dieser php-Block auf dieselbe Seite wie D008 oder die Seite danach?

Danke und BG
by SoSci Survey (308k points)
> Ist diese Kodierung korrekt?

Ich bin ziemlich sicher, dass die Variablen-Kennung "D008_1" so nicht stimmt. Ob die Zählung funktioniert, können Sie ansonsten mit einem debug() einfach nachprüfen:

$casesPosition = statistic('count', 'D008_1', $Position);
debug($Position);
debug($casesPosition);

Und da hier macht wenig Sinn:

> put('D008_1', $Position);

Hier speichern Sie den Wert, den Sie vorher per value() ausgelesen haben, wieder in die Selbe Variable zurück. Eigentich würden Sie den Wert aus einer Variable A auslesen und dann in eine interne Variable B abspeichern.
by s143454 (130 points)
Also D008_1 ist eine interne Variablenkennung, welche ich laut Anleitung anlegen muss...

Ich verstehe in der Anleitung zu den Quotafulls nicht, warum Geschlecht direkt ausgelesen wird:

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

und warum werden später interne Variablen aberufen?

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD03_01', $ageGroup);
$casesGender = statistic('count', 'SD03_02', $gender);
 
// Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($gender, $quotaGender)) {
  redirect('https://www.panelanbieter.de/?xyz=screenoutGHIJKI&uid=%reference%');
}
 
// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
 
// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)) {
  redirect('https://www.panelanbieter.de/?xyz=quotaABCDEF&uid=%reference%');

Sollten die internen Variablen nicht mittels Put() mit dem Quotierungsmerkmal als Kategorie 4 in D008 gefüllt werden?

Warum sollen die cases noch einmal mit dem kompletten redirect vor dem complete ausgelesen werden?
by SoSci Survey (308k points)
> Also D008_1 ist eine interne Variablenkennung, welche ich laut Anleitung anlegen muss...

Bitte prüfen Sie, ob die Kennung nicht D008_01 lautet.

> Ich verstehe in der Anleitung zu den Quotafulls nicht, warum Geschlecht direkt ausgelesen wird

Auslesen muss man zunächst immer (!) die Antwort der Teilnehmer. Diese werden dann am Ende des Fragebogens (evtl. umkodiert) in interne Variablen gespeichert. Erst diese dienen dann der Ermittlung der Quoten.

> Warum sollen die cases noch einmal mit dem kompletten redirect vor dem complete ausgelesen werden?

Diese Frage verstehe ich nicht. Auf welche Code-Zeile beziehen Sie sich damit?
by s143454 (130 points)
ich habe den Code noch einmal angepasst:

$quotaPosition = [
  4 => 750
];

$position = value('D008');

put('D008_1_01', $Position);

$casesPosition = statistic('count', 'D008_1_01', $Position);
 
if (!array_key_exists($Position, $quotaPosition)) {
  redirect('Panelanbieter');
}
 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('Panelanbieter');
}


Wird jetzt D008 die mit 4 codierte Antwort quotiert, diese in eine interne Variable D008_1_01 gespeichert, die dann mittels case geprüft wird?
by SoSci Survey (308k points)
Bitte öffnen Sie einmal die "Variablen-Übersicht" in Ihrem Bbefragungsprojekt und prüfen Sie, wie die Variablen von D008 korrekt heißen. D008_1_01 sieht mir suspekt aus - aber ich will nicht ausschließen, dass Sie die Variable entsprechend umbenannt haben.

Dasmit dem put() macht nur dann Sinn, wenn Sie (a) umkodieren oder (b) nur jene Fälle zählen möchten, die eine bestimmte Seite im Fragebogen erreicht haben. Dann würden Sie das put() dort platzieren.

Aber der Code sieht jetzt zumindest nicht ganz falsch aus... Er sollte funktionieren :)
by s143454 (130 points)
Vielen Dank für den Hinweis.

D008 fragt die Position als Einfachauswahl ab, bei der die 4 für Fachkräfte steht. Deshalb hat sie keine einzelnen Variablen, wie bei einer Likert-Skala.

D008_1_01 ist ein von mir angelegte interne Variable, in die D008 mittels put gespeichert wird.

Nur noch einmal zur Absicherung: ist diese Kodierung/Speicherung wirklich notwendig?

In meinem Fragebogen kommen nur Fachkräfte auf die Seite, in der die im letzten Kommentar beschriebene Quotafull-Funktion steht. Brauche ich dann den folgenden Teil überhaupt oder kann ich diesen weglassen?

if (!array_key_exists($Position, $quotaPosition)) {
  redirect('Panelanbieter');
}

Es würden ja so oder so nur Teilnehmer, die angegeben haben, eine Fachkraft zu sein, die Seite erreichen.

Für Teilnehmer, die angeben, eine Führungskraft zu sein, würde die Seite mit der Quotafull-Funktion ausgeblendet werden.

Danke für die viele Hilfe!
by SoSci Survey (308k points)
> Nur noch einmal zur Absicherung: ist diese Kodierung/Speicherung wirklich notwendig?

Wie gesagt: Sinnvoll (notwendig) ist das nur, wenn Sie (a) etwas umkodieren wollten, was hier nicht der Fall ist oder (b) wenn Sie nur Fälle zählen möchten, die es bis zu einer bestimmten Seite geschafft haben, wo Sie put() verwenden.

Ansonsten können Sie in statistic() auch einfach die Original-Variable zählen.

> Brauche ich dann den folgenden Teil überhaupt

Er schadet zumindest nicht. Dieser Code ist dann sinnvoll, wenn die Möglichkeit besteht, dass $Position einen Wert annimmt, der nicht in Ihrem Array definiert wurde.
by s143454 (130 points)
Leider Funktioniert die Funktion noch nicht. Wenn man auf die Seite kommt, auf der der Code hinterlegt ist, tritt ein Fehler auf. Man wird entweder zum Redirect oder Quotafull umgeleitet, auch unter 750 Teilnehmern.

D008 ist auf Seite 03 im Fragebogen und der Code auf 04. Nur Teilnehmer, die auf Seite 03 bei 4 = Fachkraft ausgewählt haben, sehen Seite 04. 1-3 bei D008 überspringen die Seite. Alle anderen werden auf Seite 03 ausgefiltert und zu einem Screenout weitergeleitet, der auch funktioniert.

Der Code:

$quotaPosition = [
  4 => 750
];

$position = value('D008');

$casesPosition = statistic('count', 'D008', $Position);

if (!array_key_exists($Position, $quotaPosition)) {
  redirect('https://www.innofact-umfrage3.de/kim2/screenout_f.php?u=%reference%');
}

 
$maxPerPosition = $quotaPosition[$Position];
 
// Quotenstopp
if ($casesPosition >= $maxPerPosition) {
  redirect('https://www.innofact-umfrage3.de/kim2/quotafull_f.php?u=%reference%');
}

Die Variable D008



[D008] !Auswahl

Position

"Welche Position haben Sie derzeit inne?"

D008 Position

1 = Geschäftsleitung, Vorstand (Führungskraft)
2 = Bereichsleitung (Führungskraft)
3 = Abteilungsleitung, Teamleitung (Führungskraft)
4 = Fachkraft, SpezialistIn, SachbearbeiterIn
5 = Trainee oder Assistenz
6 = Studentische Mitarbeitende, PraktikantIn
7 = Studierende (ohne Anstellung)
8 = SchülerIn, Ausbildung
9 = Arbeitssuchend
10 = RentnerIn
11 = FreiberuflerIn
-9 = nicht beantwortet

Könnten Sie mir hier noch einmal Feedback geben, woran das liegen könnte?
by SoSci Survey (308k points)
Könnten Sie bitte noch die Debug-Information posten, die vor dem Redirect angezeigt wird? Wenn Sie im Debug-Modus starten, sollten Sie nicht direkt umgeleitet werden, sondern es sollte der Redirect und (rechts oben) die Debug-Information angezeigt werden.

Nur zur Sicherheit: Sie haben als Antwort in D008 "Fachkraft, SpezialistIn, SachbearbeiterIn" ausgewählt und Sie haben den PHP-Code nicht (!) auf derselben Seite, wie die Frage D008, korrekt?
by s143454 (130 points)
Zu eins der Debug auf Seit 3. Wenn ich weiterklicke als Fachkraft kommt eine Weiße Seite mit der Meldung: invalid cid.
nterview Nummer 83 wird fortgesetzt
[Information]    Der Fragebogen PS im Projekt purpose_studie_2020001386 wird verwendet
[Information]    Die Verweildauer auf Seite 3 betrug zusätzliche 8 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf D008 = 4
[Information]    Bedingung in Filter D008/1 ist nicht erfüllt.
[Information]    ▼ Filter D008/2 wird aktiv (Bedingung erfüllt).
[Information]    Bedingung in Filter D008/3 ist nicht erfüllt.
[Information]    ▼ Filter D008/4 wird aktiv (Bedingung erfüllt).
[Information]    ▼ Filter D008/5 wird aktiv (Bedingung erfüllt).
[Warnung]    Der Wert von Variable D009 wurde geändert
[Information]    Antwort auf D009 = 10
[Information]    ▼ Filter D009/1 wird aktiv (Bedingung erfüllt).
[Information]    Keine Antwort für D003
[Information]    Ungültige Antwort für D003
[Information]    Keine Antwort für D020
[Information]    Ungültige Antwort für D020
[Information]    Keine Antwort für D016
[Information]    Ungültige Antwort für D016
[Information]    Fragen bisher zu 25% vollständig beantwortet
[Information]    Nachhaken wegen fehlender Antworten (Seite erneut anzeigen).
[Verarbeitung]    Erstelle Seite 3 in Fragebogen PS
[Inhalt]    Erstelle Frage D006
[Inhalt]    Erstelle Frage D008
[Inhalt]    Erstelle Frage D009
[Inhalt]    Erstelle Frage D003
[Inhalt]    Erstelle Frage D020
[Inhalt]    Erstelle Frage D016

Zu zwei: nein der komplette Code ist auf der Seite 04, d.h. der Folgeseite von D008.

Danke für die Mühe
by SoSci Survey (308k points)
> Zu zwei: nein der komplette Code ist auf der Seite 04, d.h. der Folgeseite von D008.

Dann ist die Lösung einfach: Schieben Sie den PHP-Code bitte auf die folgende Seite.

Vgl. https://www.soscisurvey.de/help/doku.php/de:create:filter-solving (Top 1)
by s143454 (130 points)
Das verstehe ich nicht. Der php-Code ist nicht auf derselben Seite, wie die Filterfrage D008.

Auch wenn ich den Code noch weiter im Fragebogen nach hinten verschiebe, bleibt die Fehlermeldung dieselbe
by SoSci Survey (308k points)
> Das verstehe ich nicht. Der php-Code ist nicht auf derselben Seite, wie die Filterfrage D008.

Seite 4 wird auf dem Server erstellt (von oben bis unten) und dann an den Browser des Teilnehmers geschickt. Zu diesem Zeitpunkt hat der Teilnehmer die Frage noch nicht beantwortet. Entsprechend liefert value() zu diesem Zeitpunkt noch die Information, dass die Frage bisher unbeantwortet sei. Für diese Erklärung hatte ich auch in meinem letzten Posting die Anleitung verlinkt.

Mit dieser Information wird dieser Filter aktiv:

if (!array_key_exists($Position, $quotaPosition)) {
  redirect('https://...');
}

Es erfolgt also ein Screenout.

> Auch wenn ich den Code noch weiter im Fragebogen nach hinten verschiebe, bleibt die Fehlermeldung dieselbe

Im oben geposteten PHP-Code wurde die Seite 4 wegen fehlender Antworten erneut angezeigt. Was zeigt denn nun Seite 5, wenn Sie den Code dorthin verschoben haben, in der Debug-Information.
by s143454 (130 points)
Wie gesagt D008 ist auf Seite 3. Demnach müssten die Antworten bei Klick auf Weiter laut Anleitung ja übermittelt worden sein...

Wenn ich den gesamten php-Code auf Seite 05 verschiebe, wird Seite 04 normal angezeigt. Klickt man dort auf weiter um zu Seite 05 zu gelangen, erfolgt dort der Screenout, d.h. dieselbe Fehlermeldung "invalid cid"...auch, wenn ich die Funktion

if (!array_key_exists($Position, $quotaPosition)) {
  redirect('https://...');
}

rausnehme
by SoSci Survey (308k points)
> Wie gesagt D008 ist auf Seite 3.

Ich hatte Ihre vorige Antwort so verstanden, dass Frage und PHP-Code auf Seite 4 stünden.

> dieselbe Fehlermeldung "invalid cid"

Diese Fehlermeldung stammt, wenn ich mich nicht täusche, vom Panel-Betreiber und wird erst nach dem Redirect angezeigt.

Wenn SoSci Survey den Redirect auch im Debug-Modus sofort vornimmt, dann ändern Sie bitte alle redirect()s zum Testen wie folgt:

// redirect('https://...');
debug('redirect');
pageStop();

Die zwei Schrägstriche vor dem redirect() deaktivieren den Befehl. Die beiden zusätzlichen Zeilen sorgen für eine kurze Ausgabe. Wenn Sie das geändert haben und der PHP-Code wieder auf Seite 4 steht, dann posten Sie bitte die Debug-Information von Seite 4.

Wichtig: Bitte posten Sie die Debug-Information direkt nachdem Sie Seite 3 abgeschickt haben. Nicht, wenn Sie auf Seite 4 erneut auf "Weiter" geklickt haben (so m.E. geschehen in der letzten gespoteten Debug-Information).
by s143454 (130 points)
Anbei erhalte ich folgende Informationen:


[Information]    Interview Nummer 93 wird fortgesetzt
[Information]    Der Fragebogen PS im Projekt purpose_studie_2020001386 wird verwendet
[Information]    Die Verweildauer auf Seite 3 betrug zusätzliche 3 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3
[Information]    Antwort auf D008 = 4
[Information]    Bedingung in Filter D008/1 ist nicht erfüllt.
[Information]    ▼ Filter D008/2 wird aktiv (Bedingung erfüllt).
[Information]    Bedingung in Filter D008/3 ist nicht erfüllt.
[Information]    ▼ Filter D008/4 wird aktiv (Bedingung erfüllt).
[Information]    ▼ Filter D008/5 wird aktiv (Bedingung erfüllt).
[Information]    Antwort auf D009 = 14
[Information]    Bedingung in Filter D009/1 ist nicht erfüllt.
[Information]    Ignoriere fehlende Antwort D003 (Nachgehakt)
[Information]    Keine Antwort für D003
[Information]    Ignoriere fehlende Antwort D020 (Nachgehakt)
[Information]    Keine Antwort für D020
[Information]    Ignoriere fehlende Antwort D016 (Nachgehakt)
[Information]    Keine Antwort für D016
[Information]    Fragen bisher zu 25% vollständig beantwortet
[Information]    Entsprechend Filter D008/F5 wird Seite 4 (FI) angezeigt.
[Verarbeitung]    Erstelle Seite 4 in Fragebogen PS
[Information]    value("D008") = 4
[Information]    Statistik: Anzahl Antworten mit Wert auf D008: 0
debug()    Inhalt: 'redirect' = redirect (string)
[Inhalt]    Die Verarbeitung der Seite wurde durch pageStop() beendet


Hinweis:
Hinweis (Seite 4)
Debug-Information für 'redirect':
'redirect' = redirect (string

Fehler:


Fehler im Fragebogen (Seite 4)
Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Die PHP-Variable $Position wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

006
007 $position = value('D008');
008
009 $casesPosition = statistic('count', 'D008', $Position);
010
011 if (!array_key_exists($Position, $quotaPosition)) {
012   

Fehler im Fragebogen: Die PHP-Variable $Position wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

008
009 $casesPosition = statistic('count', 'D008', $Position);
010
011 if (!array_key_exists($Position, $quotaPosition)) {
012   
013 debug('redirect');
014 pageStop();


Danke!
by SoSci Survey (308k points)
> Fehler im Fragebogen: Die PHP-Variable $Position wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

Bitte stellen Sie hier eine einheitliche Groß- und Kleinschreibung sicher. Danach sollte hier ein korrekter Wert stehen:

> [Information]    Statistik: Anzahl Antworten mit Wert [HIER FEHLT ETWAS] auf D008: 0

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

...