Перейти к основному содержимому

Анкета для совместного анализа (конджоинт-анализа)

· 6 мин. чтения

Хотя данный метод редко используется в исследованиях, бывают анкеты, где часть вопросов нужно сделать именно для конджоинт-анализа. Существует большое количество различных видов совместного анализа. Давайте разберёмся, как реализовать наиболее часто встречающиеся из них в SURVEYSTUDIO.

Обычный совместный анализ (regular conjoint analysis — RCA)

Допустим, в плане исследования (дизайне) есть 12 профилей (карточек), которые должны выводиться в случайном порядке, и респондент будет их ранжировать. Для этого надо показать 12 раз вопрос с единственным выбором, у которого в качестве вариантов ответа — профили. В каждом следующем вопросе нужно скрывать выбранный ответ. В 12-м вопросе ответ можно выбирать автоматически, ведь в нём будет оставаться только один профиль.

В SURVEYSTUDIO можно создавать цикл по вопросу, чтобы не делать все вопросы вручную, этим и воспользуемся.

Необходимо добавить «служебный вопрос», по которому будет выполняться цикл. Пусть это будет Q8001 с условием показа false и 12-ю вариантами ответа (текст ответов не важен, можно просто коды 1-12). Ему также нужно поставить флаг Исключить вопрос при выгрузке, чтобы убрать из массива. Далее добавляем Q1 с единственным выбором, в тексте можно написать {answerCode}-е место, а в качестве ответов — 12 профилей. Для удобства респондента можно указать в поле Количество колонок желаемое значение.

Теперь надо добавить перемешивание ответов Q1 и создать цикл — добавить в Подготовку:

Q1.answers.randomize();
questions.repeatIfNot(1, 1, 8001);

Осталось скрывать выбранные ответы и выбирать ответ автоматически, если в списке остался один профиль — добавить в глобальный скрипт перед показом:

if ((Q.number / 100 | 0) === 1) {
let num = Q.number % 100;

Q.showAll();

for (let code of Q8001.getCodes()) {
if (code === num) break;

Q.hide(questions[100 + code].getCheckedCode());
}

if (Q.visibleCount === 1) {
Q[Q.getVisibleCodes()[0]].checked = true;
return answered;
}
}

Метод совместного выбора (conjoint based chioce — CBC)

Допустим, в плане исследования (дизайне) есть 48 профилей (карточек), которые должны выводиться в заданной последовательности по 4 карточки за раз, а респондент будет выбирать одну из них. 48 / 4 = 12 раз нужно показать вопрос с единственным выбором, у которого в качестве вариантов ответа 48 профилей, но на экране должны отображаться только необходимые, согласно дизайна.

Так же, как в обычном совместном анализе выше, нужно добавить такой же Q8001. И Q1 с необходимым текстом вопроса и 48-ю ответами (профилями). В поле Количество колонок нужно указать 4, чтобы карточки располагались горизонтально, по 4 штуки на экране. Это число будет использоваться и в скрипте.

В Подготовку добавляем:

questions.repeatIfNot(1, 1, 8001);

А в глобальный скрипт перед показом добавляем коды ответов (профилей) из плана исследования и логику их показа:

if ((Q.number / 100 | 0) === 1) {
let profiles = [32,33,12,41,27,3,22,11,20,17,4,26,38,30,48,39,21,47,40,45,37,24,36,46,16,19,23,43,25,15,6,13,42,44,34,9,29,1,10,31,18,8,14,7,5,28,35,2];
let num = Q.number % 100;
let from = (num - 1) * Q.columnCount;
let to = from + Q.columnCount;
let codes = profiles.slice(from, to);

Q.showOnly(codes);
Q.answers.setOrder(codes);
}

Количество последовательностей может быть любым. Кроме того, порядок показа карточек можно генерировать прямо во время опроса, для каждого респондента, а не жёстко прописывать в скрипте. Также в счётчиках проекта можно указывать, сколько примерно раз каждый профиль должен быть показан на том или ином месте (пример — в следующем разделе). В общем, реализовать можно практически что угодно.

