set.seed(420)
HW1 // Введение в R. Типы данных. Векторы
Все задания построены на работе со сгенерированным вектором чисел. Генерация каждый раз происходит (псевдо)случайным образом. Если вы хотите пользоваться возможностью самопроверки, перед каждой строчкой кода, где происходит генерация — используются функции rnorm()
, sample()
— добавьте строку с установкой зерна датчика случайных чисел
и выполняйте код генерации вместе с данной строкой.
Автопроверка настроена на результаты, получающиеся при таких генерациях. Во всех других случаях ваши результаты будут отличаться.
Отсутствие строк с установкой зерна датчика случайных чисел при проверке работ тьюторами не будет считаться ошибкой.
Основные задания
#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
.
<- read.csv("https://raw.githubusercontent.com/angelgardt/wlm2023/master/data/hw1-second_banch.csv")$x second_banch
Объедините векторы first_banch
и second_banch
в один для дальнейшей работы. Назовите получившийся вектор obs
.
Для самопроверки в поле ниже введите длину получившегося вектора.
#5
Исследуйте получившийся вектор:
- какой тип его данных?
- если ли в нем пропущенные значения?
- если есть, сколько их?
Для самопроверки в поле ниже введите через запятую обнаруженный тип данных и количество пропущенных значений. Название типа данных введите без кавычек. Если пропущенных значений нет, укажите 0. Проверка игнорирует все пробелы.
Подсказки
Как проверить тип данных?
Можно использовать функции семейстаis.*()
или функции class()
и typeof()
.
Как посчитать количество пропусков?
Для этого нужно сначала проверить, является ли каждое значение вектора пропуском (NA
), а затем посчитать сумму от результатов проверки.
Ответ неверный
- Проверьте, не опечатались ли вы в названии типа данных.
- Проверьте, разделили ли вы тип данных и количество пропусков запятой.
#6
Приведите вектор obs
в порядок, если необходимо:
- удалите пропущенные значения
- скорректируйте тип данных
Перезапишите объект obs
.
Для самопроверки введите количество элементов, оставшихся в векторе после того, как вы привели его в порядок.
Подсказки
Как делать задание?
- Предположите, откуда могла возникнуть сложившаяся проблема.
- Выполните приведение типа данных к нужному.
- Проверьте, решила ли проблема.
- Удалите пропущенные значения через индексацию вектора
- Сохраните полученный результат в переменную
obs
.
Как удалить пропуски?
- Проверьте, является ли каждое значение вектора пропуском.
- Помните, что
x == NA
ведет себя не так, как мы бы хотели. - Используйте вектор, полученный при проверке, для индексации.
- Обратите внимание, что проверка на пропуск возвращает
TRUE
, если значение является пропуском. Нам же нужно отобрать те, которые не являются ими.
Ответ неверный
- Проверьте, что в векторе действительно не осталось пропущенных значений.
#7
На полученном векторе obs
рассчитайте:
- минимум
- максимум
- среднее
- медиану
Для самопроверки введите через запятую полученные значения в порядке, указанном в задании. Проверка игнорирует все пробелы.
Подсказки
Ответ неверный
Проверьте последовательность вводимых значений.
#8
- Отсортируйте значения вектора по возрастанию
- Найдите медиану первой (меньшей) половины значений
- Найдите медиану второй (большей) половины значений
Так как количество элементов нечетное, считайте, что срединное значение входит в обе половины.
Для самопроверки введите в поле ниже через запятую значения, полученные в пунктах (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
).