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


[Решено] Шкалы со сложным алгоритмом


Сообщений в теме: 12

#1 SDR

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 06 Ноябрь 2013 - 16:21

Здравствуйте!

*Лирическое вступление*

Меня зовут Дмитрий, я работаю в научно-исследовательском институте, занимающимся, в частности, психологическими исследованиями. У нас есть комплекс авторских методик, которые уже давно и не особо успешно мы пытаемся автоматизировать (перенести в электронный формат), но проблема заключается в последующей обработке данных - для исследований мы используем сложный статистический анализ, а для разовых тестирований нужен удобный вывод индивидуальных результатов. Идеальный вариант - это конструктор тестов с экспортом первичных данных в Excel (что доступно в последней версии системы Indigo), поиском которого я в данный момент и занимаюсь. По совокупности достоинств ваша система однозначно оставила самое приятное впечатление, это отличный продукт, готовый к использованию практически любым пользователем. Но, к сожалению, как и почти во всех других подобных системах, чувствуется изначальная заточенность под тесты знаний, а возможность конструирования психологических тестов - это, по большей части, бонус. Несложные методики, где отдельные вопросы соответствуют отдельным шкалам перенести в Indigo не составило труда, но вот с одной из сложных методик возникла проблема.

Перехожу непосредственно к проблеме.

Методика оценивает поведенческие установки человека. Испытуемый отвечает на 16 вопросов, каждый из которых - некая жизненная ситуация, в которую он попадает. В каждом из 16 вопросов имеется 4 варианта ответов - действий в данной ситуации. Задача испытуемого - один из 4 вариантов ответа (одно из действий) выбрать как предпочтительное (ответить "Да"), а другой вариант (из оставшихся 3) выбрать как отвергаемый (ответить "Нет"). Частично это решается дублированием вопросов с заменой задания (сперва просим испытуемого выбрать наиболее предпочтительный вариант, затем - наименее предпочтительный), но вариант ответа, выбранный как "Да", затем можно выбрать и как "Нет", что может разрушить алгоритм обработки.

Но настоящая проблема кроется в ином: методика имеет 4 шкалы, соответственно, каждый вариант ответа в каждом вопросе соответствует той или иной шкале. Подсчет баллов в шкале производится на основе выбора того или иного варианта ответа. Допустим, Вопрос 4 -> Ответ 2 -> балл начисляется в Шкалу 3; если в том же вопросе мы выбираем Ответ 3, то балл начисляется другой шкале. Очевидно, что для подобной обработки нужны условия отбора вопросов и вариантов ответа. В Excel это реализовано через функцию СЧЁТЕСЛИ(), где в скобках мы задаем нужную ячейку и значение для отбора, например, идентификатор варианта ответа (допустим, "a", "b", "c", "d"). Задать индивидуальные идентификаторы вариантов ответа в Indigo, как я понимаю, не представляется возможным. Можно попробовать использовать функцию "за каждый вариант ответа свой балл", и эти баллы взять как индивидуальные идентификаторы. У нас есть 1, 2, 3 и 4. Теперь наша задача прописать в шкале учет вопроса только при определенном значении. Насколько я понимаю, в системе Indigo это делается следующим образом:

(Балл(группа_вопросов->вопрос 1)=1)+(Балл(группа_вопросов->вопрос 4)=1)

Если моя логика верна, то таким образом в шкалу будут отбираться вопросы 1 и 4 только при ответе 1.

Появляется другая проблема - поскольку в роли идентификаторов у нас выступают значения, то и результаты шкал между собой будут значительно отличаться - в 1 шкале у нас будут суммирроваться значения 1, во 2 шкале - значения 2 и т.д. По логике, это легко решить последующим делением на то значение, что использовалось в данной шкале в качестве идентификатора, например:

(Балл(группа_вопросов->вопрос 1)=2)+(Балл(группа_вопросов->вопрос 4)=2)/2

Получается, что мы возвращаем количество ответов, т.е. подсчет ведется так, будто учтенное значение = 1.

Увы, но проделанные манипуляции, почему-то, не работают. При завершении тестирования открывается пустой белый экран "Результаты", а на сервере все тестирования все еще продолжают быть активными. Прикладываю изображения ниже.