Шкала максимального различия (maximum difference scaling — MaxDiff)

Этот метод называют упрощённым вариантом Conjoint-анализа, и вместо профилей с атрибутами респонденту показываются какие-либо продукты или логотипы вместе с одинаковым списком характеристик, из которых нужно выбрать наиболее и наименее важные (лучшую и худшую).

Допустим, есть 18 неких образцов и 4 характеристики. Каждый респондент оценивает 6 образцов, при этом важно, чтобы каждый образец оценивался примерно с такой же частотой, как и любой другой, а также появлялся на каждой позиции (от первой до шестой) с примерно одинаковой частотой — выводился примерно по 120 раз на каждом месте. То есть нужно будет провести 2.160 интервью.

В анкету необходимо добавить «служебный вопрос», по которому будет выполняться цикл, и в нём же будут случайно отбираться образцы для показа, если их квоты открыты. Пусть это будет Q8001 с 6-ю вариантами ответа с числовыми полями для кодов образцов. Добавляем в него модифицированный скрипт перед показом:

if (Q.isAnswered) return answered;

let samples = randomizeArray([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]);

// Это условие используется только в режиме тестирования анкеты
if (isTesting()) {
for (let A of Q.getVisible()) {
A.checked = true;
A.openValueNum = samples[A.code-1];
}
return answered;
}

let codes = [];
for (let A of randomizeArray(Q.getVisible())) {
for (let sample of randomizeArray(samples)) {
if (codes.indexOf(sample) > -1) continue;

let counterName = A.code + ' > Образец ' + sample;
let counter = getCounter(counterName);
if (counter === undefined) {
Q.comment = 'Произошла ошибка! Не найден счётчик «' + counterName + '»';
return ok;
}

if (counter.quota >= 0 && counter.value + 1 > counter.quota) continue;

A.checked = true;
A.openValueNum = sample;
codes.push(sample);

break;
}

if (A.openValueNum === undefined) {
return exitWithResult(InterviewResult.Overquoting, 'Квоты в проверяемых счётчиках закрыты.');
}
}

return answered;

Далее добавляем Q1 — таблица с единственным выбором, с ответами — характеристиками и двумя строками: для лучшей характеристики и худшей. Также нужно поставить флаг Перевернуть таблицу. В тексте вопроса, для примера, с помощью подстановки {Образец} будет выводиться код образца, хотя тут может быть что угодно: картинка, текст или видеоролик (подробности реализации выходят за рамки этой статьи).

Теперь надо создать цикл — добавить в Подготовку:

questions.repeat(1, 1, 8001);

Вставлять код текущего образца в глобальном скрипте перед показом:

if ((Q.number / 10 | 0) === 1) {
V['Образец'] = Q8001[Q.number % 10].openValueNum;
}

И запретить выбирать одну и ту же характеристику в глобальном скрипте после ответа:

if ((Q.number / 10 | 0) === 1) {
if (Q.rows[1].isChecked(Q.rows[2].getCheckedCode())) {
return error('Нельзя указывать одну характеристику как лучшую, так и худшую');
}
}

Осталось добавить в проект счётчики с квотами по 120 интервью для каждого образца на каждом месте, с именами вида Место > Образец N:

  • 1 > Образец 1: Q8001(code = 1 and valueNum = 1)…,
  • 1 > Образец 2: Q8001(code = 1 and valueNum = 2)…,
  • 6 > Образец 18: Q8001(code = 6 and valueNum = 18)….

И можно запускать опрос.

Важно понимать, что из-за случайного отбора образцов и массовости опроса могут получиться небольшие перекосы или одинаковые наборы образцов у нескольких респондентов.

Пример анкеты

Здесь можно посмотреть, как это всё работает: https://do.survey-studio.com/survey/start?qnkey=6caf2dba9140a949a82a9d00b1f1a190