0 votes
in SoSci Survey (dt.) by s052164 (120 points)
edited by SoSci Survey

Liebes Support Team,

ich habe einen Loop erstellt. In jedem Loop bekommen die Versuchsteilnehmer 2 Werte in randomisierter Reihenfolge angezeigt. Nun möchte ich pro Loopdurchgang sowohl das Wertepaar abspeichern, das ich in einem "array" als Zahl gespeichert habe.
Mithilfe Ihrer Hilfeseiten konnte ich einen Code erstellen, der die numerische Zahl in einer internen Variablen abspeichert. Die interne Variable habe ich links in der Variablenliste auch angelegt. Allerdings wird nur beim ersten Durchgang der Loop die Variable "VP01_01" gespeichert. Bei den folgenden Durchgängen werden keine Variablen "VP02_01", "VP03_01", etc. mehr im Datensatz gespeichert.

Ich habe folgenden Code für das Abspeichern benutzt; ich habe insgesamt 18 Loop-Durchgänge:

  //save value pair number
$counter_map = [
    'VP01_01', 'VP02_01', 'VP03_01', 'VP04_01', 'VP05_01', 'VP06_01', 'VP07_01', 
    'VP08_01', 'VP09_01', 'VP10_01', 'VP11_01', 'VP12_01', 'VP13_01', 'VP14_01', 
    'VP15_01', 'VP16_01', 'VP17_01', 'VP18_01'
];

if ($counter >= 0 && $counter <= 17) {
    $key = $counter_map[$counter];  
    $value = $traitarray[$counter][5];

    // Überprüfen, ob der Wert im gültigen Bereich ist (1 bis 18)
    if ($value >= 1 && $value <= 18) {
        put($key, $value);
    } else {
        put($key, -99);  // Wenn der Wert nicht im gültigen Bereich ist
    }
}

Weiterhin habe ich die Anzeige, welcher Wert links und welcher Wert rechts steht randomisiert. Auch hierzu möchte ich jeweils in einer separaten internen Variable speichern, welcher der beiden Werte rechts bzw. links steht. Hierzu habe ich folgenden Code probiert, aber auch hier wird nur beim ersten Durchgang eine Variable im Datensatz gespeichert:

//save left-right randomization
$left_map = [
    'LR01_01', 'LR02_01', 'LR03_01', 'LR04_01', 'LR05_01', 'LR06_01', 'LR07_01', 
    'LR08_01', 'LR09_01', 'LR10_01', 'LR11_01', 'LR12_01', 'LR13_01', 'LR14_01', 
    'LR15_01', 'LR16_01', 'LR17_01', 'LR18_01'
];

if ($counter >= 0 && $counter <= 17) {
    $key = $left_map[$counter];  // Dynamisch den VP Key basierend auf dem Counter wählen
    $value = $leftarray[$counter][0];

    // Verwende if-else für die Prüfung auf "left" oder "right"
    if ($value == "left") {
        put($key, 0);  // Wert 0 für "left"
    } else if ($value == "right") {
        put($key, 1);  // Wert 1 für "right"
    } else {
        put($key, -99);  // Standardwert, wenn nichts von beiden zutrifft
    }
}

Ich habe diese Woche sehr viele Möglichkeiten ausprobiert, aber komme leider nicht weiter. Ich benötige die Studie dringend im Rahmen einer Seminararbeit an der Universität. Könnten Sie mir bitte helfen?

Vielen, vielen Dank im Voraus!!

by SoSci Survey (339k points)
Wo kommt denn die $counter Variable in Ihrem Code her? Wo wird $traitarray definiert und wo $leftarray? Kann es vorkommen, dass $value nicht im gültigen Bereich liegt?
by s052164 (120 points)
Vielen Dank für Ihre Antwort!

Auf einer vorherigen Seite habe ich folgenden Code für die Einteilung der Experimental-Gruppen erstellt. ZG01 ist die Zufallsvariable, die auf der gleichen Seite zuvor gezogen wurde und nach der die Versuchspersonen in die Experimentalgruppen zugeteilt werden:

// Festlegen der 4 Experimental-Bedingungen
// Bed 1: Fit zu Group1
// Bed 2: Misfit zu Group1
// Bed 3: Fit zu Group2
// Bed 4: Misfit Group2


