Suck until you don’t

Биоинформатик Патрик Шлосс написал чудесный и искренний пост о том, как осваивать новые навыки (в частности, программирование), занимаясь наукой.

Если коротко, его совет заключается в том, что нужно делать плохо, чтобы становиться лучше. Казалось бы, банальность, но в академии эта банальность осложняется тем, что разнообразные навыки идут рука об руку с научными проектами, которыми мы занимаемся, и иногда в погоне за освоением инструмента можно застрять содержательно. По мнению Шлосса, ни в коем случае не нужно останавливать научную работу ради того чтобы отполировать какой-то навык -- это бессмысленно. Проекты нужно оставлять, доведя до того состояния, когда все работает, пусть даже процесс и выглядит не очень элегантно. Тогда при работе над следующей задачей можно учесть ошибки, подводные камни и обратную связь. Мы учимся на итерациях, и научные задачи диктуют эти итерации.

«Мы живем в мире, в котором нормально или считать, что станешь экспертом за 24 часа, или принять, что экспертом ты никогда не станешь, поскольку талант закладывается в нас природой». Забудьте об этом и работайте над своими навыками через ошибки и повторения. «Вы будете делать плохо, но потом вы непременно начнете делать лучше».

http://blog.mothur.org/2016/01/04/Suck-until-you-dont/

Ну, а в качестве продолжения к вдохновительному посту Патрика несколько ссылок на полезные материалы, вышедшие за время зимних каникул:

  1. Учебник «Вычислительная статистика в Python»: http://people.duke.edu/~ccc14/sta-663/
  2. Объяснение логики объектно-ориентированного программирования от Себастиаана Мато: http://www.cogsci.nl/blog/tutorials/244-the-psychology-of-object-oriented-programming
  3. Видео-туториал с советами по Python от него же https://www.youtube.com/watch?v=VBokjWj_cEA
  4. Доступное объяснение предсказательного кодирования от Мики Аллена (взгляд от сторонника этой теории) http://neuroconscience.com/2015/12/24/predictive-coding-and-how-the-dynamical-bayesian-brain-achieves-specialization-and-integration/
  5. Новая версия курса Алекса Холкомба по нейронным сетям с использованием симулятора Simbrain. http://www.psych.usyd.edu.au/staff/alexh/teaching/3014webpages_2015/

Ну и кусочек xkcd напоследок.

Screenshot 2016-01-05 00.47.31

Best practices при создании протоколов экспериментов

На данный момент 90% исследований в когнитивной психологии проводятся при помощи компьютеров, на которых что-то предъявляется и через которые что-то записывается. Способы предъявления, материал и сами данные бывают самые разные, но в целом большая часть экспериментов заключается в том, что испытуемый выполняет данную ему задачу, а мы в это время регистрируем какие-то бихевиоральные или нейро- показатели. При этом гладкость, удобство и эффективность эксперимента часто зависят от того, насколько рационально был составлен протокол его проведения и все ли детали были учтены.

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

В целом, каждый протокол можно оценивать с трех сторон:

  • удобство и понятность для испытуемого
  • удобство и понятность для исследователя (в т.ч. для коллег и студентов)
  • адекватность и готовность к использованию регистрируемых данных

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

Дисклеймер: поскольку условно когнитивные эксперименты по теме и условиям проведения бывают самые разные, мы надеемся на комментарии читателей и будем редактировать и дополнять этот пост

  • Инструкции
    • Инструкция должна быть полной и понятной, она обязательно должна присутствовать в письменном виде до начала эксперимента
    • Полезно напоминать инструкцию (например, какая кнопка что означает) в перерывах
    • Всегда полезно показать испытуемому задачу и дать ему освоиться с ней до начала регистрации данных. Это может быть сделано в формате тренировочной сессии, а в случае относительно несложных задач — в формате отсекания первых 20−30 проб от основной массы анализируемых данных. В последнем случае нужно позаботиться о том, чтобы отсекание этих проб не повлияло на контрбалансировку вашего эксперимента.
  • Стимулы
    • Здесь все целиком зависит от эксперимента, но как правило стимулы лучше генерировать и/или загружать в память презентационного компьютера до начала основного блока эксперимента
    • Если есть возможность создать стимулы внутри программы, а не хранить их отдельно, ей нужно пользоваться (тем самым обеспечивается воспроизводимость и контроль за рандомизацией)
  • Взаимодействие оборудования для предъявления стимулов с оборудованием для регистрации данных
    • До сбора данных нужно учесть все возможные временнЫе задержки и оттестировать синхронизацию оборудования (будь то клавиатура, кнопки, айтрекер, ЭЭГ и т. д.). Нет ничего хуже, чем собрать большой датасет и обнаружить, что его нельзя использовать из-за проблем взаимодействия оборудования.
    • Желательно предусмотреть онлайн-контроль за данными во время проведения эксперимента (например, выведение на экран экспериментатора ответа/времени реакции), и следить за работой оборудования и программы в течение всего эксперимента.
    • Это звучит глупо, но многие об этом забывают. Проследите, чтобы испытуемому было удобно выполнять вашу задачу. Кнопки должны спокойно нажиматься без проблем типа «долгое нажатие = двойное нажатие», фиксационная точка должна быть удобного размера, в течение пробы не должно быть странных смен цветов и морганий экрана, программа не должна закрываться от случайного нажатия на пробел,… Список можно продолжать бесконечно, но всех этих проблем разом можно избежать, если поставить себя на место испытуемого, пройти свой собственный эксперимент, отпилотировать его на коллегах и не полениться исправить все косяки.
  • Общая структура (блоки, пробы)
    • Рандомизация. Рандомизация должна быть умной. Во-первых, очень полезно научиться использовать random seed, чтобы иметь возможность воспроизвести любую псевдослучайно сгенерированную последовательность. Во-вторых, часто бывает необходимо избегать случайного повтора одного типа проб n раз подряд и прочих фокусов неконтролируемой рандомизации. В этом случае полезно сформулировать ограничивающий критерий и повторять рандомизацию до тех пор, пока этот критерий не будет удовлетворен.
    • Очень опасно оставлять испытуемого без регулярных перерывов. В лучшем случае он быстро устанет и начнет плохо выполнять задачу, в худшем — две трети эксперимента будет думать о том, когда же все это закончится, и опять же плохо выполнять задачу. Прерывание каждые 7−10 минут — это разумный ритм, обеспечивающий не только комфорт самого испытуемого, но и качество ваших данных.
    • Другие хитрости для сохранения внимания испытуемого в течение длинного эксперимента — звуковое подтверждение ответа, обратный отсчет блоков, обратная связь в перерывах (осторожно: обратная связь по корректности выполнения задания может вносить собственный вклад в данные).
    • Не секрет, что при выполнении экспериментов внимание испытуемых неравномерно, часто люди ловят себя на том, что вроде выполняют задачу, а вроде и думают о чем-то своем. В целом, вышеописанные хитрости минимизируют эти проблемы, но тем не менее бывает полезно дать возможность испытуемому признаться, что он отвлекся во время пробы, и не регистрировать такие данные, а саму пробу вернуть в пул. Также часто имеет смысл отменять и повторять неправильно выполненные пробы (например, когда прервалась фиксация, было зафиксировано моргание в критический период и т. д.)
  • Регистрация и сохранение данных
    • Имена файлов должны быть уникальны, для этого полезно в имя файла добавить точное время его создания
    • Файлы с результатами должны по возможности сохраняться несколько раз в течение эксперимента (в случае бихевиоральных данных — в конце каждой пробы), чтобы в случае прерывания эксперимента данные не были потеряны
    • Формат сохранения данных зависит от типа данных и ваших планов, но всегда полезно по возможности иметь копию данных в не-проприетарном формате.
    • Согласно Декларации Хельсинки, которая описывает правила проведения экспериментов на людях, данные должы храниться так, чтобы испытуемого нельзя было по ним идентифицировать. Соответственно, названия файлов должны быть зашифрованы, а документы, по которым можно сопоставить испытуемого и его личные данные, должны храниться на другом носителе. Подобные правила существуют и для «сложных» типов данных (пациенты, видео-, онлайн-), и очень важно ознакомиться с ними до проведения эксперимента, чтобы правильно его сконструировать.
    • Описательные данные об испытуемом (возраст, ведущая рука и т. д., но не имя) и метаданные удобно хранить в том же файле, что и сами данные эксперимента, чтобы минимизировать шансы потери или путаницы в информации.
    • Если ваш эксперимент предполагает некий рассказ о том, что все это было (например, когда вы работаете со студентами или добровольцами из числа интересующихся), удобно в конце эксперимента показать человеку любого рода график, описывающий его результаты (пусть даже это и не то, что вы изучаете, а просто % правильных ответов в двух условиях или картинка с какого-то этапа сбора данных). Чтобы испытуемые старались производить хорошие данные, нужно поддерживать их интерес к науке=).

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

Pic: Tanji & Evarts (1976)

Парад ссылок

Три ссылки на свежие учебные материалы, которые могут оказаться полезными для когнитивистов. Enjoy!

  • В издательстве O’Reilly Media вышел онлайн-сборник Python for Scientists, в который вошли главы из нескольких книг по программированию и анализу данных (Python for Data Analysis, Bioinformatics Data Skills, Effective Computation in Physics и Python Data Science Handbook). Сборник находится в открытом доступе по ссылке: www.oreilly.com/programming/free/python-for-scientists.csp
  • Исследователи из Radboud University опубликовали уроки по бихевиоральному моделированию, а именно по обучению с подкреплением и байесовскому обучению (MATLAB)
    • http://hannekedenouden.ruhosting.nl/RLtutorial/Instructions.html
  • Опубликованы демонстрации по байесовскому анализу данных в Python и Matlab (дополнение к книге Bayesian Data Analysis, 3rd ed by Gelman et al.)
    • https://github.com/avehtari/BDA_py_demo
    • https://github.com/avehtari/BDA_m_demos

Курс по Python для сбора и анализа данных в ВШЭ

Высшая Школа Экономики в Москве сделала общедоступный факультатив по программированию на Python для сбора и анализа данных. Отличительная черта — заточенность именно под аналитику, а не просто обучение Питону.

Информация от автора:
«Мы начнём с самых азов программирования и, не углубляясь слишком сильно в теорию, дойдём до практических задач типа «обработать тысячу веб-страниц, извлечь из них нужные данные, собрать их в аккуратную табличку, прогнать по ним регрессию, нарисовать пять графиков и две диаграммы, после чего отправить результат начальнику по e-mail». Курс будет длиться три модуля (то есть полтора семестра), причём первый модуль ориентирован на тех, кто никогда не имел дела с программированием вообще, а в последнем много нового откроют для себя даже опытные питонисты.

В общем, если вы всегда мечтали о том, чтобы компьютер понимал вас с полуслова, избавил от рутины и дал больше возможностей и свободы, сейчас самое время изучить подходящий для этого язык. И это Python" (https://www.facebook.com/photo.php?fbid=10 204 862 744 548 048).

Запись тут: http://lms.hse.ru/?pl

Python for Neuroscience

Картинка отсюда http://pensees.pascallisch.net/?p=1638

Книги по Data Science

Ресурс для #горячихюныхкогнитивных, намеревающихся серьезно заняться самообразованием в области data science -- список хороших бесплатно распространяемых книг для разного уровня подготовки.

Список составлен и обновляется Уильямом Ченом -- исследователем из команды Quora. Бесплатный или условно-бесплатный (donation с минимумом в 0) доступ к книгам открывается по клику на обложку со страницы блога Уильяма: www.wzchen.com/data-science-books

Мини-парад ссылок

Сегодня у нас в программе небольшая подборка ссылок на полезный в науке и преподавании софт.

1) OpenSesame
http://osdoc.cogsci.nl/
Простая удобная программа для создания экспериментов с интуитивным интерфейсом. Открытый досттуп, поддержка большого количества внешней аппаратуры (ээг, кнопки, айтрекеры). Все, для чего нет готовой функции, можно дописать в Python. Студенты без специальной подготовки осваивают быстро и без особенных проблем.

2) GPower
www.gpower.hhu.de/en.html
Простой удобный калькулятор для анализа статистической мощности. Хорош кнопочным интерфейом и подробной инструкцией, идеален в случае расчетов для простых тестов (one-way ANOVA, корреляции и т. д.).

3) Ecли вас заинтересовала недавняя дискуссия о доверительных интервалах, вам могут быть интересны следующие симуляции:

ESCI
www.latrobe.edu.au/psy/research/cognitive-and-developmental-psychology/esci/2001-to-2010
Cвободно распространяемый макрос-симулятор для Excel, созданный Джоффом Каммингзом (автором учебника «Understanding the New Statistics»). Рассчитывает и графически демонстрирует размеры эффекта, доверительные интвервалы, статистическую мощность, и даже визуализирует знаменитый «танец p-значений» (https://www.youtube.com/watch?v=ez4DgdurRPg, обязательно загляните на 6'25''и далее;))

Очень красивые и ясные браузерные визуализации:
http://rpsychologist.com/d3/CI/
rpsychologist.com/d3/NHST/
rpsychologist.com/d3/correlation/
Если вам недавно попадались полезные в работе материалы или программы, мы будем рады о них узнать! Как известно научным работникам, автоматизация труда освобождает ценные часы и минуты для другого труда=)

Сертификат на бесплатное участие в курсе обучения Python для психологов

Дорогие #горячиеюныекогнитивные! Лето — лучшее время, чтобы чтобы посвятить время себе и попробовать что-то новое. Чтобы помочь вам в этом, мы решили сделать небольшой конкурс.

Очень скоро, 4−6 июля, в Питере пройдет курс-интенсив по PsychoPy и Python (http://vk.com/psychopy), который ведет один из нас (Андрей Четвериков).

В настоящий момент группа практически набрана, однако если вы студент факультета психологии СПбГУ и очень хотите попасть на этот курс, то у нас для вас отличные новости — мы разыгрываем сертификат на бесплатное участие в курсе! Для участия в конкурсе вам нужно сделать всего две несложные вещи:

1) Пройти все задания в разделе Python на сайте http://rosalind.info/problems/list-view/?location=python-village

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

Победитель будет выбран случайным образом из тех, кто пришлет все необходимое до 29 июня включительно.

python

Инструментарий аналитика: софт

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

В России, на заре времен, использовались либо локальные программные решения, типа ДА-системы (как правило, социологами для анализа данных опросов), либо Statistica. Последняя — проприетарный продукт компании StatSoft, содержит достаточно большое число модулей по самым разным видам анализов, но больше ориентированный, все же, на индустриально-промышленные задачи. Примерно в то же время у социологов была популярна программа Stata — в ней основная работа ведется через командную строку, а основной набор методов ориентирован на регрессии и работу с номинальными и порядковыми данными. Я, когда работал со Stata, достаточно долго привыкал к ее несколько негибкому языку и некоторым сложностям с манипулированием данными. Некоторые эстеты работали также с Matematica, Weka, в особых случаях — SAS.

Через некоторое время, в начале '00 годов, практика сместилась в сторону SPSS. В немалой части причиной этого стали учебники А.Д.Наследова. На первых порах SPSS пугает определенной лаконичностью интерфейса (а до 15 версии еще и отсутствием русскоязычной локализации), но через некоторое время это проходит. В настоящее время SPSS является наиболее распространенной программой анализа данных, с которой работают психологи. К сожалению, несмотря на регулярно выходящие новые версии (следует отметить, что наиболее стабильными традиционно являются нечетные версии), набор методов анализа в SPSS весьма традиционен, и включает в себя описательные статистики, регрессии, многомерные и непараметрические методы. Относительно неплохо реализована возможность работать множественными вариантами ответов на вопросы. Изыски вроде анализа временных рядов, ROC-кривых или нейронных сетей появились относительно недавно, и психологами, как правило, не используются. К сожалению, SPSS в базовой комплектации SPSS Statistics не дает возможности полноценно работать с текстовыми данными, оценками размера эффекта, IRT-моделями, структурным моделированием, байесовскими методами и некоторыми прочими. Для некоторых из них нужны дополнительные модули, или же они вообще не реализованы. Дополнительным плюсом является достаточно комфортная возможность работать с скриптами.