Прикрепленное изображение: indigo_base.JPG Прикрепленное изображение: indigo_base_2.JPG Прикрепленное изображение: indigo_base_3.JPG

#2 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 06 Ноябрь 2013 - 21:19

Здравствуйте!

Вы почти все сделали верно :) Это очень радует, что есть пользователи, которые самостоятельно способны решать (ну или почти решать) подобные задачи. Вы правильно догадались ввести идентификаторы 1, 2, 3, 4, но ошиблись в техническом нюансе. Вы использовали знак равенства =, а надо было использовать знак двойного равенства ==. Это что-то вроде стандарта, который встречается во многих языках программирования (C/C++/C#/PHP и д.р.). Знак равенства = в будущем предполагается использовать для других целей. Все нюансы изложены в документации https://indigotech.ru/manual раздел 2.2.2 Вычисление результатов, подраздел "Условный оператор". Хоть Вы и не использовали непосредственно сам условный оператор "условие ? если-истина : если-ложь", но использовали сами условия. Вот возможные условия:

== – равно;
< – меньше;
> – больше;
<= – меньше либо равно;
>= – больше либо равно;
!= или <> – не равно;
and – логическое И;
or – логическое ИЛИ.

Например:

2>1 ? 7 : 8, вернет 7.
10<5 ? 1 : 0, вернет 0.
(4<>3 and 5>=3) ? (4+6) : (1+2), вернет 10.
Условные операторы могут вкладываться друг в друга:
1+2==3 ? (2<1 ? 10 : (2+2==4 ? 11 : 12)) : 13, вернет 11.

Каждое из условий возвращает булев результат Истина или Ложь (1 или 0). Если булев результат будет участвовать в арифметических операциях, то он автоматически будет конвертирован в числа 1 или 0. У Вас самый простой случай условного оператора, запись вида (Балл(Вопрос 1) == 1 ? 1 : 0) эквивалентна (Балл(Вопрос 1) == 1). Таким образом, условия можно складывать, как Вы это и сделали. При этом не нужно производить деление, здесь Вы ошиблись. Складываться будут не идентификаторы, а 1 и 0, поэтому делить не нужно.

Таким образом, примерно то, что Вам нужно будет выглядеть следующим образом:

Шкала 1: (Балл(Вопрос 1) == 1) + (Балл(Вопрос 2) == 1) + (Балл(Вопрос 3) == 1) + ... + (Балл(Вопрос N) == 1)
Шкала 2: (Балл(Вопрос 1) == 2) + (Балл(Вопрос 2) == 2) + (Балл(Вопрос 3) == 2) + ... + (Балл(Вопрос N) == 2)
Шкала 3: (Балл(Вопрос 1) == 3) + (Балл(Вопрос 2) == 3) + (Балл(Вопрос 3) == 3) + ... + (Балл(Вопрос N) == 3)
Шкала 4: (Балл(Вопрос 1) == 4) + (Балл(Вопрос 2) == 4) + (Балл(Вопрос 3) == 4) + ... + (Балл(Вопрос N) == 4)

Действительно, система была заточена для контроля знаний, но очень многие психологические тесты можно автоматизировать, если знать как ухитриться. Мы не стали вводить отдельный тип теста "Психологический", т.к. он по логике ничем не отличался бы от "Контроля знаний", был бы тот же самый механизм шкал, который в будущем будет улучшен, возможно, подобные действия можно будет выполнять в более короткой записи.

#3 SDR

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 08 Ноябрь 2013 - 12:41

Благодарю за оперативный ответ :) Эх, значит я, все-таки, был близок к успеху - чисто технический момент. Опирался на информацию, найденную на этом форуме, с двойным знаком равенства ошибся - никогда не сталкивался с таким оператором, не программист :) Что касается условий, то предполагал, что без наличия выражения "? x : y" условие "х=y" или "х>y" не будет считаться оператором "истина-ложь". Сначала раздумывал прописать везде данное выражение, но посчитал это слишком громоздким, а вариант с делением выглядит куда симпатичнее. Вам стоит прописать в документации несколько моментов, в частности:

1) Использование условий (например, "==" или ">=") без выражения "? x : y" также формирует оператор "истина-ложь", т.е. результат выражения принимают значение 1/0, вне зависимости от стоимости ответа по конкретному вопросу;
2) При наличии вопросов, которые относятся сразу к нескольким шкалам, подсчет ведется при помощи разных баллов за ответы и последующем условии "==";
3) Формат записи с операциями: должны ли между условиями и значениями быть пробелы, или они пишутся слитно ("1+1" или "1 + 1"), или же это вообще не имеет значения (в разных темах на форуме вы предлагали разные варианты).

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

UPD:

Появился новый вопрос. Возможно ли создание дополнительной шкалы, в условии которой мы будем опираться на результаты остальных шкал? Т.е. в качестве условий мы берем не (Балл(Вопрос 1) == 1), а (Балл)(Шкала 1)==1) и т.д.?

Сообщение отредактировал SDR: 08 Ноябрь 2013 - 13:00


#4 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 08 Ноябрь 2013 - 19:35

Просмотр сообщенияSDR (08 Ноябрь 2013 - 12:41) писал:

1) Использование условий (например, "==" или ">=") без выражения "? x : y" также формирует оператор "истина-ложь", т.е. результат выражения принимают значение 1/0, вне зависимости от стоимости ответа по конкретному вопросу;
2) При наличии вопросов, которые относятся сразу к нескольким шкалам, подсчет ведется при помощи разных баллов за ответы и последующем условии "==";

- Согласен, требуется разъяснение и пример.

Просмотр сообщенияSDR (08 Ноябрь 2013 - 12:41) писал:

3) Формат записи с операциями: должны ли между условиями и значениями быть пробелы, или они пишутся слитно ("1+1" или "1 + 1"), или же это вообще не имеет значения (в разных темах на форуме вы предлагали разные варианты).

- Тоже введем уточнение. Сразу отвечу, что пробелы и переносы строк ни на что не влияют.

Просмотр сообщенияSDR (08 Ноябрь 2013 - 12:41) писал:

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

- Скачайте и запустите следующую программу https://indigotech.ru...e=untesting.exe. Она сбросит статусы Тестирования в Прервано.

Просмотр сообщенияSDR (08 Ноябрь 2013 - 12:41) писал:

Появился новый вопрос. Возможно ли создание дополнительной шкалы, в условии которой мы будем опираться на результаты остальных шкал? Т.е. в качестве условий мы берем не (Балл(Вопрос 1) == 1), а (Балл)(Шкала 1)==1) и т.д.?

- Сейчас, к сожалению, нет. Но эта функция уже имеется в плане на реализацию.

#5 Anry

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 171 сообщений
  • ГородАрхангельск

Отправлено 12 Ноябрь 2013 - 08:37

Подобная тема поднималась https://indigotech.r...81%D0%BE%D0%B2/

Просмотр сообщенияSDR (08 Ноябрь 2013 - 12:41) писал:

UPD:

Появился новый вопрос. Возможно ли создание дополнительной шкалы, в условии которой мы будем опираться на результаты остальных шкал? Т.е. в качестве условий мы берем не (Балл(Вопрос 1) == 1), а (Балл)(Шкала 1)==1) и т.д.?

вот это я поддерживаю!

#6 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 12 Ноябрь 2013 - 11:09

Просмотр сообщенияAnry (12 Ноябрь 2013 - 08:37) писал:

вот это я поддерживаю!

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

#7 Гость_Гость_*

  • Гости

Отправлено 04 Август 2014 - 01:12

Доброе утро, коллеги!
Посмотрел, понравилось. Но есть замечания.
1. Хочется в демонстрационном режиме увидеть работу в группе.
2. Интерфейс радует, Однако кнопки там можно было бы прокомментировать подробнее. Встретив неясность, приходится смотреть инструкции, а это затягивает время. Места ведь там хватает.
3. Проводится ли системой оценивание самого материала теста? Ведь на этот счет существует довольно большая теория и вполне конкретные требования. Или проблемы качества тестовых материалов отдаются на откуп автору?
4. Появились и вопросы по поводу вычисления итоговой оценки. Как бы узнать поподробнее?