if (value('ZG01') == 1) {
  $fitarray= [['WP01', 'maj'],
   ['WP02', 'maj' ],
   ['WP03', 'maj'],
   ['WP04', 'maj' ],
   ['WP05', 'maj' ],
   ['WP06', 'maj' ],
   ['WP07', 'maj' ],
   ['WP08', 'maj' ],
   ['WP09', 'maj' ],
   ['WP10', 'maj' ],
   ['WP11', 'maj' ],
   ['WP12', 'maj' ],
   ['WP13', 'maj' ],
   ['WP14', 'maj' ],
   ['WP15', 'min'],
   ['WP16', 'min'],
   ['WP17', 'min'],
   ['WP18', 'min']];
  replace('%bedingung%', 'Menschen, die zu Gruppe 1 neigen,');
  replace('%bedingung_bild%', 'match_group1');
}
if (value('ZG01') == 2) {
  $fitarray= [['WP01', 'min' ],
   ['WP02', 'min' ],
   ['WP03', 'min' ],
   ['WP04', 'min' ],
   ['WP05', 'min' ],
   ['WP06', 'min' ],
   ['WP07', 'min' ],
   ['WP08', 'min' ],
   ['WP09', 'min' ],
   ['WP10', 'min' ],
   ['WP11', 'min' ],
   ['WP12', 'min' ],
   ['WP13', 'min' ],
   ['WP14', 'min' ],
   ['WP15', 'maj'],
   ['WP16', 'maj'],
   ['WP17', 'maj'],
   ['WP18', 'maj']];
  replace('%bedingung%', 'Menschen, die zur Gruppe 1 neigen,');
  replace('%bedingung_bild%', 'match_group1');
}
if (value('ZG01') == 3) {
  $fitarray= [['WP01', 'maj' ],
   ['WP02', 'maj' ],
   ['WP03', 'maj' ],
   ['WP04', 'maj' ],
   ['WP05', 'maj' ],
   ['WP06', 'maj' ],
   ['WP07', 'maj' ],
   ['WP08', 'maj' ],
   ['WP09', 'maj' ],
   ['WP10', 'maj' ],
   ['WP11', 'maj' ],
   ['WP12', 'maj' ],
   ['WP13', 'maj' ],
   ['WP14', 'maj' ],
   ['WP15', 'min'],
   ['WP16', 'min'],
   ['WP17', 'min'],
   ['WP18', 'min']];
   replace('%bedingung%', 'Menschen, die zur Gruppe 2 neigen,');
   replace('%bedingung_bild%', 'match_group2');
}
if (value('ZG01') == 4) {
  $fitarray= [['WP01', 'min' ],
   ['WP02', 'min' ],
   ['WP03', 'min' ],
   ['WP04', 'min' ],
   ['WP05', 'min' ],
   ['WP06', 'min' ],
   ['WP07', 'min' ],
   ['WP08', 'min' ],
   ['WP09', 'min' ],
   ['WP10', 'min' ],
   ['WP11', 'min' ],
   ['WP12', 'min' ],
   ['WP13', 'min' ],
   ['WP14', 'min' ],
   ['WP15', 'maj'],
   ['WP16', 'maj'],
   ['WP17', 'maj'],
   ['WP18', 'maj']];
   replace('%bedingung%', 'Menschen, die zur Gruppe 2 neigen,');
   replace('%bedingung_bild%', 'match_group2');
}

shuffle($fitarray);
registerVariable($fitarray);


$counter = 0;
registerVariable($counter);



Auf der nachfolgenden Seite in SoSci habe ich dann das Studienmaterial als $traitarray eingegeben. Der $traitarray besteht aus 18 vorgetesten Wertepaaren und einer genaueren Beschreibung, den zugehörigen Prozentzahlen zum Wertepaar, sowie der Identifikationsnummer des Wertepaares gemäß meinen Unterlagen.

