0 votes
in SoSci Survey (dt.) by s047711 (250 points)

Meine Versuchsanordnung ist ein bisschen kompliziert. Deshalb frage ich erstmal vorneweg, ob es da einen Trick gibt, bevor ich mich mit PHP versuche.

Je nach Antwort bei Frage SK02 sollen unterschiedliche Pfade durchlaufen werden, also gefiltert werden. Die beiden Unterskalen mit der höchsten Ausprägung (das sind jeweils 4 Items pro Skala) sollen ergeben, welche Fragen in der Folge bearbeitet werden sollen (das sind dann jeweils mehrere, ca. 10-12).

Danach soll dann in Kontroll - und Experimentalgruppe aufgeteilt werden, und zwar 50/50. Allerdings soll die direkt darauf folgende Frage auch wiederum spezifisch nach den vorher gefilterten Pfaden angezeigt werden. Geht das soweit überhaupt?

Dann soll in der Folge eine von 2 Fragen, Reihenfolge randomisiert (unabhängig von Exp.- und Kontr.Gruppe), gezeigt werden.

Dann wieder eine Seite entsprechend der Filterfrage SK 02 (und hier nicht mehr unterschiedlich für Kontroll- und Experimentalgruppe).

Dann nochmal die zweite der beiden reihenfolge-randomisierten Fragen.

Dann noch abschließend einige weitere Fragen, für alle Gruppen gleich.

Entschuldigung, dass ich die Frage ohne schon von mir erstellten Code bringe, aber ich befürchte, mich sonst erstmal hoffungslos zu verheddern.

3 Answers

0 votes
by SoSci Survey (308k points)

Die beiden Unterskalen mit der höchsten Ausprägung (das sind jeweils 4 Items pro Skala) sollen ergeben, welche Fragen in der Folge bearbeitet werden sollen

Für die Pfade sehen Sie sich bitte setPageOrder() an - unbedingt in Verbindung mit der Einführung zu Arrays.

Was die Subskalen angeht, sehen Sie sich bitte valueMean() an. Um die größten zu finden, bieten sich Arrays und die PHP-Funktion asort() und array_keys(). Zugegeben, daran werden Sie ein klein wenig zu beißen haben. Aber mit debug() und dem Debug-Modus können Sie immer nachsehen, was gerade in Ihren Variablen (Arrays) gespeichert ist. Und wenn Sie konkreten PHP-Code haben, können wir im Support auch konkrete Fragen beantworten.

Danach soll dann in Kontroll - und Experimentalgruppe aufgeteilt werden, und zwar 50/50.

Das ist relativ einfach - die Anleitung zur Randomisierung erklärt das recht detailliert. Von der vorherigen Programmierung ist das weitgehend unabhängig.

Allerdings soll die direkt darauf folgende Frage auch wiederum spezifisch nach den vorher gefilterten Pfaden angezeigt werden. Geht das soweit überhaupt?

Da müssen Sie nur überlegen, ob Sie das 50/50-Verhältnis in jeder der Subgruppen einhalten müssen (das wären bei z.B. Subskalen 5x4=20 mögliche Subgruppen) oder ob es reicht, wenn Sie den Teilnehmer quasi schon zu Beginn in eine der Gruppen einteilen. Dass der Inhalt in der EG oder KG dann noch abhängig von der Subgruppe variiert wird, ist nicht weiter kompliziert. Nur ein Filter im Filter.

Dann nochmal die zweite der beiden reihenfolge-randomisierten Fragen.

Just more of the same...

0 votes
by s047711 (250 points)
reshown by s047711

Habe jetzt mal versucht für jede Subskala ein Array zu definieren. Dann die asort-Funktion, um zu filtern, welchen entsprechenden Pfad die Probanden bekommen. Leider kam dann die am Ende stehende Warnung.

  $sum = valueSum(
             $Sozial = array(
               'SK02_01',
               'SK02_02',
               'SK02_03',
               'SK02_04',
             )
           );
    
    $sum = valueSum(
             $Verbal = array(
               'SK02_05',
               'SK02_06',
               'SK02_07',
               'SK02_08',
             )
           );
    $sum = valueSum(
             $Logisch = array(
               'SK02_09',
               'SK02_10',
               'SK02_11',
               'SK02_12',
             )
           );
    
    $sum = valueSum(
             $Kreativ = array(
               'SK02_13',
               'SK02_14',
               'SK02_15',
               'SK02_16',
             )
           );
    
    <?php
    $Skalen = array("a" => "Sozial", "b" => "Verbal", "c" => "Logisch", "d" => "Kreativ");
    asort($Skalen);
    foreach ($Skalen as $key => $val) {
        echo "$key = $val\n";
    }
    ?>
Warnung: Das PHP Schlüsselwort echo darf im PHP-Code nicht verwendet
werden.

Warnung: Der PHP-Code enthält Funktionen oder PHP-Elemente, die nicht
für die Verwendung im Fragebogen freigegeben wurden. Falls Sie der
Meinung sind, dass die monierten Konstrukte ungefährlich sind, setzen
Sie sich bitte mit dem Administrator in Kontakt!
0 votes
by s047711 (250 points)

Ich habe mein Problem im Wesentlichen gelöst, komme jetzt aber an einer Stelle nicht weiter. Mit arsort und Array_keys bekomme ich die richtigen Pfade (siehe setPageOrder-Teil unten im Code). Allerdings besteht das Problem, dass arsort mir bei identischen Elementen (also gleichen Punktwerten in den Skalen) nicht random irgendeins auswählt, sondern immer ein bestimmtes (ich nehme an, weil es als erstes im Code genannt wird). Das zerschießt mir ein Stück weit die Studie. Ich hoffe ich habe das Problem klar erklärt... Wie bekomme ich ihn dazu, bei identischen Elementen eins zufällig auszuwählen (oder sogar zwei, dann aber diesen beiden auch in zufälliger Reihenfolge)?

Anbei der Code:

$SumSoz = valueSum(
         $Sozial = array(
           'SK02_01',
           'SK02_02',
           'SK02_03',
           'SK02_04',
         )
       );

$SumVer = valueSum(
         $Verbal = array(
           'SK02_05',
           'SK02_06',
           'SK02_07',
           'SK02_08',
         )
       );
$SumLog = valueSum(
         $Logisch = array(
           'SK02_09',
           'SK02_10',
           'SK02_11',
           'SK02_12',
         )
       );

$SumKre = valueSum(
         $Kreativ = array(
           'SK02_13',
           'SK02_14',
           'SK02_15',
           'SK02_16',
         )
       );



// Sortiere mir alle Summen und geben sie mir aus
$SumArray = array("Soz" => $SumSoz, "Ver" => $SumVer,"Log" => $SumLog,"Kre" => $SumKre);
arsort($SumArray);
$Dim1 = array_keys($SumArray)[0];
$Dim2 = array_keys($SumArray)[1];


if (
  ($Dim1 == "Ver") and
  ($Dim2 == "Soz")
) { 
  setPageOrder('SE01-SE11, SE20, SE12-SE19, WF07, VE01-VE05, WF03');
 
}


if (
  ($Dim1 == "Soz") and
  ($Dim2 == "Ver")
) {
  setPageOrder('VE01-VE05, WF07, SE01-SE11, SE20, SE12-SE19, WF03');
  
}

if (
  ($Dim1 == "Kre") and
  ($Dim2 == "Soz")
) {
  setPageOrder('SE01-SE11, SE20, SE12-SE19, WF07, KR01-KR14, WF03');
   
}

if (
  ($Dim1 == "Soz") and
  ($Dim2 == "Kre")
) {
  setPageOrder('KR01-KR14, WF07, SE01-SE11, SE20, SE12-SE19, WF03');

}

if (
  ($Dim1 == "Ver") and
  ($Dim2 == "Kre")
) {
  setPageOrder ('KR01-KR14, WF07, VE01-VE05, WF03');

}

if (
  ($Dim1 == "Kre") and
  ($Dim2 == "Ver")
) {
  setPageOrder ('VE01-VE05, WF07, KR01-KR14, WF03');
}

if (
  ($Dim1 == "Log") and
  ($Dim2 == "Ver")
) {
  setPageOrder ('VE01-05, WF07, LM01-LM07, WF03'); 
  
}

if (
  ($Dim1 == "Ver") and
  ($Dim2 == "Log")
) {
  setPageOrder ('LM01-LM07, WF07, VE01-05, WF03'); 
  
}

if (
  ($Dim1 == "Soz") and
  ($Dim2 == "Log")
) {
  setPageOrder ('LM01-LM07, WF07, SE01-SE11, SE20, SE12-SE19, WF03'); 
  
}

if (
  ($Dim1 == "Log") and
  ($Dim2 == "Soz")
) {
  setPageOrder ('SE01-SE11, SE20, SE12-SE19, WF07, LM01-LM07, WF03'); 
   
  
}

if (
  ($Dim1 == "Log") and
  ($Dim2 == "Kre")
) {
  setPageOrder ('KR01-14, WF07, LM01-LM07, WF03'); 
  
}

if (
  ($Dim1 == "Kre") and
  ($Dim2 == "Log")
) {
  setPageOrder ('LM01-LM07, WF07, KR01-KR14, WF03'); 
  

}

by SoSci Survey (308k points)
Ohne die Debug-Information schwer zu beantworten... Inhaltlich sieht der PHP-Code korrekt aus. Vermutlich liegt das Problem an anderer Stelle.

Ergänzen Sie ein debug($maxis) nach dem shuffle(), um den Verlauf im Debug-Modus genau zu verfolgen.
by s047711 (250 points)
Bisher klappte alles gut (bei mir im Programm), aber sobald jemand von aussen zugriff, kam immer folgende Fehlermeldung

Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Undefined offset: 1
Zeile: 48

PHP-Code

045 }
046 shuffle($maxis); debug($maxis);
047 $use = $maxis[0];
048 $use = $maxis[1];
049
050
051

Teilweise wird auch nicht korrekt gefiltert, d.h. anstatt der ersten beiden aus der Rangreihe, werden einfach alle nacheinander angezeigt (wenn auch offenbar in zufälliger Reihenfolge).

Liegt es daran, dass $maxis[1] nicht definiert ist?
by SoSci Survey (308k points)
Ja, die Fehlermeldung liegt daran, dass $maxis nicht (immer) definiert ist. Nur, wenn min. 2 Optionen denselben Wert erreichen. Das "von innen/außen" dürfte hier keinen Unterschied machen.
by s047711 (250 points)
Was mache ich, damit immer die ersten beiden gefiltert werden können?
by SoSci Survey (308k points)
Bitte legen Sie doch mal eine neue Frage an, posten sie dort den kompletten PHP-Code, wie sie ihn bisher verwenden und erklären Sie knapp, was genau Ihr Ziel ist. Danke.

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

...