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,
Für unser Projekt erhalten NutzerInnen einen individuellen Code, der mit urnDraw() aus einer Urne gezogen wird. Dieser wird dann anschließend mit panelUpdate('custom2', $code) im Panel gespeichert. Leider habe ich feststellen müssen, dass teilweise die Codes, die im Panel gespeichert waren, nicht in der Urne als gezogen vermerkt wurden, während zugleich Codes aus der Urne gezogen wurden, die nicht im Panel gespeichert waren.
Mir ist nicht klar, woran dies liegen könnte. Könnten Sie mir da weiterhelfen?

Anmerkung: In Bezug auf Ihren Kommentar hier noch eine ausführlichere Darstellung:
In unserer Studie gibt es zwei subgroups (PAS und GAS), die je nach Gruppenzuteilung Codes aus zwei verschiedenen Urnen (gas und pas) erhalten.
Zugleich werden diese auch randomisiert über zwei weitere Urnen (grpgas und grppas). Dies erfolgt über den folgenden Code:

option('nextbutton', 'Randomisierung');

$serial = caseSerial();  // Seriennummer auslesen
$info = panelData();
$disease = $info['subgroup'];

// Gruppenzuordnung: Wartegruppe oder Interventionsgruppe
if(panelData()['subgroup'] == 'GAS') {
urnDraw("grpgas",'RN04',"now");}
else {
urnDraw("grppas",'RN04',"now");}

$random = value('RN04_01');

if ($random == 1) $group = 1;
if ($random == 2) $group = 2;
panelUpdate('custom1', $group);
//Code aus der jeweiligen Urne ziehen:
if(panelData()['subgroup'] == 'GAS') {urnDraw("gas", "RN03");} 

if(panelData()['subgroup'] == 'PAS') {urnDraw("pas", "RN03");}
$code = value("RN03_01");

panelUpdate('custom2', $code);  //Code in das Panel eintragen

//Mail für Intervention
if ($random == 1){
mailSchedule(false, 28 , 0, ['%custom1%' => $code]);}

//Mails für Wartekontroll: Wartemail + Einladung // Rauslöschen und Link 
if ($random == 2){
mailSchedule(false, 13,0);}

mailSchedule(false,22,8467200);

Leider ergibt sich dabei folgendes Problem: Wenn ich im Panel nachschaue, finden sich die folgenden beiden Probleme (siehe Bild im Anhang):

1. Aus der pas-Urne wird zwar gezogen, diese wird aber nicht geleert, dh. die Codes werden bei den NutzerInnen im Panel gespeichert, aber nicht in der Urne als gezogen vermerkt (eigentlich müssten drei Codes daraus gezogen sein - diese stehen auch im Panel).
2. Alle NutzerInnen werden unabhängig ihrer Subgroup nur anhand der grpgas-Urne randomisiert und nicht je nach subgroup aus der grpgas oder der grppas-Urne.
3. An anderer Stelle werden je nach Subgroup zwei verschiedene Links ausgegeben - auch da gab es Schwierigkeiten, den richtigen zur Gruppe passenden Link abzurufen über das Panel:

if (panelData()['subgroup']=='GAS') buttonToPage('GAS', 'Start', '%link01%', 'likelink');
if (panelData()['subgroup']=='PAS') buttonToPage('PS', 'Start', '%link01%', 'likelink');

Ich habe den Eindruck, dass es Probleme gibt, die Subgroup aus dem Panel auszulesen - ich hatte diese mal in einer Variable zwischengespeichert aber der eingespeicherte Wert war manchmal nicht korrekt. Ich komme aber nicht dahinter, wo genau die Schwierigkeit dabei liegt. Können Sie da vielleicht weiterhelfen?

EDIT:
Die Vermutung, dass es Probleme beim Panel-Abruf gibt, hat sich erhärtet. Wenn ich den folgenden Code ausführe, ergibt sich beim Panel-Abruf folgende Konsequenz (Im Panel ist GAS eingetragen):

    option('nextbutton', 'Randomisierung');

$serial = caseSerial();  // Seriennummer auslesen
$info = panelData();
$disease = $info['subgroup'];

html('Folgende Subgroup:<br>');
html(panelData()['subgroup']);

html('<br>Folgende Urne zur Randomisierung:<br>');


// Gruppenzuordnung: Wartegruppe oder Interventionsgruppe
if(panelData()['subgroup'] = 'GAS') {
urnDraw("grpgas",'RN04',"now");
html('grpgas-Urne (GAS):<br>');
}

if(panelData()['subgroup'] = 'PAS') {
urnDraw("grppas",'RN04',"now");
html('grppas-Urne (Panik):<br>');
}

$random = value('RN04_01');


if ($random == 1) $group = 1;
if ($random == 2) $group = 2;
panelUpdate('custom1', $group);
html('<br>Folgende Urne zum Code Ziehen:<br>');

if(panelData()['subgroup'] = "GAS") {urnDraw("gas", "RN03", "now");
$code = value("RN03_01");
html('GAS-Urne (GAS):<br>');
$link = 'https://checkout.selfapy.com/?partner=unigiessen_gas&course=gas_study&package=basicense_code=CODE';}

