Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

CBC Conjoint Analyse

More
2 weeks 1 day ago #275043 by oneStudent125
Replied by oneStudent125 on topic CBC Conjoint Analyse
Hallo @Joffm,

ich finde die Idee mit den Zeichenketten sehr gut. Jedoch habe ich noch nicht ganz verstanden, wie in diesem Fall die 400 Zeichenketten in der Umfrage gespeichert werden um darauf zuzugreifen. Da es sich um eine offene Umfrage handelt kann ich keine Daten dem einzelnen Teilnehmer anhängen. Somit müsste es am Anfang der Umfrage gespeichert werden. Benötige ich hierfür eine Gleichungsfrage, die mit IF Formeln die richtige Zeichenkette festlegt? Oder gibt es hierfür bessere Alternativen?


Mit freundlichem Gruß

Please Log in to join the conversation.

More
2 weeks 1 day ago - 2 weeks 8 hours ago #275044 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
Hallo,
richtig; dies wird am Anfang in einer Frage vom Typ "kurzer Text" oder "langer Text", egal, gespeichert.
Und zwar als Vorgabeantwort.
Frage "pool"

Dann hast Du ja schon gesehen, dass am Anfang ein Identifier steht, wie "#13:".
Dabei dienen die Textzeichen nur dazu, zu verhindern, dass die "13" auch bei der Suche nach "3" gefunden wird.

Ich habe die Umfrage jetzt so angelegt, dass zyklisch die "SAVEDID mod 100" benutzt wird.
Soll heißen: Ich habe im "pool" nur 100 Zeilen, dafür bekommt die Nr. 101 wieder die Zeichenkette 1.
SAVEDID? Ist einfach die laufende Nummer des Antwortdatensatzes (in der Antworttabelle die Spalte "id")
 

So, jetzt kommt etwas ExpressionScript:
Um diese zyklische Nr zu berechnen - und sie gleich mit den zusätzlichen Zeichen zu umrahmen, dient in der Gleichungsfrage "cid"
{join('#',SAVEDID-floor((SAVEDID-1)/100)*100,':')}

SAVEDID-floor((SAVEDID-1)/100)*100 ist die Modulo-Berechnung, die Funktion "join" macht die Raute davor und den Doppelpunkt dahinter.
Dazu kannst Du auch in meinem "Tutorial 4: Gleichungen, Zu- und andere Fälle" etwas nachlesen.

Danach folgen in der ersten Gruppe, die ja gar nicht angezeigt wird, noch
ST: eine Frage "kurzer Text" als Container zur Zwischenspeicherung des benötigten Strings.
C eine Matrix(Text) zur Zwischenspeicherung der 12 benötigten Werte.

Nun folgen die zwölf Gruppen, die völlig identisch sind.
Hier ist nicht die geringste Änderung nötig, nur "Kopieren" und entsprechenden Fragecodes vergeben

Auch hier noch einmal eine kurze Erläuterung, was gemacht wird.
eqSTx: 
Hier wird aufgrund der cid der entsprechende string gesucht, aufgrund der Frage (1-12) das entsprechende Teilstück herausgeschnitten und in ST zwischengespeichert. 
{ST=substr(pool,strpos(pool,cid)+strlen(cid)+(self.gseq-eqST1.gseq)*12,12)}
Sieht kompliziert aus, ist es aber nicht.
strpos(pool,cid) findet den Index in "pool", wo eben "cid" beginnt, also die Raute.
Da es in LimeSurvey ein bisschen kompliziert ist, Zahlen links mit "0" aufzufüllen, ist die Länge von "cid" nicht bekannt.
Daher wird diese Länge berechnet "strlen(cid)" und hinzuaddiert. Dort beginnt also der eigentliche String.
Da wir für die erste Frage die ersten 12 Zeichen, für die zweite Frage die zweiten 12 Zeichen, usw. benötigen, wird mit "self.gseq-eqST1.gseq" die Frage berechnet.
"self.gseq" ist der Gruppenindex der jeweiligen Frage in der laufenden Umfrage, "eqST1.gseq" der Frage eqST1 (die erste Gruppe hat den Wert 0); daher hat diese Differenz in der ersten Gruppe den Wert 0, in der zweiten den Wert 1, usw.
Genau, wie es benötigt wird.
Es wird also bei der ersten Frage 0*12 hinzuaddiert, bei der zweiten Frage 1*12, dann 2*12, 3*12, usw.
Und dann werden genau die folgenden zwölf Zeichen in ST gespeichert.

