0 votes
in SoSci Survey (dt.) by s286377 (135 points)
edited by SoSci Survey

Guten Tag SoSciSurvey-Team,

bei einer Umfrage habe ich zwei Quotierungen für die Gesamtanzahl pro Personen mit bestimmten Merkmalen. Außerdem werden bestimmte Personen rausgefiltert, wenn die Teilnahmekriterien nicht erfüllt werden. Im Pre-Test schien dies soweit zu funktionieren. Redirects haben entsprechend der Anweisung gegriffen und wenn ich testweise die Quotenzahl runtergesetzt habe, schien die interne Variable entsprechend zu zählen und der Quotafull-Redirect ab dem richtigen Zeitpunkt eizusetzen.

Nun ist die Studie im Feld und bei der Betrachtung der bereits erhaltenen Datensätze scheint die Zählung der internen Variablen nicht mehr zu stimmen.. Die Fälle (z.B. für weibliche Teilnehmerinnen) sollten ja eigentlich nur +1 zählen, wenn 'weiblich' ausgewählt wird. Beim Blick auf die Daten kann ich aber sehen, dass die interne Variable seltsam zählt -> z.B.: 17, 20, 19, 18, 22, 21 oder auch gar nicht -> obwohl die Frage die zur internen Vaariable eine Pflichtfrage ist.

Ich sollte die Erhebung im Feld wahrscheinlich pausieren und erst wieder starten wenn der Fehler gefunden ist? Kann ich die Studie in SoSciSurvey selbst pausieren, oder muss ich vorher dem Paneldienstleister Bescheid geben? Ich fürchte, den erreiche ich heute leider nicht mehr.

Können Sie eventuell an meinem Code sehen, wo der Fehler liegen könnte? Über Hilfe wäre ich wirklich sehr dankbar!

Hier ist zum einen mein Code von Seite 3 des Fragebogens:

// Quoten für Geschlecht und Home-Office-Häufigkeit definieren:
$quotaGender = [
    1 => 514,  // weiblich
    2 => 585   // männlich
];

$quotaHO_frequency = [
    1 => 220,  // nie im Home-Office
    3 => 880   // mindestens einmal alle 14 Tage
];

// Werte aus den Fragen auslesen:
$gender = value('DE02');
$HO_frequency = value('SC01');
$work_hours = value('SC02');

// Altersüberprüfung und Weiterleitung:
$age = value('DE01_01');
if ($age < 18 || $age > 65) {
    redirect('https://PANELANBIETER..com/screenout?p=123129_e81dccff&m=%reference%');
    pageStop();
}

// Überprüfung der Antworten auf bestimmte Fragen und Weiterleitung:
if ($HO_frequency == 2 || $work_hours == 1 || in_array($gender, [3, 4, 5, -9])) {
    redirect('https://PANELANBIETER..com/screenout?p=123129_e81dccff&m=%reference%');
    pageStop();
}

// Zählen der bisherigen Antworten und Überprüfung der Quoten
// Interne Variablen für die Quotenmerkmale definieren
if ($gender == 1) {
    $casesGender = statistic('count', 'SC06_01');
} elseif ($gender == 2) {
    $casesGender = statistic('count', 'SC06_02');
}

if ($HO_frequency == 1) {
    $casesHO_frequency = statistic('count', 'SC08_01');
} elseif ($HO_frequency == 3) {
    $casesHO_frequency = statistic('count', 'SC08_02');
}

$maxPerGender = $quotaGender[$gender];

// Überprüfung, ob der Schlüssel im Array existiert
if (array_key_exists($HO_frequency, $quotaHO_frequency)) {
    $maxPerHO_frequency = $quotaHO_frequency[$HO_frequency];
} else {
    $maxPerHO_frequency = null;
}

if ($maxPerHO_frequency !== null && $casesHO_frequency >= $maxPerHO_frequency) {
    redirect('https://PANELANBIETER..com/quotasfull?p=123129_730e7cba&m=%reference%');
    pageStop();
}

if ($casesGender >= $maxPerGender) {
    redirect('https://PANELANBIETER.com/quotasfull?p=123129_730e7cba&m=%reference%');
    pageStop();
}`

und hier der Code von Seite 24 (vorletzte Seite):

`// Werte aus den Fragen auslesen:
$gender = value('DE02');
$hoFreq = value('SC01');

// Interne Variablen aktualisieren:
// Zählen der bisherigen Antworten für Geschlecht und Home-Office-Häufigkeit
$countFemale = statistic('count', 'SC06_01');
$countMale = statistic('count', 'SC06_02');
$countNever = statistic('count', 'SC08_01');
$count14Days = statistic('count', 'SC08_02');

// Aktualisieren der Zählung basierend auf den Antworten
if ($gender == 1) {
    $countFemale += 1;
    put('SC06_01', $countFemale);
} elseif ($gender == 2) {
    $countMale += 1;
    put('SC06_02', $countMale);
}

if ($hoFreq == 1) {
    $countNever += 1;
    put('SC08_01', $countNever);
} elseif ($hoFreq == 3) {
    $count14Days += 1;
    put('SC08_02', $count14Days);
}

