HW4 // Предобработка данных

Пакет с пакетами

Для выполнения заданий этой домашки используйте tidyverse.

Основные задания

Описание данных

Сегодня мы работаем с данными одного экспериментального исследования.

Эксперимент был направлен на изучение гибридного зрительного поиска. Испытуемому было необходимо искать объекты из определенной категории. В качестве независимых переменных варьировались так называемые visual setsize и memory setsize, то есть количество стимулов, предъявляемых на экране монитора, и количество категорий, которые нужно было запомнить. Кроме того, использовались категории двух уровней — базовые (яблоки, кружки) и суперординатные (фрукты, посуда).

Данные располагаются в двух файлах. В файле base.xlsx содержаться данные из группы испутыемых, которым предлагались базовые категории, в файле super.xlsx — данные из группы испутыемых, которым предлагались суперординатные категории.

На листе cor_answ в каждом файле есть данные по точности для каждого сочетания условий. Сочетания условий кодируются следующим образом: например, 1_stim_8 обозначает, что memory setsize был равен 1, а visual setsize был равен 8. То есть первое число задаёт memory setsize, второе — visual setsize. На этом же листе с правого края есть соцдем респондентов — пол и возраст. На листе Time располагаются аналогичным образом организованные данные по времени реакции (от момента начала предъявления стимулов до нажатия на клавишу).

Хотя данные, с которыми мы работаем, были частично предобработаны коллегой — это не сырые аутпуты PsychoPy — нам все равно придется с ними поработать, чтобы привести их к удобному для работы виду.

#1

Скачайте архив с данными. Разархивируйте файлы в проект курса. Импортируйте данные в R. У вас должно получиться 4 датасета с данными с 4-х листов Excel-файлов. Назовите их base_time, base_acc, super_time и suoer_acc для времени реакции и точности и условиях с базовыми и суперординатными категориями соответственно.

Возникли ли какие-то странности?

В качестве ответа введите число строк, которые необходимо пропустить при импорте данных, чтобы они прочитались корректно.

Подсказки
Как делать задание?
  • Необходимо скачать архив с данными и разархивировать его в проект курса.
  • Далее нужно загрузить четыре датасета в четыре разных объекта, прочитав данные из Excel-файлов.
  • После загрузки проверьте, корректно ли загрузились данные. При необходимости воспользуйтесь документацией в функций чтения данных.
Что надо сделать?
  • Скачайте архив с данными и разархивируйте его в проект курса.
  • Загрузите датасеты из Excel-файлов с помощью функции read_xlsx() из пакета readxl.
  • Обратите внимание, как прочитались заголовки колонок. Откройте справку по функции read_xlsx()?read_xlsx — и ознакомьтесь в работой аргeмента skip.
  • Скорректируйте код загрузки данных.

#2

Проверьте, совпадает ли количество строк в получившихся датасетах.

Для самопроверки введите число строк, если оно совпадает во всех датасетах, и нет, если оно отличается хотя бы в одном.

#3

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

В качестве ответа введите число пропущенных значений в получившемся датасете. Если их нет, введите 0.

Подсказки
Как делать задание?
  • Определите, в каких датасетах и колонках содержится соцдем в представленных данных.
  • Отберите необходимые колонки из данных.
  • Если соцдем находится в нескольких датасетах, объедините все имеющиеся части в один объект.
Что надо сделать?
  • Посмотрите в описании, как организованы данные и в какую их часть записан соцдем.
  • Извлеките необходимые колонки с помощью select().
  • При необходимости объедините части соцдема в один объект с помощью bind_rows().

#4

Удалите пропущенные значения из данных соцдема, если они есть, и задайте имена колонок — sex и age соответственно.

Для самопроверки введите общее количество испытуемых в выборке эксперимента.

#5

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

Подсказки
Как делать задание?
  • Изучите структуру датасетов с экспериментальными данными. Найдите в ней общие паттерны.
  • В данном случае из-за сходной структуры данных уместно написать короткую функцию, которая будет отбирать из датасетов только те строки и столбцы, в которых содержатся экспериментальные данные.
  • Примените функцию на имеющихся датасетах и перезапишите имеющиеся объекты, сохранив в них только экспериментальные данные.
Что надо сделать?
  • Изучите структуру датасетов с экспериментальными данными и определите номера колонок и строк, которые нобходимо отобрать.
  • Напишите функцию, которая будет принимать на вход датасет и отбирать из него необходимые колонки и строки — подойдут select() и slice().
  • Примените функцию на имеющихся датасетах и перезапишите имеющиеся объекты, сохранив в них только экспериментальные данные.

#6

Создайте в датасетах эксперимента новую переменную group, содержащую информацию об уровне категории — базовая (base) или суперординатная (super).

Описание формата инпута.

#7

Соедините датасеты с данными о точности и времени реакции друг с другом — base_acc с super_acc и base_time с super_time. Назовите новые датасеты acc и time соответственно.

Описание формата инпута.

Подсказка

Исходя из структуры имеющихся данных, выберите подходящий способ объединения датасетов и необходимую для этого функцию. В обоих случаях датасеты объдиняются одинаково.

#8

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

В датасете должны содержаться следующие колонки:

  • id — идентификатор испытуемого
  • visual_setsize — количество стимулов в пробе
  • memory_setsize — количество категорий для запоминания
  • reaction_time/accuracy — время реакции / точность (в зависимости от датасета)

При необходимости переименуйте столбцы.

Описание формата инпута.

Подсказки
  • Для корректного приведения к длинному формату, определите колонки, которые не должны участвовать в преобразовании.
  • Разделяя колонку с сочетанием экспериментальных условий, задайте разделитель, наиболее подходящий для значений, которые в ней содержатся.

#9

Объедините все данные в один датасет, который будет содержать следующие колонки:

  • id — идентификатор испытуемого
  • group — уровень категории
  • visual_setsize — количество стимулов в пробе
  • memory_setsize — количество категорий для запоминания
  • reaction_time — время реакции
  • accuracy — точность

Сохраните результат в переменную hybrid.

Описание формата инпута.

Подсказка

Исходя из структуры имеющихся данных, выберите подходящий способ объединения датасетов и необходимую для этого функцию.

#10

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

Для самопроверки в поле ниже введите среднее время реакции в группе base при visual_setsize 12 и memory_sesize 4, округленное до третьего знака после запятой.

Дополнительные задания

#1

В нашем случае названия файлов данных, которые у нас есть, содержат названия экспериментальных условий (base.xlsx и super.xlsx). Нам повезло, что эти название короткие, простые и их всего два — мы можем задать их вручную. Однако так случается не всегда, и хорошо автоматизировать этот процесс, чтобы не допустить лишних опечаток.

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

Описание формата инпута.

Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный

#2

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

Напишите функцию, которая будет:

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

Тело функции соберите из кода, который вы написали в ходе выполнения задания основной части.

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

Описание формата инпута.

Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
Генерируем координаты

Следующие три задания посвящены написанию кода для генерации координатной сетки для стимулов в зрительном поиске.

Общий вид координатной сетки выглядит так:

Общая схема координатной сетки. Разрешение экрана — 1920×1080 пикселей. Координаты центра экрана — [0, 0]. Отступ от края экрана 100 пикселей с каждой стороны.

В данном случае мы будем генерировать сетку для 21 стимула — в 3 ряда по 7 в каждом. На пересечении черных линий располагаются центры стимулов.

Общая схема координатной сетки с расположением центров стимулов.

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

Общая схема координатной сетки с расположением центром стимулов. Синим обозначены области, в которых стимулы могут свободно колебаться. Красным обозначен зазор, препятствующий столкновению стимулов.
Исходные параметры для генерации координатной сетки
  • Разрешение (размер) экрана (res_x×res_y): 1920×1080
  • Зазор между областями колебания стимулов (gap): 10
  • Количество стимулов по ширине экрана (n_x): 7
  • Количество стимулов по высоте экрана (n_y): 3
  • Горизонтальный отступ от края экрана (margin_x): 100
  • Вертикальный отступ от края экрана (margin_y): 100
  • Горизонтальный размер стимула (stim_size_x): 100
  • Вертикальный размер стимула (stim_size_y): 100
  • Количество проб, для которых надо сгенерировать координаты (n_trials): 30

Все значения указаны в пикселях, кроме количества проб.

#3

Рассчитайте координаты центров стимулов.

Необходимо получить два вектора — centers_x и centers_y — которые будут содержать координаты центров стимулов по x и по y соответственно. Количество значений в векторах должно совпадать с количетвом стимулов по ширине и высоте экрана соответственно.

Исходными параметрами, необходимым для расчета координат центра являются res_x, res_y, margin_x, margin_y, n_x, n_y.

Для самопроверки в поле ниже введите через запятую значения координат центров по x, затем точку с запятой, а далее — значения координат центров по y. Проверка игнорирует все пробелы.

Подсказки
Как делать задание?
  • Используя данные о разрешении экрана, рассчитайте расстояния между центрами стимулов по x и y с учетом отступов от краёв экрана.
  • Создайте две последовательности от самого левого (нижнего) положения стимула до самого правого (верхнего) положения стимула с шагом, равным расстоянию между центрами стимулов.
  • Скорректируйте координаты с учетом позиции начала координат в центре экрана.
Что надо сделать?
  • Рассчитайте расстояния между центрами стимулов.
    • Вычтите из разрешения экрана отступы, чтобы получить размеры поля, где могут располагаться стимулы.
    • Разделите соответствующие размеры на количество необходимых расстояний.
    • Расстояний между стимулами на одно больше, чем самих стимулов (см. рисунки выше).
  • Сгенерируйте последовательности соответствующих координат центров стимулов:
    • Для x от самого левого до самого правого положения стимула с шагом, равным расстоянию между центрами по x.
    • Для y от самого нижнего до самого верхнего положения стимула с шагом, равным расстоянию между центрами по y.
  • Скорректируйте координаты с учетом позиции начала координат в центре экрана: из полученных координат вычтите половину разрешения экрана по горизонтали и вертикали соответственно.
Ответ неверный
  • Проверьте, правильно ли заданы входные параметры для расчета координат.
  • Проверьте, разделили ли вы значения в векторах запятыми.
  • Проверьте, отделили ли вы вектора друг от друга точкой с запятой.

#4

Рассчитайте, на сколько максимально стимул может отклоняться по вертикали и горизонтали от координат центра, чтобы не сталкиваться с другими стимулами (jitter_x и jitter_y). Так как отклонения будут симметричны, учтите только одну сторону отклонения по одной оси — влево и вниз или вправо и вверх.

Исходными параметрами, необходимым для расчета максимального отклонения являются gap, stim_size_x, stim_size_y, а также расстояние между центрами стимулов.

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

Для самопроверки введите через запятую значения jitter_x и jitter_y. Проверка игнорирует все пробелы.

#5

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

  • Количество проб задано параметров n_trials.
  • Итоговый датасет должен содержать колонку trial, которая будет задавать номер пробы, и колонки pos1posN, где N — общее количество стимулов на экране. Таким образом, в каждой колонке должны быть заданы координаты для отдельного стимула на экране. Количество стимулов на экране определяется параметрами n_x и n_y.
  • Координаты в колонках pos1posN должны быть представлены в формате [x,y]. Между символами не должно быть пробелов.
  • Для каждого стимула в каждой пробе должны быть сгенерированы уникальные координаты с учетом возможного колебания стимула вокруг координат его центра. Диапазон колебаний по обеим осям задается значениями jitter_x и jitter_y.

Ниже представлен вариант итогового датасета.

trial pos1 pos2 pos3 pos4 pos5 pos6 pos7 pos8 pos9 pos10 pos11 pos12 pos13 pos14 pos15 pos16 pos17 pos18 pos19 pos20 pos21
1 [-667,-268] [-404,-219] [-217,-203] [-39,-224] [229,-179] [419,-209] [642,-236] [-655,-54] [-382,9] [-254,17] [-28,-49] [252,21] [468,-27] [661,-36] [-607,242] [-426,244] [-176,171] [-44,264] [255,209] [476,240] [664,189]
2 [-672,-185] [-476,-263] [-226,-192] [-44,-266] [245,-182] [413,-235] [670,-264] [-617,-48] [-440,15] [-165,-41] [23,27] [177,-7] [409,51] [599,-17] [-689,251] [-442,199] [-194,170] [-30,235] [189,168] [437,238] [645,245]
3 [-691,-228] [-430,-268] [-241,-223] [43,-209] [200,-168] [466,-223] [626,-166] [-605,45] [-414,-42] [-196,-28] [23,-50] [225,-47] [390,-23] [674,-10] [-601,228] [-392,183] [-243,265] [-15,262] [183,165] [456,256] [633,216]
4 [-651,-182] [-393,-208] [-208,-186] [42,-201] [178,-271] [471,-176] [598,-257] [-626,-21] [-397,-23] [-182,47] [-14,13] [193,5] [458,-33] [642,-15] [-664,253] [-479,227] [-255,213] [16,249] [187,233] [429,228] [614,240]
5 [-609,-274] [-451,-258] [-243,-272] [34,-170] [197,-165] [417,-189] [622,-204] [-686,9] [-452,19] [-238,45] [11,-45] [261,23] [391,23] [685,1] [-602,220] [-412,270] [-201,179] [-30,243] [241,216] [462,272] [629,269]
6 [-690,-215] [-432,-187] [-194,-240] [-3,-273] [260,-269] [451,-208] [678,-172] [-622,-3] [-399,45] [-222,-32] [-36,46] [224,12] [423,11] [646,-45] [-663,238] [-379,257] [-174,251] [26,169] [186,252] [464,196] [599,253]
7 [-605,-265] [-404,-202] [-245,-197] [-27,-216] [264,-245] [409,-202] [599,-231] [-671,3] [-441,-32] [-263,-21] [17,-46] [178,8] [401,16] [624,-12] [-677,206] [-428,196] [-193,203] [-17,171] [245,202] [466,181] [631,248]
8 [-644,-243] [-393,-175] [-259,-202] [18,-167] [260,-202] [425,-274] [669,-197] [-615,31] [-427,55] [-229,48] [15,43] [163,10] [417,14] [622,54] [-604,223] [-394,211] [-252,173] [35,187] [216,189] [452,179] [640,250]
9 [-678,-204] [-379,-183] [-201,-171] [40,-255] [198,-228] [429,-203] [614,-178] [-649,49] [-441,-13] [-209,0] [31,19] [173,-52] [432,15] [600,0] [-652,214] [-398,175] [-202,261] [24,239] [208,224] [447,266] [664,249]
10 [-654,-202] [-451,-209] [-232,-177] [-8,-178] [176,-218] [393,-236] [679,-184] [-665,-43] [-443,-48] [-228,-54] [-43,-50] [251,31] [449,-39] [674,-24] [-689,242] [-476,235] [-261,241] [5,236] [223,266] [451,239] [616,270]
11 [-635,-259] [-429,-205] [-245,-221] [-27,-168] [195,-257] [434,-172] [621,-261] [-688,-10] [-430,-42] [-214,34] [24,-29] [173,25] [402,-23] [644,-6] [-672,182] [-476,184] [-243,255] [34,206] [252,238] [409,217] [676,227]
12 [-674,-203] [-426,-245] [-195,-193] [52,-221] [263,-258] [400,-168] [606,-232] [-692,36] [-392,-35] [-267,-27] [37,-20] [220,28] [458,-33] [621,-14] [-672,233] [-456,230] [-183,246] [-46,240] [222,226] [403,228] [633,241]
13 [-614,-169] [-477,-225] [-174,-174] [-22,-258] [255,-266] [394,-203] [656,-177] [-661,37] [-426,30] [-248,27] [-18,16] [251,53] [410,41] [658,-54] [-694,207] [-409,169] [-171,249] [-48,259] [187,264] [385,191] [647,187]
14 [-609,-273] [-398,-261] [-223,-170] [-35,-173] [204,-218] [408,-269] [598,-242] [-627,-25] [-422,26] [-163,-38] [-5,43] [179,48] [422,-10] [684,-47] [-635,243] [-430,181] [-164,171] [0,258] [225,172] [448,229] [676,173]
15 [-616,-177] [-390,-251] [-251,-274] [44,-265] [164,-208] [426,-236] [594,-256] [-685,-45] [-459,-38] [-219,-2] [14,-42] [244,11] [379,36] [629,11] [-635,274] [-407,256] [-255,257] [-11,203] [223,187] [447,243] [630,251]
16 [-634,-188] [-403,-236] [-169,-243] [-17,-239] [253,-216] [468,-247] [627,-206] [-611,-31] [-416,-14] [-173,-30] [-5,32] [228,-12] [400,40] [659,-48] [-689,180] [-422,203] [-229,260] [41,267] [193,229] [471,258] [665,222]
17 [-662,-187] [-385,-220] [-246,-233] [-9,-209] [203,-220] [469,-254] [685,-259] [-655,28] [-444,43] [-231,-42] [-20,45] [245,8] [389,-32] [690,38] [-677,172] [-402,184] [-192,238] [41,250] [197,214] [407,181] [681,173]
18 [-648,-241] [-436,-175] [-201,-191] [29,-213] [258,-219] [458,-260] [694,-224] [-656,34] [-443,43] [-226,-21] [43,-2] [188,-30] [390,-43] [612,-20] [-596,211] [-463,189] [-175,192] [31,193] [256,241] [418,208] [600,218]
19 [-659,-191] [-409,-251] [-187,-247] [10,-256] [244,-183] [481,-263] [603,-199] [-696,-21] [-464,-1] [-191,-51] [-40,0] [193,21] [407,31] [614,36] [-604,208] [-409,236] [-252,202] [16,188] [198,244] [427,239] [625,251]
20 [-618,-182] [-455,-180] [-219,-185] [-41,-168] [215,-228] [405,-261] [658,-211] [-648,-2] [-407,52] [-221,-46] [-2,30] [168,-14] [457,44] [607,-15] [-679,189] [-424,258] [-265,216] [44,201] [195,191] [425,237] [667,247]
21 [-598,-241] [-438,-242] [-258,-213] [-11,-189] [186,-200] [469,-197] [695,-227] [-680,-21] [-402,-27] [-184,15] [6,37] [171,-11] [430,54] [603,-22] [-690,237] [-478,211] [-239,165] [-3,174] [232,205] [451,205] [618,203]
22 [-625,-168] [-472,-189] [-262,-270] [43,-244] [238,-173] [460,-215] [683,-196] [-642,34] [-387,-40] [-241,-54] [41,-22] [230,22] [465,-26] [620,-28] [-631,249] [-443,251] [-262,222] [-17,194] [217,253] [471,203] [640,234]
23 [-688,-208] [-458,-209] [-230,-230] [47,-217] [267,-166] [402,-228] [596,-266] [-619,-28] [-431,20] [-246,11] [-29,-55] [201,-12] [424,-7] [652,-23] [-635,200] [-446,177] [-222,243] [1,241] [209,210] [456,258] [608,182]
24 [-679,-168] [-411,-226] [-237,-173] [-16,-250] [265,-240] [425,-240] [652,-220] [-636,1] [-403,-53] [-259,33] [-42,-45] [205,-5] [407,-26] [653,-40] [-624,275] [-428,175] [-207,266] [-19,260] [219,259] [415,265] [676,230]
25 [-635,-254] [-437,-259] [-190,-271] [17,-197] [180,-180] [379,-214] [664,-241] [-623,35] [-462,-34] [-211,7] [18,33] [249,-41] [449,-21] [651,-26] [-624,198] [-446,233] [-187,233] [2,235] [168,166] [417,244] [598,268]
26 [-670,-253] [-451,-189] [-219,-188] [46,-255] [254,-194] [461,-257] [657,-267] [-629,27] [-408,6] [-221,54] [-33,27] [164,13] [439,-11] [655,24] [-636,267] [-473,268] [-209,196] [-4,212] [169,179] [438,190] [630,184]
27 [-662,-241] [-460,-221] [-234,-245] [35,-252] [166,-259] [431,-205] [621,-219] [-640,21] [-396,-21] [-193,2] [44,-2] [218,-43] [428,22] [642,12] [-650,189] [-480,193] [-235,217] [41,180] [196,205] [443,173] [656,201]
28 [-658,-222] [-425,-190] [-248,-166] [25,-168] [187,-190] [448,-252] [632,-262] [-637,-26] [-384,53] [-173,6] [-31,55] [242,-16] [463,53] [685,39] [-642,203] [-450,265] [-204,236] [0,275] [193,178] [423,212] [664,229]
29 [-674,-253] [-423,-250] [-238,-230] [-30,-253] [263,-181] [473,-213] [609,-255] [-608,25] [-424,-17] [-211,15] [-10,-11] [185,-9] [467,20] [692,40] [-653,210] [-475,247] [-189,224] [-17,247] [229,253] [416,181] [625,173]
30 [-660,-167] [-393,-166] [-240,-253] [37,-245] [243,-238] [464,-243] [645,-196] [-596,4] [-473,16] [-166,-51] [-12,7] [170,18] [378,-15] [672,36] [-632,201] [-379,210] [-190,247] [-41,261] [252,180] [449,170] [633,216]

Описание формата инпута.

Подсказки

Полезные функции:

  • outer()
  • as.vector()
  • rep()
  • separate(), unite()
  • sample()
  • mutate()
  • paste(), str_c()
  • pivot_wider()