eqCx:
Hier wird nun dieser 12stellige string aufgedröselt und in die 4x3 Zellen der Matrix gespeichert.
{C_1_1=substr(ST,0,1)}
{C_1_2=substr(ST,1,1)}


Das ist wohl klar:
In die erste Zeile, erste Spalte von C wird vom ersten Zeichen in ST genau ein Zeichen in die Zelle geschrieben.
In die erste Zeile, zweite Spalte von C wird vom zweiten Zeichen in ST genau ein Zeichen in die Zelle geschrieben.
Beachte: Sowohl "strpos" wie auch "substr" beginnen bei "0".

Dies Speicherung in der Matrix erleichtert nun das Folgende - die Anzeige der Texte.
Da haben wir z.B. für die Zeile "Personalisierung" diese drei Spalten:
{if(C_1_1==1,'Silber',if(C_1_1==2,'Schwarz','Weiß'))}
{if(C_1_2==1,'Silber',if(C_1_2==2,'Schwarz','Weiß'))}
{if(C_1_3==1,'Silber',if(C_1_3==2,'Schwarz','Weiß'))}

Und jetzt sieht man, warum diese zusätzliche Speicherung in C die Sache etwas übersichtlicher macht.
Ohne sie sähen die drei Spalten so aus
{if(substr(ST,0,1)==1,'Silber',if(substr(ST,0,1)==2,'Schwarz','Weiß'))}
{if(substr(ST,1,1)==1,'Silber',if(substr(ST,1,1)==2,'Schwarz','Weiß'))}
{if(substr(ST,2,1)==1,'Silber',if(substr(ST,2,1)==2,'Schwarz','Weiß'))}

Man sieht, in jedem IF-Konstrukt wird zweimal dieselbe Berechnung durchgeführt - das ist unnötig.

Dies alles ist simples ExpressionScript mit einigen wenigen Funktionen.
Falls noch nicht geschehen, schau sie Dir hier noch einmal an.
[url] www.limesurvey.org/manual/ExpressionScri...mentierte_Funktionen [/url]

Und jetzt endlich die lss.
Wie gesagt, nur mit 5 Gruppen / Fragen. Ich hatte keine Lust sie noch siebenmal zu kopieren 
 

File Attachment:

File Name: limesurvey...2785.lss
File Size:140.89 KB


Und es ist offensichtlich, dass diese Umfrage nur im aktivierten Modus funktioniert; sonst gibt es ja keine Datenspeicherung, und somit auch keine SAVEDID.
Wie gesagt, dieser Ansatz mit der SAVEDID  ist leicht zu realisieren;  natürlich haben auch Abbrecher einen Datensatz und diese fällt dann aus.
Es gibt andere Verfahren. Dazu mehr ebenfalls im angesprochenen Tutorial 4.

Bis dann

Joffm

P.S.
Ein kleiner Zusatz:
Es wäre für die Analyse wohl praktischer, statt einer Einfachnennung - egal ob mit Matrix oder Bootstrap-Buttons - eine Mehrfachnennung zu nehmen, also Matrix(Zahlen) oder auch Bootstrap-Buttons (natürlich dann beschränkt auf eine Antwort)
Vorteil:
In der Analyse benötigst Du die Werte für jede Spalte in binärem Format (0 / 1).
Dies kannst Du ja beim Export der Daten so einstellen, also dass dieses "Y" und "" in irgendwelche anderen Zeichen - Du nimmst natürlich "1" und "0" - umgewandelt werden.
Dann kannst Du mit sehr geringem Aufwand das Ergbnis direkt in die Modell-Datei hineinkopieren.

Ich bin mit R nicht wirklich "auf Du und Du", habe mir aber einmal dieses Video angeschaut
[url] www.youtube.com/watch?v=s-h5UVarqZg [/url]
wo die benutzte Datei dieselbe Struktur wie Deine Datei hat und die "choice" Spalte wird dann mit den LimeSurvey Ergebnissen einfach befüllt.
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 8 hours ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 5 hours ago - 2 weeks 5 hours ago #275045 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
So, hier kommt nun dasselbe Beispiel - aber mit bootstrap buttons und mit Mehrfachnennung.
Außerdem schien es einen glitch in der Berechnung der "cid" zu geben. Ich habe sie gesplittet, eine andere Formel genommen und dann noch in zwei Gruppen gesteckt.

Gut, damit bekommst Du nach dem Export eine wunderschöne Struktur


Diese kann Du jetzt in Excel transformieren, und dann Teilnehmer für Teilnehmer einfach hinter Dein Modell "knallen"
Du siehst, wie gut es passt
 
Statt jeden einzelnen Teilnehmer nun zu kopieren, würdest Du besser ein kleines Excel-Makro dafür schreiben.

Hier die lss
 

File Attachment:

File Name: limesurvey...5_J2.lss
File Size:171.82 KB


Bis dann
Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 5 hours ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 3 hours ago #275047 by Mazi
Replied by Mazi on topic CBC Conjoint Analyse
Wow, was für eine tolle Unterstützung @Joffm!

Best regards/Beste Grüße,
Dr. Marcel Minke
survey-consulting.com
offlinesurveys.com
Feel free to contact me by email for professional LimeSurvey support!

Please Log in to join the conversation.

More
1 week 6 days ago #275048 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
So, noch ein Letztes.
Bis jetzt habe ich die Werte des Modells auf diese Art eingelesen.
 
Dies ist wohl etwas umständlicher als diese Art und Weise.
 
Soll heißen: Ein Makro, um die strings zu erstellen ist weitaus kürzer
Und es ist auch nur eine winzige Änderung im LS Programm nötig.
In alle eqCx wird hineinkopiert
Code:
{C_1_1=substr(ST,0,1)}
{C_2_1=substr(ST,1,1)}
{C_3_1=substr(ST,2,1)}
{C_4_1=substr(ST,3,1)}
{C_1_2=substr(ST,4,1)}
{C_2_2=substr(ST,5,1)}
{C_3_2=substr(ST,6,1)}
{C_4_2=substr(ST,7,1)}
{C_1_3=substr(ST,8,1)}
{C_2_3=substr(ST,9,1)}
{C_3_3=substr(ST,10,1)}
{C_4_3=substr(ST,11,1)}

So, jetzt sollte sich @oneStudent125 erst einmal äußern.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
1 week 4 days ago #275070 by oneStudent125
Replied by oneStudent125 on topic CBC Conjoint Analyse
Hallo @Joffm,

ich bin überwältigt von deiner großartigen Unterstützung. Vielen Dank für deine Mühe und deinen sehr hilfreichen Vorlagen.

Ich habe es getestet und es funktioniert einwandfrei. Lediglich die "pool" Frage habe ich in eine Gleichungsfrage umwandeln müssen, da ansonsten die Werte der Zeichenketten falsch eingelesen wurden.


Mit freundlichem Gruß

Please Log in to join the conversation.

More
1 week 4 days ago #275073 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
Richtig, eine Gleichungsfrage geht auch; ist ja eigentlich "gehoppt wie gesprungen".
Es würde mich aber interessieren, inwiefern etwas "falsch eingelesen" wurde.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose