HW1 // Введение в R. Типы данных. Векторы

Напоминалка о контроле случайности

Все задания построены на работе со сгенерированным вектором чисел. Генерация каждый раз происходит (псевдо)случайным образом. Если вы хотите пользоваться возможностью самопроверки, перед каждой строчкой кода, где происходит генерация — используются функции rnorm(), sample() — добавьте строку с установкой зерна датчика случайных чисел

set.seed(420)

и выполняйте код генерации вместе с данной строкой.

Автопроверка настроена на результаты, получающиеся при таких генерациях. Во всех других случаях ваши результаты будут отличаться.

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

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

#1

Сгенерируйте распределение некоторой изучаемой переменной в генеральной совокупности из 350 000 объектов с помощью функции rnorm() с параметрами mean = 80 и sd = 21. Сохраните результат генерации в переменную pop.

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

Подсказки
Как делать задание?
  • Используя функцию rnorm() нужно сгенерировать вектор. Для этого ей нужно передать три аргумента: количество значений, которые нужно сгененировать, среднее (mean) и стандартное отклонение (sd).
  • Обратите внимание на порядок аргументов: следовать они должны именно так, как перечислены в предыдущем пункте.
  • Сохраните результат генерации в переменной pop с помощью оператора присваивания <-.
Ответ неверный
  • Проверьте, выполнили ли вы строчку строчку с установкой зерна датчика случайных чисел перед генерацией вектора.
  • Проверьте, разделили ли вы значения запятой.
  • Округлять значения не нужно.

#2

Сгенерируйте случайную выборку из генеральной совокупности (pop) объемом 150 значений. Считайте, что все объекты генеральной совокупности равновероятно попадают в выборку. Сохраните результаты генерации в переменную first_banch.

Для самопроверки в поле ниже введите сумму по получившемуся вектору.

Подсказки
Как делать задание?
  • Используя функцию sample() нужно сгенерировать вектор. Для этого её нужно передать два обязательных аргумента: вектор, из которого она будет выбирать числа, и количество значений, которые нужно сгенерировать.
  • Обратите внимание на порядок аргументов: следовать они должны именно так, как перечислены в предыдущем пункте.
  • Сохраните результат генерации в переменной first_bach с помощью оператора присваивания <-.
Ответ неверный
  • Проверьте, выполнили ли вы строчку строчку с установкой зерна датчика случайных чисел перед генерацией вектора.
  • Округлять значения не нужно.

#3

Удалите из полученный выборки 5 наибольших и 5 наименьших значений — посчитаем их нехарактерными значениями (выбросами). Перезапишите вектор first_banch.

Для самопроверки в поле ниже введите сумму по получившемуся после удаления значений вектору.

Подсказки
Как осмыслить задание?
  • Нужно удалить 5 наибольших и 5 наименьших значений. Что нужно сделать с вектором, чтобы было проще его индексировать по индексам для решения задачи?
  • Как должен выглядет вектор индексов?
    • Можете создать вспомогательный вектор indices и использовать его для индексации вектора выборки.
  • Как обозначить при индексации удаление выбраных элементов?
Полезная функция

sort()

