Welcome to the LimeSurvey Community Forum

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

CBC Conjoint Analyse

More
1 month 2 weeks 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
1 month 2 weeks ago - 1 month 1 week 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: 1 month 1 week ago by Joffm.

Please Log in to join the conversation.

More
1 month 1 week ago - 1 month 1 week 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: 1 month 1 week ago by Joffm.

Please Log in to join the conversation.

More
1 month 1 week 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 month 1 week 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 month 1 week 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 month 1 week 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.

More
3 weeks 4 days ago #275184 by oneStudent125
Replied by oneStudent125 on topic CBC Conjoint Analyse
Hallo @Joffm,

entschuldige für die späte Rückmeldung. Wenn die Frage "pool" nicht vom Typ "Gleichung" war, habe ich 12 Zeichen erhalten, die so nicht im Pool vorkamen. Durch die Abänderung erhalte ich aber die richtigen Zeichenketten. 

Vielen Dank nochmal für deine Mühe und Unterstützung :-)

Please Log in to join the conversation.

More
3 weeks 4 days ago #275185 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
Mein Problem ist trotzdem dies zu verstehen.
Beide Zeichenketten sind ja identisch - es sei denn, es wurde auf irgendeine Weise etwas hineingemauschelt.

Wenn es Dir nichts ausmacht,
wäre ich dankbar, Du würdest 
  • "pool1" als Textfrage anlegen
  • "pool2" als Gleichungsfrage
Dann mit derselben Zeichenkette füllen.
So, wie es bei Dir war.

Nur das schickst Du bitte.
Dann kann ich vergleichen.

Bis dann 
Joffm 

 

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

Please Log in to join the conversation.

More
3 weeks 2 days ago #275187 by oneStudent125
Replied by oneStudent125 on topic CBC Conjoint Analyse
Hallo @Joffm,

anbei habe ich dir die Datei mit den 2 Pool Fragen angehängt. Ich habe hier wieder dieselben Zeichenketten eingefügt.

Ich hätte noch eine kleine weitere Nachfrage. Ich habe festgestellt, dass die Bootstrap-Buttons auf dem Smartphone untereinander angezeigt werden, auch wenn das Smartphone im Querformat gehalten wird. Gibt es hier eine Möglichkeit die Buttons nebeneinander zu bekommen (zumindest im Querformat)?

Mit freundlichen Grüßen

 

Please Log in to join the conversation.

More
2 weeks 6 days ago #275199 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
Ja, das ist so weil die Breakpoints so gesetzt sind. Der Umschaltpunkt liegt bei 767px.
Da musst Du schon etwas tiefer in die Struktur von "bootstrap" einsteigen, um das zu ändern.

Aber meinst Du wirklich man könne diese fünf Spalten auch an einem so kleinen Device beantworten (es bleiben ja nur 150 Pixel pro Spalte)?

Dann wäre es vielleicht besser ein solches Layout zu wählen.
 
Ist noch sehr rudimentär; ich spiele gerade damit.
Dies sind auch nur vier bootstrap-buttons. Sie werden zwar auch bei 767 Pixel untereinander dargestellt; das sollte aber nicht so dramatisch sein.

Wenn Du es wirklich sauber auf einem kleinen Device darstellen willst, solltest Du in Erwägung ziehen, Dir für ein paar Monate die Cloud-Version selbst zu besorgen.
Dann kannst Du z.B. mit den Bibliotheken "tinyslider" bzw. "slick" dies darstellen
 

wie in meinem "Tutorial 3: Gimmicks". Kap. 11.2. gezeigt.

Es werden immer so viele Karten angezeigt, wie gut auf den Bildschirm passen, mit einem Anschnitt rechts/links zur Verdeutlichung.

Gut soweit.

Das kleine Problem ist: Ich sehe keine angehängte lss.

Bis dann
Joffm



 

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

Please Log in to join the conversation.

More
2 weeks 6 days ago #275201 by oneStudent125
Replied by oneStudent125 on topic CBC Conjoint Analyse
Hallo @Joffm,

nun sollte die Datei mit dabei sein.

Leider bin ich seitens der Universität gezwungen, die bereitgestellte LimeSurvey-Version zu verwenden. Trotzdem sieht die Lösung nach einer guten Alternative aus.
Ich habe mir überlegt einen Hinweis einzubauen, der die Teilnehmer darauf hinweist das Smartphone ins Querformat zu bringen. Ist zwar weiterhin nicht optimal, jedoch spürbar besser als im Hochformat.

Mit freundlichem Gruß
 

File Attachment:

File Name: limesurvey...983_.lss
File Size:290.96 KB

Please Log in to join the conversation.

More
2 weeks 4 days ago #275206 by Joffm
Replied by Joffm on topic CBC Conjoint Analyse
So, jetzt ist es klarer.
Der Glitch, den ich schon erwähnte, scheint immer noch da zu sein. "cid0" wird nicht berechnet, wenn die Gleichung mittels php versteckt wird.
Dies sollte eigentlich nicht sein - auch versteckte Gleichungen solten berechnet werden - aber hier scheint es eben nicht der Fall zu sein.

Ergebnis: Es wird NAN (Not A Number) gejoint zu "#NAN:".
Dies wird in den Daten nicht gefunden, als ist dsas Ergebnis von "strpos" 0 -> der erste Datensatz.
Und da über die Länge dieses strings der Anfang der eigentlichen Daten berechnet wird, dies Ding aber 5 Zeichen lang ist, "#1:" aber nur drei Zeichen, wird dann eben zwei Zeichen zu spät im ersten Datensatz gestartet, und es wird Mist angezeigt. 

Die Lösung ist:
Man versteckt die Frage mittels css; d.h. die Frage bekommt die css-Klasse "d-none"
Dan wird aber nur die Frage an sich versteckt, nicht das ganze Drumherum; es würden also die Buttons angezeigt werden.
Abhilfe: Man fügt in diese Gruppe eine sichtbare Frage ein. Das geht hier ja gut, da man irgendwelche Infos zum weiteren Procedere geben kann

Schau es einmal an.
 

File Attachment:

File Name: limesurvey...83_J.lss
File Size:237.51 KB


Joffm

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

Please Log in to join the conversation.

Moderators: holch, Joffm, tpartner

Lime-years ahead

Online-surveys for every purse and purpose