$traitarray = [
[
'VERANTWORTUNGSBEWUSST',
'(zuverlässig, pflichtbewusst)',
'TOLERANT',
'(verschiedenen Meinungen und Überzeugungen gegenüber tolerant)',
85,
1
],

['UNABHÄNGIG',
'(selbstständig, selbstversorgend)',
'ERFOLGREICH',
'(Ziele erreichen)',
78,
2],

[
'WAHRE FREUNDSCHAFT',
'(enge, unterstützende Freund*innen)',
'TIEFE LIEBE',
'(tiefe emotionale und spirituelle Intimität)',
77,
3
],

[
'SINN IM LEBEN',
'(einen Lebensinhalt haben)',
'INNERE HARMONIE',
'(mit sich im Reinen sein)',
88,
4
],

[
'EIN AUFREGENDES LEBEN',
'(spannende Erfahrungen)',
'KREATIVITÄT',
'(Einzigartigkeit, Vorstellungskraft)',
69,
5
],

[
'ZUGEHÖRIGKEITSGEFÜHL',
'(Gefühl, anderen wichtig zu sein)',
'NATIONALE SICHERHEIT',
'(Schutz der eigenen Nation vor Feinden)',
63,
6
],

[
'KREATIVITÄT',
'(Einzigartigkeit, Vorstellungskraft)',
'EIGENE ZIELE WÄHLEN',
'(eigene Vorhaben wählen)',
82,
7
],

[
'UNABHÄNGIG',
'(selbstständig, selbstversorgend)',
'FÄHIG',
'(kompetent, effektiv, effizient)',
86,
8
],

[
'HILFSBEREIT',
'(für das Wohlergehen anderer sorgen)',
'VERANTWORTUNGBEWUSST',
'(kompetent, effektiv, effizient)',
67,
9
],

[
'SOZIALE GERECHTIGKEIT',
'(Ungerechtigkeit reduzieren, sich um die Schwachen kümmern)',
'ZUGEHÖRIGKEITSGEFÜHL',
'(Gefühl, anderen wichtig zu sein)',
64,
10
],

[
'VERANTWORTUNGSBEWUSST',
'(zuverlässig, pflichtbewusst)',
'EHRLICH',
'(aufrichtig, echt)',
68,
11
],

[
'ERFOLGREICH',
'(Ziele erreichen)',
'INTELLIGENT',
'(logisch, denkend)',
72,
12
],

[
'EIGENE ZIELE WÄHLEN',
'(eigene Vorhaben wählen)',
'NEUGIERIG',
'(alles interessant finden, Neues entdecken)',
71,
13
],

[
'VERGEBEND',
'(Bereitschaft, anderen zu verzeihen)',
'VERANTWORTUNGSBEWUSST',
'(zuverlässig, pflichtbewusst)',
65,
14
],

[
'VERANTWORTUNGSBEWUSST',
'(zuverlässig, pflichtbewusst)',
'LOYAL',
'(den Freund*innen/ der eigenen Gruppe gegenüber loyal sein)',
81,
15
],

[
'KREATIVITÄT',
'(Einzigartigkeit, Vorstellungskraft)',
'INTELLIGENT',
'(logisch, denkend)',
70,
16
],

[
'EINFLUSSREICH',
'(einen Einfluss auf andere Menschen/ Ereignisse haben)',
'EIN AUFREGENDES LEBEN',
'(spannende Erfahrungen)',
76,
17
],

[
'SINN IM LEBEN',
'(einen Lebensinhalt haben)',
'TIEFE LIEBE',
'(tiefe emotionale und spirituelle Intimität)',
75,
18
],

];
shuffle($traitarray);


//$leftarray = ['left', 'right'];
//oder:
$leftarray = [['left'], ['left'], ['left'], ['left'], ['left'], ['left'], ['left'], ['left'], ['left'],
              ['right'], ['right'], ['right'], ['right'], ['right'], ['right'], ['right'], ['right'], ['right']];
shuffle($leftarray);


registerVariable($traitarray);
registerVariable($leftarray);
by SoSci Survey (339k points)
Danke, das macht es schonmal klarer. Und wo haben Sie den Loop versteckt? Die Seite soll ja wiederholunt und $counter dabei hochgezählt werden. Traditionell hätte ich erwartet, dass irgendwo steht

$counter = loopPage(18);
by s052164 (120 points)
Es werden drei SoSci Seiten in der Loop wiederholt. Auf der letzten Seite befindet sich folgender Code für die Durchführung ders Loop:

// Loop. Angeben, die Seiten von 'starttrial' bis jetzt 18 Mal wiederholt werden sollen

if($counter < 17){
$counter = $counter + 1;
goToPage('starttrial');
}


Hilft das weiter?


Ich hätte gerne für jeden der 18 Look-Durchgänge jeweils eine Variable für die Anzeige:
- die ID der Wertepaare (siehe traitarray, fünfte Stelle pro Wertepaar)
- welcher Wert rechts angezeigt wird (siehe Leftarray "left" / "right")

Vielen lieben Dank nochmal für Ihre Hilfe!
- ob bei den Wertepaaren Match oder Mismatch zurückgemeldet wird (siehe fitarray: "maj" oder "min")

1 Answer

0 votes
by SoSci Survey (339k points)

Sie zählen die Counter-Variable im Moment manuell hoch.

if($counter < 17){
    $counter = $counter + 1;
    goToPage('starttrial');
}

Ich rate davon dringend ab, denn hier haben Sie mehrere potenzielle Fehlerquellen. Zum Beispiel würde der Zähler einen Wert überspringen, wenn die Person mit F5 die Seite erneut lädt (und dadurch der PHP-Code erneut läuft). Und mitunter vertragen sich registerVariable() und goToPage() auch nicht miteinander - ich vermute, das ist die Ursache für die von Ihnen geschilderte unerwartete Funktion des Codes.

Stattdessen sollten Sie auf der ersten Seite des Loops den Befehl loopToPage() verwenden.

$counter = loopToPage('endtrial', 18);

Auf den anderen beiden Seiten bekommen Sie den Zähler dann über loopIndex().