Удаляются почти все значения ((

Оператор : имеет более высокий приоритет по сравнению с арифметическими операторами. Соответственно, сначала выпоняется он, а затем арифметические операции.

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

#4

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

second_banch <- read.csv("https://raw.githubusercontent.com/angelgardt/wlm2023/master/data/hw1-second_banch.csv")$x

Объедините векторы first_banch и second_banch в один для дальнейшей работы. Назовите получившийся вектор obs.

Для самопроверки в поле ниже введите длину получившегося вектора.

#5

Исследуйте получившийся вектор:

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

Для самопроверки в поле ниже введите через запятую обнаруженный тип данных и количество пропущенных значений. Название типа данных введите без кавычек. Если пропущенных значений нет, укажите 0. Проверка игнорирует все пробелы.

Подсказки
Как проверить тип данных? Можно использовать функции семейста is.*() или функции class() и typeof().
Как посчитать количество пропусков?

Для этого нужно сначала проверить, является ли каждое значение вектора пропуском (NA), а затем посчитать сумму от результатов проверки.

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

#6

Приведите вектор obs в порядок, если необходимо:

  • удалите пропущенные значения
  • скорректируйте тип данных

Перезапишите объект obs.

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

Подсказки
Как делать задание?
  • Предположите, откуда могла возникнуть сложившаяся проблема.
  • Выполните приведение типа данных к нужному.
  • Проверьте, решила ли проблема.
  • Удалите пропущенные значения через индексацию вектора
  • Сохраните полученный результат в переменную obs.
Как удалить пропуски?
  • Проверьте, является ли каждое значение вектора пропуском.
  • Помните, что x == NA ведет себя не так, как мы бы хотели.
  • Используйте вектор, полученный при проверке, для индексации.
  • Обратите внимание, что проверка на пропуск возвращает TRUE, если значение является пропуском. Нам же нужно отобрать те, которые не являются ими.
Ответ неверный
  • Проверьте, что в векторе действительно не осталось пропущенных значений.

#7

На полученном векторе obs рассчитайте:

  • минимум
  • максимум
  • среднее
  • медиану

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

Подсказки
Ответ неверный

Проверьте последовательность вводимых значений.

#8

  1. Отсортируйте значения вектора по возрастанию
  2. Найдите медиану первой (меньшей) половины значений
  3. Найдите медиану второй (большей) половины значений

Так как количество элементов нечетное, считайте, что срединное значение входит в обе половины.

Для самопроверки введите в поле ниже через запятую значения, полученные в пунктах (b) и (c).

Подсказки
Как делать задание?
  • Отсортируйте вектор с помощью функции sort()
  • С помощью индексов отберите первую (меньшую) половину значений
  • Передайте получившийся вектор в качестве аргумента функции median()
  • Аналогично поступите со второй (большей) половиной
Как отобрать половину значений?
  • Можно задать индексы руками, вычислив, какое количество элементов составляет половину вектора.
  • Можно использовать идею, что индекс середины вектора — это округленная половина его длины (round()`)
Ответ неверный
  • Проверьте, правильно ли вы определили индекс срединного элемента
  • Проверьте, что при расчете медиан вы включили срединный элемент в обе половины вектора
  • Проверьте, что вы разделили значения запятой

#9

Выборка нашего исследования включала в себя респондентов из пяти групп. Сгенерируйте группирующий вектор такой же длины, как и наша переменная, случайным образом из значений gr1, gr2, gr3, gr4 и gr5. Сохраните результат генерации в переменную condition.

Подсказки
Как делать задание?
  • С помощью функции sample() сгенерируйте вектор необходимой длины из обозначенных в задании текстовых значений
  • Сохраните его в переменную condition с помощью оператора присваивания <-
Функция падает с ошибкой

Количество допустимых значений (групп) меньше, чем неободимое количество элементов генерируемого вектора. Изучите аргумент replace функции sample().

#10

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

Подсказки
Как проверить сбалансированность групп?
  • Чтобы проверить сбалансированность групп, надо посчитать, сколько вошло наблюдений в каждую группу.
  • Это можно сделать, построив таблицу частот.
Как построить таблицу частот?

С помощью функции table()

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

#1

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

Задайте элементам вектора obs имена, которыми будут элементы вектора condition. Таким образом, мы будем знать, к какой группе относиться каждое наблюдение.

Подсказки
Как делать задание?
  • В векторе condition содержать группы респондентов, а в векторе obs — наблюдения.
  • Каждое наблюдение относится к какой-либо группе.
  • Если мы используем значения вектора condition как имена для вектора obs мы объединим данные из обоих векторов в одной структуре.
  • Необходимо присвоить элементам obs имена из значений вектора condition.
Как задать имена элементам вектора?

И для вывода, и для задания имён используется функция names().

#2

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

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

      min       max      mean    median 
 42.42735 124.26487  79.84587  79.95837 

Подсказки
Как делать задание?

Необходимо объединить четыре «функции» (их результаты) в вектор и при создании вектора задать имена его элементам.

Как задать имена элементам вектора?

Создавая вектор с помощью функции c() мы можем указать имя для каждого элемента:

c(name1 = "x1", name2 = "x2", ...)

#3

Возьмите получившийся вектор obs с наблюдениями и группами и разделите выборку на две равные подвыборки случайным образом. Сохраните результаты в переменные sam1 и sam2.

#4

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

#5

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

\[ x(n) = \frac{n^n}{\sqrt[n]{n}} \]

Для самопроверки введите последний элемент получившегося вектора. Используйте научную нотацию числа (формата 1.23e+04).