set.seed(420)
<- ...
sim1 <- ... sim2
HW2 // Матрицы и списки. Функции
Основные задания
#1
Сгенерируйте две матрицы, которые будут содержать по 50 выборок, объемом по 70 наблюдений, из генеральной совокупности, в которой распределение некоторого признака подчиняется нормальному распределению (rnorm()
) с параметрами mean = 20.5
и sd = 3.48
. Каждой выборке в матрице должен соответствовать один столбец. Сохраните результаты генерации в перемененые sim1
и sim2
.
Так как задание подразумевает генерацию случайных чисел, для воспроизводимых результатов нужно установить зерно датчика случайных чисел. Однако нам нужно сгенерировать две разные матрицы — нет смысла работать с двумя одинаковыми. Если же мы установим одинаковое зерно датчика перед обоими строками с генерацией матриц, то получим как раз две одинаковые матрицы. Поэтому в данном задании set.seed
нужно выполнить один раз перед двумя последующими генерациями. Шаблон кода будет выглядеть так
Автопроверка настроена на результаты, получаемые при значении зерна датчика случайных чисел set.seed(420)
.
В качестве самопроверки введите значения из первой строки первого солбца первой и второй матриц (иммено в таком порядке). Значения округлите до сотых по арифметическим правилам и разделите запятой. Проверка игнорирует все пробелы.
Подсказки
Как делать задание?
- Используя функцию
rnorm()
нужно сгенерировать вектор, длиной равной количеству выборок, умноженному на количество наблюдений в одной выборке. - Затем «сложить» вектор в матрицу, размером число наблюдений в выборке × число выборок.
- Сохранить результат генерации в переменную
sim1
. - Повторить шаги генерации и сохранить результат в переменную
sim2
.
Ответ неверный
- Проверьте, выполнили ли вы строчку строчку с установкой зерна датчика случайных чисел перед генерацией вектора.
- Проверьте, разделили ли вы значения запятой.
- Проверьте округление — округлить необходимо по арифметическим правилам: \(9.434 \rightarrow 9.43, \, 9.435 \rightarrow 9.44\).
#2
Напишите функцию mean_sd
, которая будет вычислять среднее (mean()
) и стандартное отклонение (sd()
) по всем выборкам (столбцам) одной матрицы.
Функция должна принимать на вход матрицу произвольного размера и возвращать матрицу, в которой первой строкой будут средние по каждому столбцу матрицы, а второй — стандартные отклонения. Количество столбцов матрицы аутпута (результата работы функции) должно совпадать с количеством столбцов входной матрицы.
Для проверки корректности работы функции выполните её на матрице
\[ \pmatrix{1 & 4 & 7 \\ 2 & 5 & 8 \\ 3 & 6 & 9} \] В поле ответа введите сначала строку со средними, разделив их запятыми, затем точку с запятой, а затем строку со стандартными отклонениями, также разделив их запятыми. Проверка проигнорирует все пробелы, поэтому для удобства ввода можете их использовать.
Привет формата ответа:
1.2, 2.3, 3.4; 0.1, 0.2, 0.3
.
Подсказки
Как делать задание?
- В функции необходимо вызвать функцию
apply()
для расчета каждой из статистик — среднего и стандартного отклонения. - Результаты работы функций необходимо объединить в матрицу — можно воспользоваться
matrix()
илиrbind()
. - При использовании
matrix()
необходимо указать число столбцов, которое равно числу столбцов входной матрицы.
Ответ неверный
- Проверьте правильность создания или генерации тестовой матрицы.
- Проверьте, разделили ли вы значения строк запятыми.
- Проверьте, разделили ли вы строки матрицы точкой с запятой.
#3
Примените функцию, написанную в задании 2, к матрице sim1
.
Для самопроверки введи в поле ответа первые три средних, разделённые запятыми, далее точку с запятой и затем первые три стандартных отклонения, также разделенные запятыми. Значения округлите до сотых по арифметическим правилам. Проверка проигнорирует все пробелы, поэтому для удобства ввода можете их использовать.
Подсказки
Как делать задание?
- Необходимо вызвать созданную функцию
mean_sd()
на ранее сгенерированной матрицеsim1
. - Для округления можно использоваться функцию
round()
, где вторым аргументом указать2
.
Ответ неверный
- Проверьте, разделили ли вы значения строк запятыми.
- Проверьте, разделили ли вы строки матрицы точкой с запятой.
- Проверьте округление — округлить необходимо по арифметическим правилам: \(9.434 \rightarrow 9.43, \, 9.435 \rightarrow 9.44\).
#4
Выполните t-тест на первых колонках матриц sim1
и sim2
и сохраните результат в переменную ttest_res
.
t-тест выполняется с помощью функции t.test()
, в которую необходимо передать в качестве аргументов два вектора. Синтаксис выглядит так:
t.test(vector1, vector2)
Понимание статистики, стоящей за данной функцией, для выполнения задания не требуется.
В качестве ответа для самопроверки введите t-значение (statistics
), полученное при выполнении теста, округленная до сотых по арифметическим правилам.
Подсказки
Как делать задание?
- Выделите первые колонки сгенерированных матриц
sim1
иsim2
- Передайте их в функцию
t.test()
- Сохраните результат работы функции в переменную
ttest
- Выведите содержимое переменной в консоль, чтобы получить значение для ввода в поле самопроверки.
Ответ неверный
- Проверьте, что из матриц были выделены колонки.
- Проверьте, что были выделены имеено первые колонки.
- Проверьте, что в поле самопроверки вы вводите именно значение t-статистики.
- Проверьте округление — округлить необходимо по арифметическим правилам: \(9.434 \rightarrow 9.43, \, 9.435 \rightarrow 9.44\).
#5
Извлеките из результатов t-теста оценки средних по выборкам (estimate
), значение статистики (statistic
) и p-value (p.value
).
Описание формата инпута.
Подсказки
Как делать задание?
- Изучите структуру переменной
ttest
— это список. - Проиндексируйте список с помощью имен его элементов.
- Выведите значения в консоль.
#6
Объедините извлеченные значения в именнованый список. Названия элементов сохраните исходными — estimate
, statistic
и p.value
соответственно.
Описание формата инпута.
Подсказки
Как делать задание?
- Необходимо создать список, в который сохранить часть значений из переменной
ttest
. - Список должен состоять из трех элементов, которым необходимо присвоить при создании имена, указанные в задании.
#7
У нас есть кирпичики для сбора новой функции.
Основываясь на предыдущих заданиях, напишите функцию, которая выполняет серию t-тестов на соответствующих выборках (столбцах матриц). Сохраните функцию в переменную stat_testing
.
Функция должна:
- принимать на вход две матрицы
- возвращать список, каждый элементов которого является результат одного t-теста
- каждый результат t-теста также является списком и состоит из трех элементов —
estimate
,statistic
иp.value
(как в задании 6)
Пример синтаксиса функции и результата её работы на матрицах A
и B
:
\[ A = \pmatrix{1 & 4 & 7 \\ 2 & 5 & 8 \\ 3 & 6 & 9}, \quad B = \pmatrix{10 & 40 & 70 \\ 20 & 50 & 80 \\ 30 & 60 & 90} \]
stat_testing(A, B) # A and B both are matrices
[[1]]
[[1]]$estimate
mean of x mean of y
2 20
[[1]]$statistic
t
-3.102219
[[1]]$p.value
[1] 0.0878746
[[2]]
[[2]]$estimate
mean of x mean of y
5 50
[[2]]$statistic
t
-7.755547
[[2]]$p.value
[1] 0.0153293
[[3]]
[[3]]$estimate
mean of x mean of y
8 80
[[3]]$statistic
t
-12.40888
[[3]]$p.value
[1] 0.005968456
Описание формата инпута.
Подсказки
Как делать задание?
- Необходимо создать функцию, аргументами которой будут две матрицы
- Внутри функции должен быть цикл, который будет перебирать столбцы матриц и выполнять на них t-тест
- Из результатов t-тесты необходимо извлекать три значения, аналогично заданию 6.
- Извлеченные результаты должны сохраняться в список результатов, который необходимо создать в начале функции.
- В конце тела функции с помощью
return()
нужно вернуть получившийся список с результатами. - Количество элементов списка результатов должно совпадать с числом колонок входных матриц.
#8
Выполните функцию из задания 7 на матрицах sim1
и sim2
. Результат работы функции сохраните в переменную stat_testing_res
.
Для самопроверки в качестве ответа введите среднее значение (estimate
) по выборке y
(mean of y
) из 30-го t-теста, округленное до сотых по арифметическим правилам.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#9
Извлеките из списка stat_testing_res
вектор p-значений (p.value
).
Для самопроверки в качестве ответа введите десятое значение получившегося вектора, округленное до сотых по арифметическим правилам.
Подсказки
Как делать задание?
- Чтобы извлечь p-значения, необходимо выполнить функцию, которая извлекает p-значения, на элементах списка.
- Используйте для этого функцию
Map()
- В качестве её первого аргумента пропишите анонимную функцию, которая вытаскивает элемент
p.value
из списка путем индексации по имени. - Функция
Map()
возвращается список, который необходимо превратить в вектор с помощью функцииunlist()
.
Ответ неверный
- Проверьте, что в вектор извлекаются именно p-значения.
- Проверьте, что индексируете необходимый элемент вектора.
- Проверьте округление — округлить необходимо по арифметическим правилам: \(9.434 \rightarrow 9.43, \, 9.435 \rightarrow 9.44\).
#10
Проверьте, сколько результатов тестов было статистически значимым. Считайте статистически значимым те результаты, где p-значение было меньше 0.05.
Для самопроверки в поле ниже введите получившееся значение.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
Дополнительные задания
#1
Модифицируйте функцию из задания 2, чтобы в её аутпуте строки были подписаны соответственно mean
и sd
.
Сохраните модифицированную функцию в переменную mean_sd_1
.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#2
Продолжите модификацию функции из задания 2, чтобы в её аутпуте столбцы унаследовали названия из входной матрицы, если они есть.
Сохраните модифицированную функцию в переменную mean_sd_2
.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#3
Модифицируйте функцию из задания 7, чтобы:
- она проверяла, совпадает ли количество столбцов во входных матрицах,
- в случае совпадения выполняла свой основной код
- в случае несовпадения заканчивала свою работу с ошибкой
Number of columns does not match
- можно было задать параметр
paired
для t-тестов с дефолтным значением таким же, как у функцииt.test()
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#4
Модифицируйте функцию из предыдущего задания, чтобы можно было использовать для статистических тестов не только функцию t.test()
, но и другие. Функция должна без ошибок обрабатывать входные параметры внутренних статистических функций. Сохраните модифицированную функцию в переменную stat_testing_2
.
Описание формата инпута.
Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный
#5
Напишите функцию, которая решает квадратные уравнения.
Квадратное уравнение задается тремя коэффициентами \(a\), \(b\) и \(c\):
\[ ax^2 + bx + c = 0 \]
Функция должна:
- принимать на вход три аргумента — коэффициенты квадратного уравнения \(a\), \(b\) и \(c\)
- коэффициент \(a\) является обязательным, иначе уравнение не является квадратным
- значение \(a\) не может равняться нулю по той же причине — функция должна в этом случае выдать ошибку
The equation is not quadratic
- значение \(a\) не может равняться нулю по той же причине — функция должна в этом случае выдать ошибку
- если какой-либо из коэффициентов \(b\) и \(c\) не передан в функцию, его значение считается равным нулю
- коэффициент \(a\) является обязательным, иначе уравнение не является квадратным
- возвращать именованный вектор решений квадратного уравнения
- если два решения различны, необходимо вернуть оба с именами
x1
иx2
в порядке возрастания - если два решения совпадают, необходимо вернуть только одно с именем
x
- если решений нет, необходимо вернуть пропущенное значение и сообщение
No solutions
- если два решения различны, необходимо вернуть оба с именами
Известно, что уравнения вида \(x^2 + 1 = 0\) в общем случае корректны, и функция должна уметь их решать.
- По умолчанию функция должна решать уравнение в вещественных числах.
- Если пользователь хочет, чтобы уравнение решалось в комплексных числах, ему необходимо указать аргумент функции
complex = TRUE
.
Сохраните функцию в переменную quadeqsolve
.
Примеры работы функции представлены ниже.
quadeqsolve(a = 1, b = -5, c = 4)
x1 x2
1 4
quadeqsolve(b = -3, c = 2)
Error in quadeqsolve(b = -3, c = 2): argument "a" is missing, with no default
quadeqsolve(a = 0, b = -3, c = 2)
Error in quadeqsolve(a = 0, b = -3, c = 2): The equation is not quadratic
quadeqsolve(a = -4, c = 2)
x1 x2
0.7071068 -0.7071068
quadeqsolve(a = 3, c = 2)
No solutions
[1] NA
quadeqsolve(a = 3, c = 2, complex = TRUE)
x1 x2
0-0.8164966i 0+0.8164966i
Описание формата инпута.