С уважением,
Морев Игорь Авенирович
Дальневосточный федеральный университет
morev.ia@dvfu.ru

#8 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 04 Август 2014 - 12:31

Здравствуйте, Игорь Авенирович!

Цитата

1. Хочется в демонстрационном режиме увидеть работу в группе.

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

Цитата

2. Интерфейс радует, Однако кнопки там можно было бы прокомментировать подробнее. Встретив неясность, приходится смотреть инструкции, а это затягивает время. Места ведь там хватает.

- Как именно прокомментировать? В интерфейсе пользователя вроде все достаточно просто. Из кнопок там Завершить, Назад, Далее - вроде все и так понятно. Никаких особых жалоб на сложности интерфейса никогда не поступало, наоборот пользователи хвалят простоту интерфейса (отзывы https://indigotech.ru/reviews). Вот, например, Центр мониторинга в образовании провел опрос-исследование среди 70 преподавателей насчет INDIGO:

Изображение

Вот исходный файл с подписью министра образования Астраханской области:
https://indigotech.ru...php?file=AO.ppt

Цитата

3. Проводится ли системой оценивание самого материала теста? Ведь на этот счет существует довольно большая теория и вполне конкретные требования. Или проблемы качества тестовых материалов отдаются на откуп автору?

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

Цитата

4. Появились и вопросы по поводу вычисления итоговой оценки. Как бы узнать поподробнее?

- Там можно задавать шкалы и для каждой шкалы указывать формулу расчета баллов и деления шкалы (градацию оценок). Подробнее тут: https://indigotech.ru/manual "2.2.2. Вычисление результатов".

#9 Гость_Гость_*

  • Гости

Отправлено 05 Август 2014 - 01:22

Спасибо!

#10 cep 3epo

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 59 сообщений

Отправлено 09 Сентябрь 2021 - 12:27

Станислав Викторович, нужна Ваша помощь.

Тест разбит на 67 групп, в каждой группе по два спаренных вопроса, которые выводятся в виде списка, каждый четный вопрос – это по сути опросник. Нужно произвести действия отдельно над всеми нечетными вопросами (каждый первый вопрос в каждой группы, собственно тесты знаний) и отдельно над всеми четными вопросами (каждый второй вопрос в каждой группы, т.е. опросник).

В частности для подсчета количества вопросов, на которые ответы даны (пользователь имеет возможность пропускать вопросы), мы используем такую формулу:

(abs(Балл(Группа1->Вопрос2))>0?1:0)+
(abs(Балл(Группа2->Вопрос2))>0?1:0)+
(abs(Балл(Группа3->Вопрос2))>0?1:0)+…+
(abs(Балл(Группа67->Вопрос2))>0?1:0)

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

(Балл(Группа1->Вопрос2)>0?Балл(Группа1->Вопрос2):0)+
(Балл(Группа2->Вопрос2)>0?Балл(Группа2->Вопрос2):0)+
(Балл(Группа3->Вопрос2)>0?Балл(Группа3->Вопрос2):0)+…+
(Балл(Группа67->Вопрос2)>0?Балл(Группа67->Вопрос2):0)

Формулы работают даже в более сложной структурной организации (внутри групп есть другие группы с различными названиями), замечаний нет.

В принципе смиряемся и с тем, что в журнале все вопросы считаются в общей куче: и проверка знания, и опросник.

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

Вопрос: как оптимизировать подобные расчеты? В Indigo это можно!

Прикрепленные файлы



#11 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 09 Сентябрь 2021 - 21:16

Просмотр сообщенияcep 3epo (09 Сентябрь 2021 - 12:27) писал:

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

Вопрос: как оптимизировать подобные расчеты? В Indigo это можно!

Здравствуйте! Это слишком сложная задача для обычной тех. поддержки, т.к. связана именно с разработкой и отладкой новых алгоритмов, но хочется Вам помочь и показать всем возможности программы, поэтому решили заморочиться и сделать. В других программах и системах тестирования ничего подобного и близко невозможно сделать в рамках универсальных функциональных возможностей. Прикладываю файл itest с решением задачи:

Изображение

Изображение

Изображение

Изображение

Прикрепленные файлы



#12 cep 3epo

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 59 сообщений

Отправлено 16 Сентябрь 2021 - 14:56

Прошу прощения за задержку с обратной связью. Отчитываюсь для всего сообщества. Предложенные формулы рабочие. Более того. Предупреждение уважаемого Станислава Викторовича о том, что «никаких лишних объектов типа сообщений в тесте быть не должно» несколько насторожили, так как сообщения были все же важны. Но наши наблюдения показывают, что для правильного подсчета сообщения быть могут, но они должны быть спарены. При этом их расположение не важно: оба в начале группы, оба в конце или же одно сообщение в конце предыдущей группы, а второе — в начале следующей. Еще раз: важно, чтобы они располагались по два подряд, не сбивая программу в расчетах. Возможно, Станислав Викторович прокомментирует как профессионал?

Цитата

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

Должен согласиться: мне неизвестны другие тестовые программы, сопоставимые с Indigo по функционалу и возможностям шкал (и не только). По сути нам удалось объединить тест знания и тест-опросник, что позволило проверить как уровень знаний, так и реальный уровень уверенности испытуемых и их завышенные самооценки (считается процент скрытых ошибок). И это что-то невероятное!

Да, с вопросами в формате эссе не все просто. Скажите: формулы работают во всем тесте или их можно модифицировать, привязав только к отдельной группе вопросов, и, таким образом, обойти стороной эссе? Подчеркиваю: это только вопрос (хотя и не совсем праздный), а не предписание к переписыванию формулы.

Спасибо за оказанную помощь.

#13 Administrator

    Менеджер проекта

  • Администраторы
  • 1 407 сообщений

Отправлено 20 Сентябрь 2021 - 20:03

Просмотр сообщенияcep 3epo (16 Сентябрь 2021 - 14:56) писал:

Возможно, Станислав Викторович прокомментирует

- Алгоритм в цикле проходит по всем объектам теста последовательно и проверяет остаток от отделения на 2 позиционного индекса (0, 1, 2, 3...). Если остаток от деления равен 0, то четный вопрос, иначе нечетный.

if(($index+1)%2) - проверка нечетных:
(0+1)%2=1=истина
(1+1)%2=0=ложь
(2+1)%2=1=истина
(3+1)%2=0=ложь
и т.д.

if(!(($index+1)%2)) - проверка четных:
отрицание((0+1)%2)=отрицание(1)=отрицание(истина)=ложь
отрицание((1+1)%2)=отрицание(0)=отрицание(ложь)=истина
отрицание((2+1)%2)=отрицание(1)=отрицание(истина)=ложь
отрицание((3+1)%2)=отрицание(0)=отрицание(ложь)=истина

Поскольку в исходном тесте были только вопросы, то такое решение самое простое. Если же там будет более сложная структура, в том числе с сообщениями, то все усложняется, поскольку на позиционный индекс уже опираться нельзя и нужно заводить отдельный счетчик (проверять тип очередного объекта и если это вопрос, а не сообщение, то счетчик увеличивать на 1, и далее смотреть уже на остаток от деления этого счетчика).

Просмотр сообщенияcep 3epo (16 Сентябрь 2021 - 14:56) писал:

Скажите: формулы работают во всем тесте или их можно модифицировать, привязав только к отдельной группе вопросов, и, таким образом, обойти стороной эссе? Подчеркиваю: это только вопрос (хотя и не совсем праздный), а не предписание к переписыванию формулы.

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

if($index >= 5 && $index <= 10 && ($index+1)%2) - Учитывать объекты только с 6-го по 11-ый объект (в коде прописывается на 1 меньше, т.к. счетчик $index начинается с 0).

Для четных соответственно условие будет иметь следующий вид:
if($index >= 5 && $index <= 10 && !(($index+1)%2))

Это не самое удобное решение, т.к. нужно будет правильно проставлять эти числа, и при изменениях в структуре теста их корректировать, зато это самое простое решение в плане алгоритма.




Ответить



  

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных