Please help us help you and fill where relevant:
LimeSurvey version: 6.16.4
Own server or LimeSurvey Cloud: LimeSurvey Cloud
Survey theme/template: fruity_twentythree
==================
Hello Dear Community,
Goal & Context
I'm trying to build a
conjoint analysis / discrete choice survey for a social science
experiment, where I'd like to measure preferences for student scholarship recipients.The survey needs to:
- Present 10 sequential choice tasks
- Each task shows 2 student profiles side-by-side in a table
- Respondents select which profile they prefer
- Each respondent sees different random profiles (full per-respondent randomization)
- BUT Name Restriction: EITHER no profile with the same name appears more than once per respondent OR the profile with the same name appears with the same attribute levels if they appear more than once per respondent (whichever is more feasible)
- Radio buttons embedded in the table cells for selection
This is a modern conjoint design based on the seminal "Causal Inference in Conjoint Analysis: Understanding Multidimensional Choices via Stated Preference Experiments" article by Hainmueller et al. (2014) where I need
independent randomization of attribute levels across respondents, not just fixed profile sets repeated for all respondents.
---
Profile Attributes & Levels: 5 attributes in total
Attribute: Levels // (Notes)
1. Name: Leon Schmidt, Lukas Müller, Jan Fischer, Paul Wagner, Jannik Weber, Tom Becker, Jonas Meyer, Emil Lehmann, Niklas Scholz, Luca Hartmann, Arda Yılmaz, Emre Kaya, Can Demir, Baran Şimşek, Deniz Güneş, Mehmet Öztürk, Kaan Kılıç, Efe Kaplan, Ömer Çalışkan, Ali Yıldız // (10 German-sounding and 10 Turkish-sounding names, 20 names in total)
2. Field of Study: Mechanical Engineering, Law, Psychology, Business Administration // (4 fields)
3. Grade (GPA): 1.3 (Very Good), 2.0 (Good), 2.7 (Satisfactory) // (3 grades according to the German grading scale)
4. Extracurricular Activity: Student Parliament, Sports Club, Music Tutor, Food Bank Volunteer // (4 activities)
5. Semester: 3rd semester (Bachelor), 5th semester (Bachelor), 3rd semester (Master) // (3 semesters)
Design: Profiles are
factorially designed combinations of all attributes (~2,880 unique profiles generated from these attribute levels). BUT the
NAME RESTRICTION should be applied.
---
Desired Table Display -> Should look something like the CAR example (see attached below) in
Tutorial_Gimmicks Chapter 11
(second image in the chapter) but I couldn't somehow replicate it. ---
Key Challenges I've Encountered
1.
Per-Respondent Randomization
-
Problem: I initially created 10 fixed HTML files with hardcoded profile pairs (run once, same for all respondents)
-
Why It Failed for Conjoint: This violates the core principle of conjoint analysis—attribute levels need to vary independently across respondents so I can isolate individual attribute effects
-
What I Need: Each respondent should see 10 different random profile pairs (profiles A and B drawn randomly from the pool of 2,880, applying the name restriction)
2.
Radio Button Placement in Table Cells
-
Problem: Attempted to use "Tutorial_Gimmicks Chapter 11" method (JavaScript DOM manipulation) to move radio buttons into table cells
-
Why It Failed: LimeSurvey 6.x appears to have security restrictions or structural issues that prevent reliable DOM access to radio button elements
-
What I Need: Radio buttons should be clickable and positioned directly in the bottom row of the profile table (appear as if they're part of the table layout)
3.
JavaScript Execution in LimeSurvey 6.x
-
Problem: JavaScript in question text (Source Mode) sometimes fails silently—no console errors, but functionality doesn't execute
-
What I Need: Either a working JavaScript solution OR an alternative approach (e.g., custom question type, plugin, or alternative rendering method)
---
Attempts Made (For Context)
I've tried:
1. ✗ JavaScript in question HTML with `document.addEventListener()` and `setTimeout()` to move LimeSurvey's auto-generated radio buttons
2. ✗ Static hardcoded profile pairs (worked visually, but not true conjoint randomization)
3. ✗ Embedding `<input type="radio">` elements directly in HTML and using JavaScript to trigger LimeSurvey's answer recording
---
***QUESTIONS***
1.
Randomization: What's the best approach to achieve
per-respondent random profile selection in LimeSurvey 6.x?
- Should profiles be stored in a hidden field or database?
- Can LimeSurvey expressions or tokens generate random indices?
- Is there a plugin or extension for this?
2.
Radio Button Placement: How can I reliably embed/position radio buttons inside table cells while maintaining LimeSurvey's answer recording?
- Does the Chapter 11 method work in LimeSurvey 6.x, or has it changed?
- Are there CSS-only solutions to reposition the radio buttons?
- Should I use a custom question type?
3.
Alternative Approaches: If JavaScript/DOM manipulation isn't reliable, are there other ways to build a conjoint interface in LimeSurvey?
- Custom question type development?
- Integration with external JavaScript libraries?
- Database-driven dynamic content?
---
Any guidance on how to properly implement a
modern conjoint analysis with full randomization and proper table layout in LimeSurvey 6.x would be greatly appreciated. Happy to provide more details, sample files, or clarifications.Thanks in advance!