How to conduct conjoint analysis in SurveyCTO

What is conjoint analysis?

Conjoint Analysis (also known as Discrete Choice Modeling) is a statistical technique that was pioneered in market research to determine how people value different attributes that make up an individual product or service. The main idea is that any given product or service can be described in terms of its distinct attributes or features, and the extent to which these attributes are valued determines the overall value of the product or service. However, conjoint analysis is also applicable to other fields, including economics and psychology; when researchers are interested in the influence different attributes have on decision-making and choices, conjoint analysis can be used to tease apart those effects.

This capability is made possible through SurveyCTO's support for field plug-ins, resulting in the conjoint-analysis plug-in

Example 1: Community Health Program

Consider an organization planning a new community health program. They want to know what aspects of the program are most important to the community. These could be attributes like the frequency of health worker visits, the types of services provided (vaccinations, maternal health, etc.), the distance to the nearest health center, and so forth. They could use conjoint analysis to understand how the community values these attributes by conducting surveys where respondents are presented with different combinations of program attributes and asked to rank or rate them. Analysis of these rankings or ratings would then allow the organization to identify the relative importance of each attribute and design the program accordingly.

Example 2: Agricultural 

Alternatively, think of an agricultural research institution that has developed a new variety of maize seed that they believe could be beneficial to rural farmers. This seed has a set of attributes: higher yield potential, drought resistance, disease resistance, shorter maturity period, and cost. The researchers want to understand which of these attributes farmers value most when deciding which seed to plant. To do this, they could conduct a conjoint analysis study which would involve presenting farmers with hypothetical seed profiles, each characterized by different combinations of these attributes. For example, one profile might represent a seed that's high-yielding, moderately drought-resistant, highly disease-resistant, has a long maturity period, and is expensive. Another might represent a seed that's moderately yielding, highly drought-resistant, moderately disease-resistant, has a short maturity period, and is cheap. The farmers would then be asked to rank or rate these profiles according to their preferences. The collected data would be analyzed to determine the relative importance of each attribute in influencing the farmers' decisions.


Collecting data for conjoint analysis using SurveyCTO

As above, collecting data for conjoint analysis is made possible in SurveyCTO thanks to the conjoint-analysis field plug-in. While the plug-in makes conjoint analysis simple and easy to configure and deliver as a mobile app and web form experience, it needs to be configured with attributes and levels for your own experiment. Advanced users who have already used the field plug-in may be happy to get started by testing the plug-in directly but you can also continue with this guide and learn by doing!

Deploying a sample on your server

Click below to view this workflow in the Hub and install it on your server.

Install Workflow

Advanced users can find the sample workflow files in this folder. For help with manual deployment, check out our support article Deploying form definitions and server datasets.

Setting up the field plug-in

When we talk about conjoint analysis, we are usually dealing with features (or "attributes") and the different options (or "levels") for each feature. Let's imagine we're evaluating political candidates. The features of the candidates could be their political leanings, their age, education levels, and policies. Now, let's consider our choices for these features:

Attribute Attribute Levels (types of each attribute)
Political Leanings
  • Liberal
  • Moderate
  • Conservative
Age group
  • Under 30
  • Between 30 and 50
  • Over 50
Education Level
  • High School
  • Bachelors Degree
  • Masters Degree or higher
Healthcare policy
  • Universal healthcare
  • Private healthcare
  • Public-private partnership
Economic policy
  • Tax cuts
  • Increase in minimum wage
  • Support for small businesses

To add these to your form, you will need to:

  1. Create a comma-separated list of the attributes
  2. Create a comma-separated list of the attribute levels for each attribute
  3. Create a pipe-separated list of all the attribute levels

You can use calculate fields to store this data (ordinarily, calculate fields take functions and operators that are used to store dynamic values but in this case, they're being used to store attributes and levels):

type name label calculation
calculate attributes Comma-separated list of attributes "Political Leanings,Age group,Education Level,Healthcare policy, Economic policy"
calculate political_leanings_array Comma separated list of levels for political leanings "Liberal,Moderate,Conservative"
calculate age_group_array

Comma separated list of levels for age groups

"Under 30,Between 30 and 50,Over 50"
calculate education_array Comma separated list of levels for education levels "High school,Bachelors Degree,Masters Degree or higher"
calculate healthcare_array

Comma separated list of levels for healthcare policies

"Universal Healthcare,Private Healthcare,Public-private partnership"
calculate economic_array

Comma separated list of levels for economic policies

"Tax cuts,Increase in minimum wage,Support for small businesses"
calculate levels_array

Put each set of values (levels) in square brackets.

Separate the sets by a comma

calculate labels Comma separated list of labels for the buttons "Candidate 1, Candidate 2"

The field plug-in will generate two profiles (randomized combinations) which will be presented in a table format, with buttons to select one profile or the other.


Respondents will generate the data for analysis by making a choice between profiles over a series of different combinations.


Understanding the data

When a choice is selected, the field stores a pipe (|) separated list of the options presented to the respondent and the choice selected. By default, these will be the ordinal representations of the values defined in the form. For example:


Here, it means the options were presented as follows:

  Candidate 1 Candidate 2
Political Leanings Liberal Liberal
Age group Between 30 and 50 Under 30

Education Level

Masters Degree or higher High school
Healthcare policy Private Healthcare Private Healthcare
Economic policy Tax cuts Increase in minimum wage

And the selected option was Candidate 2.

To prepare the data for analysis, you may want to further break this down into tokens that can be easily consumed by your data analysis software. In the sample form, we use calculate fields to do this, allowing for the extraction of the levels of each attribute that was presented as well as which attribute was selected. Since the data is collected using repeat groups, exporting the data in long format will give you a row for each instance for ease of comparison. 

Utilizing ordinal values yields numerical responses, which are predominantly favored by analysis software. Should you have a preference for string values, you may adjust the data_format parameter to a value of 'string'. For the preceding example, the result would be: 

Political Leanings,Liberal,Liberal|Age group,Between 30 and 50,Under 30|Education Level,Masters Degree or higher,High school|Healthcare policy,Private Healthcare,Private Healthcare|Economic policy,Tax cuts,Increase in minimum wage


Analyzing the Data

If you are looking to analyze your conjoint analysis data, you will likely need to reshape your dataset to run common conjoint-related packages. If you are a Stata user, you can find here guidelines on how you can prepare your data in Stata to use the conjoint command. While based on Stata commands, these guidelines might still be helpful if you are using R or any other data analysis tool, so you can better understand the steps to take to export and reshape your data.

If you are a STATA user, we have a script that can help automate the preparation of your data.

Customization and improvements

This plug-in has a number of options that aren't discussed in this article. Please consult the README in GitHub for a comprehensive list of ways you can customize your conjoint analysis experiments using this plug-in.

Limitations of the current implementation

There are some limitations to the current implementation. You won’t be able to: 

  1. Have more than two profiles at any one time
  2. Display and randomize images Include images as part of the profiles.


Feedback from you

These are the currently known limitations but we may have missed something or perhaps you have suggestions on what we can add. We would love to hear your feedback. Please write to or raise issues directly on the GitHub repository and we'll get back to you.


Article is closed for comments.