// Abgeschlossene Fragebögen zählen und Teilnehmer als abgeschlossen markieren:
$finished = statistic('count', 'LASTPAGE', 24);
redirect('https://PANELANBIETER.com/complete?p=123129_993e72cb&m=%reference%');`

Falls mehr Infos benötigt würden um mir helfen zu können, geben Sie mir bitte Bescheid. Vielen vielen Dank und freundliche Grüße!

1 Answer

0 votes
by SoSci Survey (327k points)

Der Aufruf

$countFemale = statistic('count', 'SC06_01');

zählt alle Fälle, die einen gültigen Wert für SC06_01 haben - und wenn SC06 eine normale Auswahl ist, und es die Variable SC06_01 deshalb gar nicht gibt (s. Variablen-Übersicht), dann werden alle Fälle mit gültiger Antwort für SC06 gezählt.

Wenn die Variable SC06 heißt, wäre der korrekte Code

$countFemale = statistic('count', 'SC06', 1);

Prüfen Sie aber bitte erst einmal die Variablen-Übersicht. Falls es dort SC06_01 als Variable gibt, haben Sie vermutlich eine "Mehrfachauswahl" statt der "Auswahl" verwendet. Das wäre nicht ganz so optimal.

by s286377 (135 points)
edited by s286377
Hallo,
vielen Dank für die Antwort!

AUs der Variablen-Übersicht: Also SC06_01, SC06_02 sowie SC08_01 und SC08_02 existieren nur als intern angelegte Variablen wie folgt:

[SC06] Interne Variablen QS_Gender
SC06_01 QS_Gender_female
SC06_02 QS_Gender_male
Text/Zeichenkette

[SC08] Interne Variablen QS_HO
SC08_01 QS_HO_never
SC08_02 QS_HO_14days
Text/Zeichenkette

Ich habe die internen Variablen also pro Option aufgeteilt. Liegt hier der Fehler? Also sollte es nur eine interne Variable pro Aspekt geben z.B.: SC06_01 für Gender und SC08_01 zur Zählung von HO_never und HO_14 days? Und müsste ich dann stattdessen so wie von Ihnen beschrieben: '$countFemale = statistic('count', 'SC06', 1);' etc. zur richtigen Zählung verwenden?

Ist es möglich, so eine Änderung während einer laufenden Umfrage durchzuführen? Dadurch würde ich ja an der Variablenanzahl etwas verändern und müsste noch einmal die Quotierungen überprüfen denke ich?

Zur besseren Übersicht: SC06_01 & SC06_02 beziehen sich dabei auf folgende Frage im Fragebogen:

[DE02] Auswahl Geschlecht
DE02 Geschlecht
1 = Weiblich
2 = Männlich
3 = Divers
4 = Möchte ich nicht angeben
5 = Andere Angabe:
-9 = nicht beantwortet

DE02_05 Andere Angabe
Offene Texteingabe

Und für SC08_01 & SC08_02 beziehen sich auf:

[SC01] Auswahl
SC01 Screening_HO_FREQ
1 = Nie
2 = Seltener als einmal alle 14 Tage
3 = Mindestens einmal alle 14 Tage
-9 = nicht beantwortet

Vielen Dank!

P.S.: Als Zusatz: Ich habe nun noch einmal in die bereits erhobenen Daten geschaut. Grundsätzlich scheinen die internen Variablen schon (in die richtige Richtung) zu zählen. Nur in manchen Fällen ist die Reihenfolge der Zählung seltsam (wie beschrieben z.B.: 10,11,12,14,13,16,15,18,17,19, ...). Deutet dies darauf hin, das die internen Variablen grundsätzlich korrekt zählen? Ich habe schon überlegt ob diese Sprünge in der Reihenfolge vielleicht daher stammen, dass manche Personen den Fragebogen schneller ausfüllen als andere und damit andere Teilnehmende 'überholen' und daher die höhere Zahl früher im Datansatz abgespeichert wird als die niedrigere. Könnte das sein oder ist dies als mögliche Erklärung nicht denkbar?
by SoSci Survey (327k points)
> Ich habe die internen Variablen also pro Option aufgeteilt. Liegt hier der Fehler?

Normalerweise würden Sie entweder den Antwortcode für das Geschlecht oder einen umkodierten Wert (also z.B: eine Alterskategorie) in eine interne Variable speichern. Für diese würden Sie mittels statistic() bei jedem Aufruf des Fragebogens eine Häufdigskeitsauszählung machen, um zu prüfen, ob Sie schon genug Fälle haben. Die bis dahin erreichte Summe können Sie zusätzlich in den Datensatz schreiben, das ist aber eher unüblich. Von einem manuellen Zählen (+1) würde ich abraten. Das ist zu fehleranfällig.

> in manchen Fällen ist die Reihenfolge der Zählung seltsam (wie beschrieben z.B.: 10,11,12,14,13,16,15,18,17,19, ...).

Das kommt (wie Sie schon vermuten) dann zustande, wenn ein Interview früher begonnen wurde (in dem Fall das mit der 14), das andere (hier das mit der 13) aber zuerst zu der Seite mit der Zählung gekommen ist.

> Deutet dies darauf hin, das die internen Variablen grundsätzlich korrekt zählen?

Ganz falsch ist es womöglich nicht ... Sie zählen aktuell mit statistic() einfach die Anzahl gültiger Werte in der entsprechenden Variable. Der Funktion ist es dementsprechend egal, ob dort eine 13, 14 oder 99999 steht.

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

...