$counter = loopIndex();
by s052164 (120 points)
Danke für den Hinweis, ich habe den Loop dementsprechend angepasst.
Allerdings hat sich dadurch mein Problem leider nicht gelöst. Es wird leider insgesamt nur eine Variable im Datensatz abgespeichert (z.B. VP01_01) und nicht wie gewünscht pro Loop Durchgang (VP02_01, VP03_01). Ich habe die Variablen zuvor im Menü als "interne Variablen" angelegt (VP01, VP02, etc). Hätte ich hierbei noch etwas beachten müssen? Eine Antwortoption habe ich nicht angegeben, da die Antwort aus dem Loop gespeichert werden soll.
by SoSci Survey (339k points)
Gut, dann begeben wir uns mal auf Fehlersuche. Sie haben in Ihrem Code (der Code ganz oben) folgende Zeile:

$value = $traitarray[$counter][5];

Schreiben Sie darunter bitte mal ein paar Zeilen debug() und berichten Sie, was im ersten und zweiten Durchgang angezeigt wird an Debug-Information.

debug($counter);
debug($key);
debug($value);
by s052164 (120 points)
Ich habe den Code nun wie folgt eingefügt nachdem ich den $traitarray definiert habe:

//save value pair number
$counter_map = [
    'VP01_01', 'VP02_01', 'VP03_01', 'VP04_01', 'VP05_01', 'VP06_01', 'VP07_01',
    'VP08_01', 'VP09_01', 'VP10_01', 'VP11_01', 'VP12_01', 'VP13_01', 'VP14_01',
    'VP15_01', 'VP16_01', 'VP17_01', 'VP18_01'
];

if ($counter >= 0 && $counter <= 17) {
    $key = $counter_map[$counter];  // Dynamisch den VP Key basierend auf dem Counter wählen
    $value = $traitarray[$counter][5];

    debug($counter);
    debug($key);
    debug($value);

    // Überprüfen, ob der Wert im gültigen Bereich ist (1 bis 18)
    if ($value >= 1 && $value <= 18) {
        put($key, $value);
    } else {
        put($key, -99);  // Wenn der Wert nicht im gültigen Bereich ist
    }
}

Die Schleife läuft durch, allerdings wird immer noch nur eine Variable pro Durchgang gespeichert..

Im Test Modus erhalte ich folgende Informationen:
Debug-Information für $counter:
$counter = 0 (integer)

Debug-Information für $key:
$key = VP01_01 (string)
value('VP01_01') =

Debug-Information für $value:
$value = 18 (integer)
by SoSci Survey (339k points)
> Im Test Modus erhalte ich folgende Informationen:

Und wenn Sie dann weiter klicken bis zum nächsten Durchlauf, was wird dann angezeigt?
by s052164 (120 points)
Auf der nachfolgenden Seite bekomme ich folgenden Hinweis:
Eine oder mehrere Variablen (WP04) wurden bereits auf Seite 9 abgefragt. Bitte beachten Sie, dass die Antworten von Seite 9 hier angezeigt und anschließend überschrieben werden. Falls Sie eine gleichartige Frage mehrfach benötigen, erstellen Sie eine Kopie der Frage.

Allerdings werden mir im Datensatz wie gewünscht 18 unterschiedliche variablen gebildet (WP01 bis WP18).

Unabhängig davon bekomme ich noch folgende Warnung:
Sie speichern Zusatz-Daten (%traitarray%) mit mehr als 2 KB in diesem Interview. Bitte verwenden Sie für umfangreiche Platzhalter den Befehl show() anstatt replace().
by SoSci Survey (339k points)
WP04 ist nicht Gegenstand der o.g. Codes, daher würde ich diese Warnung (die Sie ernst nehmen sollten) erstmal hintenanstellen.

Meine Frage war eher, was die debug()- Information in der nächsten Wiederholung zu den drei Variablen sagt? Denn Auf dieser Basis können wir prüfen, an welcher Stelle das Speichern in VP01_02 schief läuft.
by s052164 (120 points)
Im Verlauf bekomme ich keine weiteren Deug Informationen bis beim ersten Durchgang (siehe oben)...

Debug-Information für $counter:
$counter = 0 (integer)

Debug-Information für $key:
$key = VP01_01 (string)
value('VP01_01') =

Debug-Information für $value:
$value = 18 (integer)
by SoSci Survey (339k points)
> bekomme ich keine weiteren Deug Informationen bis beim ersten Durchgang

Okay, das erklärt, warum nur eine Variable geschrieben wird.

Haben sie irgendwo noch das goToPage() verbaut? Das müsste raus, wenn Sie jetzt mit loopToPage() arbeiten.

Wenn es daran nicht liegt, müsste ich bitte nochmal den kompletten PHP-Code der Seite sehen, inkl. loopToPage() oder loopIndex().

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

...