---
title: "stats1"
author: "PDD"
date: "11/2/2021"
output:
  html_document: default
  pdf_document: default
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Общее

Задание сдавайте в виде Rmd тетради. Она должна выполняться без ошибок. 
Присылайте задание в форму - https://forms.gle/SCkr2YSPSUrge2W6A.


# Часть первая: теория. 

Каждое задание оценивается в 0.5 балла. 

1. Напишите определение p-value. 
2. Какое предположение является общим для t-test, z-test, теста Вилкоксона и линейной регрессии? 
3. Почему не совсем корректно говорить о вероятности того, что Наполеон победил в битве при Аустерлице? О чем тогда можно говорить?
4. Объясните, почему, если нам неизвестна дисперсия, то используется t-test, а не z-test
5. Что такое мощность теста? На что она влияет?
6. Сформулируйте определение доверительного интервала для среднего
7. Можно ли из величины коэффициента при переменной в линейной регрессии судить о его значимости? Если да, то как? Если нет, то почему и как это можно исправить.
8. Вы проводите исследование того, как сильно продлевает лекарство время жизни пациентов с данным заболеванием. P-value сравнения значимое. На что еще следует обратить внимание?
9. Вы встречаете следующую фразу: "можем предположить, что размер семян распределен нормально". Почему это утверждение неверно? 
10. Найдите какую-нибудь абсурдную корреляцию на сайте https://tylervigen.com/discover. Объясните, почему она вам кажется абсурдной и попытайтесь объяснить, откуда она взялась


# Часть вторая: симуляции 


## Задание 1: распределение p-value при H0.  (0.5 балла)

10000 раз повторите следующее: 

1. Сгенерируйте два вектора x и y одинакового размера n = 20 из нормального распределения N(0, 1)
2. Проведите t-test на равенство средних. Предполагаем равенство дисперсий.  
3. Получите p-value теста

После этого средствами ggplot постройте гистограмму полученных pvalue. Предположите, как распределено p-value при H0? 

Проверьте вашу догадку при помощи `ks.test`

```{r}
# пример использования ks.test
x <- rnorm(1000, 0, 1)
ks.test(x, "punif")
```

## Задание 2: распределение p-value при H1 (0.5 балла)

10000 раз повторите следующее:

1. Сгенерируйте два вектора x и y одинакового размера n = 20. x из нормального распределения N(0, 1), y - из нормального распределения N(1, 1)
2. Проведите t-test на равенство средних. 
3. Получите p-value теста.

После этого средствами ggplot постройте гистограмму полученных pvalue. Что можно сказать о распределении p-value в случае, если H0 неверна? 


## Задание 3: распределение p-value при H0, если предположения теста нарушены (1.5 балла)

В H0, помимо самой проверяемой гипотезы, входят также и допущения теста. Если они нарушены, распределение p-value может нарушаться. 

Поработаем с t-test, в котором мы предположили равенство дисперсий 

### дисперсии не равны, больше дисперсия бОльшей выборки

10000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 10.  y - из нормального распределения N(0, 5), размер y - 20. 
2. Проведите t-test на равенство средних, предположив равенство дисперсий 
3. Получите p-value теста.

После этого средствами ggplot постройте гистограмму полученных pvalue. Что можно сказать о распределении p-value? 
К чему будет приводить невыполнения предположения о равенстве дисперсий в этом случае? (будем ли мы отвергать H0 чаще или реже, чем ожидаем?)

### дисперсии не равны, больше дисперсия меньшей выборки

10000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 20.  y - из нормального распределения N(0, 5), размер y - 10. 
2. Проведите t-test на равенство средних, предположив равенство дисперсий 
3. Получите p-value теста.

После этого средствами ggplot постройте гистограмму полученных pvalue. Что можно сказать о распределении p-value? 
К чему будет приводить невыполнения предположения о равенстве дисперсий в этом случае? 

### дисперсии не равны, размеры выборок равны

10000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 20.  y - из нормального распределения N(0, 5), размер y - 20. 
2. Проведите t-test на равенство средних, предположив равенство дисперсий 
3. Получите p-value теста.

После этого средствами ggplot постройте гистограмму полученных pvalue. Что можно сказать о распределении p-value? 

## Задание 4: тест Велча (1 балл)

### Неравенство дисперсий 

постройте распределение p-value при неравенстве дисперсий (все три случая) для теста Велча?
Что можно сказать о распределении p-value?

### Равенство дисперсий 

100000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 10.  y - из нормального распределения N(0, 1), размер y - 20. 
2. Проведите t-test на равенство средних, предположив равенство дисперсий 
3. Получите p-value теста.

100000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 10.  y - из нормального распределения N(0, 1), размер y - 20. 
2. Проведите t-test на равенство средних, не предполагая равенства дисперсий 
3. Получите p-value теста.


Сравните распределение p-value первого и второго теста. Можно ли найти существенные отличия?
Можете использовать `ks.test`. 
Дало ли большой выигрыш использование предположение о равенстве средних?

## Задание 5: проверка равенства дисперсий при помощи теста Фишера (1 балл)

Известен следующий пайплайн:

У нас есть две выборки, x и y, мы не знаем, равны ли в них дисперсии. 
Сделаем следующее:

1. Проверим гипотезу о равенстве дисперсий 
2. Если гипотезу можно отвергнуть на alpha=0.05, то используем тест Велча
3. Иначе используем t-test с предположением о равенстве дисперсий. 

Смоделируем эту схему. 

100000 раз повторите следующее:

1. Сгенерируйте два вектора.x -  из нормального распределения N(0, 1), размер x - 35.  y - из нормального распределения N(0, 1.5), размер y - 35. 
2. Проведите тест Фишера на равенство дисперсий в x и y (`var.test`)
2. Если p-value теста меньше 0.05, используйте далее тест Велча. Иначе - t.test с равенством дисперсий 
3. Проведите выбранный тест на равенство средних, получите его p.value. 

Посмотрите на распределение p-value, получаемых на шаге 3. Какие проблемы вы видите?


## Задание 6: распределение выборочной корреляции (1 балл)

Повторите 10000 раз

1.  Сгенерируйте два вектора x и y -  из нормального распределения N(0, 1). Размер векторов - 20. Корреляция генеральных совокупностей, соответствующих x и y - 0.5
2. Посчитайте значение выборочного коэффициента корреляции

Постройте распределение выборочного коэффициента корреляции. Центрировано ли оно относительно 0.5?

```{r}
library(MASS)
# пример генерации коррелированных случайных величин
sigma<-rbind(c(1, 0.1), c(0.1, 1))
mu = c(0, 0)
M <- mvrnorm(n=10, mu=mu, Sigma=sigma)
x <- M[, 1]
y <- M[, 2]
print(cor(x, y))
```

## Задание 7: выбор "значимых" SNP (1.5 балла)

1. Сгенерируйте вектор y размера 200, первые 100 элементов которого - 0, а оставшиеся - 1.
2. Сгенерируйте матрицу X размера 200 на 10000, значения берите из бернулевского случайного распределения с p=0.5

Представим теперь, что y - метки пациентов (здоров/болен)
X - это признаки пациентов (по столбцам)

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

4. Постройте линейную модель,  посмотрите на значимость коэффициентов. 

5. Объясните наблюдения. 


```{r}
# Пример построения линейной регрессии двух переменных друг от друга
x<- rnorm(100)
y <- x * 2 - 10
model <- lm(y ~ x)
print(model)
```

# Часть третья: реальные данные 

Каждое задание - 1 балл.

## Подготовка

Загрузите датасет scrubbed.csv  (https://www.kaggle.com/NUFORC/ufo-sightings?select=scrubbed.csv)

Зафиксируйте seed равным вашему дню рождения 
Отберите из него случайным образом 70000 колонок без повторений
Выберите колонки 
1. datetime, 
2. city, 
3. state,
4. country, 
5. shape, 
6. "duration (seconds)"
7. "data posted"

Поменяйте название столбца "duration (seconds)" на duration, "date posted" на "posted"
Выберите только те строки, в которых есть информация о стране.

## Задание 1. 

Проверьте гипотезу о том, что число наблюдаемых НЛО распределено по странам равномерно. 
Сформулируйте ваш вывод. 

## Задание 2 
 Проверьте гипотезу о том, что средняя продолжительность контакта одинакова для любой пары стран (проведите попарные сравнения), предварительно убрав те колонки, в которых нет информации о стране. Можно применять t.test в случае, когда требуется z.test. Нет оснований предполагать равенство дисперсий.
Выведите пары стран, для которых отличия оказались значимыми. Поправку на множественное тестирование пока делать не надо. 

## Задание 4
Выберите те строки в датасете, в которых указана форма летательного аппарата и которые говорят о событиях, произошедших в ca, gb или us. Проверьте, связан ли признак "форма аппарата - круглая" с страной
Сформулируйте ваш вывод.

## Задание 5
Проверьте гипотезу о том, что продолжительность контакта распределена нормально при помощи теста хи-квадрат
Сформулируйте ваш вывод.

## Задание 6.
Используя функцию strsplit проверьте гипотезу о том, что контакты (столбец "posted") распределены по месяцам равномерно. Строки без данных об этом в рассмотрение не включайте. 
Сформулируйте ваш вывод.

## Задание 7 
Протестируйте гипотезу о том, что доля УФО в форме света "light" в gb и us отличаются.
Сформулируйте ваш вывод.

# Часть четвертая: дополнительная. S3-классы и не только

## Задание 1: Sequence (3 балла)
Напишите S3-класс Sequence:
1) функцию Sequence, которая принимает вектор из нуклеотидов и возвращает объект S3-класса sequence
2) метод S3-класса Sequence t, который возвращает комплементарную последовательность в виде объекта S3 класс Sequence 
3) метод S3-класса Sequence summary, который выводит, сколько каких нуклеотидов содержится в последовательности
4) метод S3-класса revcompl, который возвращает reverse complement последовательность в виде объекта S3 класса Sequence

## Задание 2: Отрезки (3 балла)

У вас имеется список отрезков, в формате c(start, end). Вы хотите отсортировать данные отрезки по правому концу, в случае, если правые концы равны, сортировка осуществляется по левому. Например, c(3, 4) > c(3, 1), но меньше с(10, 4). 

Напишите функцию или набор функций, которые это будут делать. Реализация должна работать за O(NlogN) в среднем случае. Разрешается использовать встроенную сортировку R и другие функции. 
Указание: Не факт, что в задании вам нужны S3-классы