В общем и целом SPSS (или PSPP, ее бесплатный аналог для linux) является базовым инструментом для тех, кто работает с данными лишь несколько раз в год и, в целом, не особо искушен в области анализа количественных данных. Однако нередко возникают ситуации, особенно при работе с экспериментальными данными, когда необходимо иметь лучшее понимание того, что происходит с данными или просто использовать методы, не включенные в стандартный набор SPSS. Например, когда необходимо аппроксимировать теоретическую функцию распределения эмпирических данных, провести симуляционный эксперримент, использовать непараметрический факторный анализ, проанализировать данные ЭЭГ или же просто построить и оценить SEM-модель при процедуре валидизации опросника. В подобных ситуациях естественным и закономерным будет переход к другим инструментам.

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

R, по сравнению с Python и MATLAB выглядит бедным родственником, несмотря на Shiny, так как полностью ориентирован на работу с данными. В настоящее время для R написано несколько тысяч пакетов с разнообразными методами манипуляций и анализа данных, на любой, даже самый притязательный вкус. В качестве дополнительных бонусов, помимо собственно повышения навыков программирования и алгоритмичного мышления, использование R повышает грамотность аналитика в области практики применения различных методов анализа данных. Второй бонус — R, как и Python, обладает возможностью доступа к различным источникам данных, типа facebook или twitter, не говоря уже о просто SQL-базах, что существенно расширяет не только область применения R, но и возможный инструментарий и области для психологических исследований.

Таким образом, если подходить профессионально и дотошно к анализу эмпирических данных, то, на мой взгляд, естественным выбором аналитика будет что-нибудь из списка Python/R/MATLAB. В крайнем случае SPSS, а для редких ценителей — со скриптами и включением кусков кода на R.

Александра Чистопольская: «можно отметить легкость освоения программы»

Мы продолжаем публиковать рассказы студентов и аспирантов о своих первых самостоятельно сделанных на компьютере экспериментах. Сегодня — рассказ Саши Чистопольской, аспиранта факультета психологии ЯрГУ, о том, как она делала свой первый эксперимент на PsychoPy:

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

Для написания скрипта достаточным оказалось наличие конструктора (+ ориентация на аналогичный скрипт), заложенного в основе PsychoPy, а конкретные команды находились в Интернете на пользовательском форуме. В общем, можно отметить легкость освоения этой программы и гибкость системы, позволяющую решать множество исследовательских задач".

Наталья Андриянова: «Можно делать эксперименты, не имея навыков программирования»

#thinkcognitive продолжает публиковать истории. Сегодня — Наталья Андриянова о первых экспериментах и друзьях-программистах:

«Я провожу эксперименты в программе PsychoPy и очень рада, что такая программа есть у нас в доступе. Ей довольно легко пользоваться и можно делать некоторые эксперименты, даже не имея навыков программирования, хотя, конечно, умея программировать, там можно сделать гораздо больше. Научиться пользоваться программой мне помогло обучающее видео (https://www.youtube.com/watch?v=VV6qhuQgsiI), а так же мой коллега Иван Иванчей который объяснил мне ее возможности на примере моего эксперимента. Сейчас я сделала уже несколько экспериментов в PsychoPy. Конечно, отсутствие навыков программирования ограничивает для меня сферу ее использования, поэтому я считаю, что данный навык является важным для психологов. Можно, конечно, пойти другим путем и иметь друзей программистов, которые помогут вам делать эксперименты, но тогда вы начинаете зависеть от них, ведь вам придется постоянно обращаться к ним, если нужно что-то исправить или дополнить. А умение самостоятельно делать эксперименты делает вас свободными, дает большее понимание и уверенность в себе.»