if(panelData()['subgroup'] = "PAS") {urnDraw("pas", "RN03", "now");
$code = value("RN03_01");
html('PAS-Urne (Panik):<br>');
$link = 'https://checkout.selfapy.com/?partner=unigiessen_panic&course=panic_study&package=basicense_code=CODE';}

panelUpdate('custom2', $code);

html('<br>Folgender Code:<br>');
html($code);
html('<br>');


//Mail für Intervention
if ($random == 1){
mailSchedule(false, 28 , 0, ['%custom1%' => $code]);
html('Zuteilung Intervention');}

//Mails für Wartekontroll: Wartemail + Einladung // Rauslöschen und Link 
if ($random == 2){
mailSchedule(false, 13,0);
html('Zuteilung Wartekontrollgruppe');
}

mailSchedule(false,22,8467200);

Ich verstehe nicht, warum jeweils BEIDE IF-Verzweigungen durchgeführt werden, obwohl im Panel GAS steht und nicht PAS. Das Panel ist soweit ich sehe auf Personenbezogen gesetzt, wobei ich nicht ausschließen kann, dass möglicherweise pseudonym auch gesetzt war. Ich habe leider nicht gefunden, wie ich das genau nachprüfen kann.

in SoSci Survey (dt.) by s163609 (110 points)
edited ago by s163609
Ist es möglich, dass die Befragten den Fragebogen mehrfach ausgefüllt haben?

Möchten Sie Ihre Frage evtl. um ein wenig PHP-Code ergänzen? Und auch ein paar Informationen, wie der Ablauf im Fragebogen war, z.B. an welcher Stelle die Ziehung und der PHP-Code waren? So "ohne alles" kann ich nur wild spekulieren...
Ich habe die Darstellung jetzt umfangreicher gestaltet, um das Problem besser zu schildern.

2 Answers

0 votes

Danke für die Ergänzungen.

  1. Aus der pas-Urne wird zwar gezogen, diese wird aber nicht geleert,

Aus dem Screenshot entnehme ich, dass weder für "pas" noch für "grppas" Zettel entnommen wurden. Sind Sie sicher, dass wirklich aus der "pas" Urne gezogen wird?

Wie kommt es, dass die Anzahl der gezogenen Zettel zwischen "gas" und "grpgas" unterschiedlich ist? Laut Code müsste ja aus beiden Urnen immer gleichzeitig geogen werden. Wurden die Urnen zu unterschiedlichen Zeitpunkten zurückgesetzt?

Haben Sie einmal anhand der Debug-Informationen nachvollzogen, aus welchen Urnen gezogen wird und was anschließend in der Urne vermerkt ist?

Wie haben Sie denn den Befragungszeitraum eingestellt? Wenn selbiger bereits läuft und ein Interview als Vorschau oder im Debug-Modus läuft, wird die Ziehung nicht gezählt, um die Randomisierung nicht zu stören.

  1. Alle NutzerInnen werden unabhängig ihrer Subgroup nur anhand der grpgas-Urne randomisiert und nicht je nach subgroup aus der grpgas oder der grppas-Urne.

Ergänzen Sie doch bitte einmal folgende Zeile im PHP-Code und prüfen Sie, ob die 'subgroup' überhaupt korrekt ausgelesen wird:

debug($info);
debug(panelData()['subgroup']);
  1. An anderer Stelle werden je nach Subgroup zwei verschiedene Links ausgegeben - auch da gab es Schwierigkeiten,

Ja, das geht auch in die Richtung, die ich vermute. Welchen Datenschutz-Modus haben die Adresseinträge denn?

aber der eingespeicherte Wert war manchmal nicht korrekt.

Haben die Adresseinträge vielleicht sogar unterschiedliche Datenschutz-Modi?

ago by SoSci Survey (160k points)
Ich habe die Frage noch einmal geupdated um die angefragten INformationen zu ergänzen.
Danke, ich habe in einer separaten Antwort geantwortet.
0 votes

Ich verstehe nicht, warum jeweils BEIDE IF-Verzweigungen durchgeführt werden, obwohl im Panel GAS steht und nicht PAS.

Ei, ei, ei ... ein klassischer Fallstrick bei der Programmierung von IF-Filtern (egal in welcher Programmiersprache.

if(panelData()['subgroup'] = 'GAS')

Der Knackpunkt ist das Gleichheitszeichen. Ein einfaches Gleichheitszeichen weist einer Variable einen Wert zu. Ein doppeltes Gleichheitszeichen vergleich zwei Werte (das was Sie eigentlich brauchen):

if (panelData()['subgroup'] == 'GAS')

Normalerweise beschwert sich PHP, wenn man einer Funktion einen Wert zuweisen möchte. Aber durch die Verkettung von Funktionsaufruf und Array-Abfragewird hier wohl keine Fehlermeldung ausgeworfen.

ago by SoSci Survey (160k points)
...