0 votes
in Methoden-Fragen by s151388 (275 points)
edited by s151388

Liebes SoSci Survey Team,

wir möchten eine Online Befragung mit mehreren Teilen durchführen, dabei wird es zum einen Fragebögen zu festen Zeitpunkten geben, zum anderen können die Teilnehmenden bei einem Experience Sampling-Teil mitmachen. In diesem Teil der Studie sollen die Teilnehmenden eine Woche lang jeden Tag 6 Online-Fragebögen erhalten, allerdings zu randomiserten Zeitpunkten. Welche Woche das ist, wird innerhalb eines bestimmten Zeitraums zufällig ausgewählt. Diese Zufallsauswahl habe ich über eine Frage vom Typ Zufallsgenerator bereits angelegt. Ich würde nun gerne im Anschluss an die Festlegung der Woche den entsprechenden Versand der Serienmails/SMS programmieren. Können Sie mir vielleicht sagen, wie so etwas für einen zeit-randomisierten Versand funktioniert? Geht das auch über mailSchedule? Oder funktioniert mailSchedule nur mit festen Zeitpunkten?

Herzlichen Dank und viele Grüße!

1 Answer

0 votes
by SoSci Survey (304k points)
selected by s151388
 
Best answer

Technisch akzeptiert mailSchedule() für jede Teilnehmerin und jeden Teilnehmer ein eigenes Datum bzw. einen separaten Zeitpunkt. Sie müssen also nur noch dafür sorgen, dass Sie zufällige Zeitpunkte an die Funktion übergeben.

So macht das der zeitrandomisierte Serienmail-Versand im übrigen auch. Da wird für jede Person aus den definierten Zeitschienen ein Zeitpunkt gezogen und dieser dann in den Versand-Zeitplan eingetragen.

Hier ein Beispiel, wie Sie am 16. März einen zufällige Zeitpunkt zwischen 15 und 17 Uhr auswählen. Da haben Sie 2 Stunden = 7200 Sekunden. Und die UNIX-Zeitstempel sind ja einfach nur Sekunden. Also:

$time = strtotime('2021-03-16 15:00:00') + random(0, 7200);

Diesen Zeitstempel können Sie direkt an mailSchedule() übergeben.

Mit Wochentagen funktioniert das ähnlich. Hier z.B. ein zufälliger Tag in der Woche vom 15.03.2021 und darin ein Zeitpunkt zwischen 15 und 17 Uhr:

$time = strtotime('2021-03-16 15:00:00 +'.random(0,4).' days') + random(0, 7200);

Oder ebenso möglich, weil ein Tag (abgesehen von den Tagen mit Zeitumstellung!) immer 86400 Sekunden hat.

$time = strtotime('2021-03-16 15:00:00') + random(0,4) * 86400 + random(0, 7200);
by s151388 (275 points)
Super, vielen herzlichen Dank, das hilft mir sehr weiter!
Folgenden Punkt hatte ich in der Beschreibung oben leider vergessen: Es soll die Beschränkung geben, dass zwei Befragungen mindestens 45 Minuten auseinander liegen. Wenn also die erste Befragung im Zeitfenster von 9-11 Uhr zufällig um 10:50 versendet wird, soll die zweite Befragung im nächsten Zeitfenster (11-13 Uhr) frühestens um 11:35 versendet werden. Lässt sich das in Ihrem Code ergänzen?
by SoSci Survey (304k points)
> Lässt sich das in Ihrem Code ergänzen?

"Mein Code" oben ist nur ein Beispiel, wo man überhaupt anfangen kann.

Natürlich kann man das nach Belieben ausbauen. Wenn Sie also mindestens 45 Minuten Pause haben möchten, dann würden Sie nach dem Würfeln des ersten Zeitpunkts (t1) erstmal berechnen, in welchem Zweitfenster der zweite Zeitpunkt liegen kann. Der frühestmögliche Zeitpunkt wäre dann in Ihrem Beispiel das Maximum von t1 + 45 Minuten und 11 Uhr. Der letztmögliche Zeitpunkt wäre 13 Uhr.

Die "Breite" dieses neuen Zeitfensters (z.B. 11:35 bis 13:00 Uhr) könnten Sie wieder in Sekunden ausdrücken (also einfach eine Subtraktion der Zeitstempel) und dann den obigen Befehl entsprechend anpassen.

So, jetzt viel Spaß beim Knobeln! Sie einzelnen Schritte kennen Sie, jetzt müssen Sie es nur noch als PHP-Code formulieren.

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

...