{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# [Phystech@DataScience](https://thetahat.ru/courses/ph-ds-2025-spr)\n",
"## Домашнее задание 6\n",
"\n",
"**Правила, прочитайте внимательно:**\n",
"\n",
"* Выполненную работу нужно отправить телеграм-боту `@miptstats_st_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. **Работы, присланные иным способом, не принимаются.**\n",
"* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n",
"* Прислать нужно **ноутбук в формате `ipynb`**. Если вы строите интерактивные графики, их стоит прислать в формате html.\n",
"* Следите за размером файлов. **Бот не может принимать файлы весом более 20 Мб.** Если файл получается больше, заранее разделите его на несколько.\n",
"* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.**\n",
"* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n",
"* Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.\n",
"* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n",
"* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n",
"* Комментарии к решению пишите в markdown-ячейках.\n",
"* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n",
"* Решение проверяется системой ИИ-проверки
**ThetaGrader**. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.\n",
"* Если код будет не понятен проверяющему, оценка может быть снижена.\n",
"* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n",
"\n",
"Важно!!! Правила заполнения ноутбука:\n",
"* Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.\n",
"* Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.\n",
"* Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены `<...>`.\n",
"* В markdown-ячейка, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.\n",
"* При нарушении данных правил работа может получить 0 баллов.\n",
"\n",
"**Баллы за задание:**\n",
"\n",
"Легкая часть (достаточно на \"хор\"):\n",
"* Задача 1 — 15 баллов\n",
"* Задача 2 — 15 баллов\n",
"* Задача 3 — 20 баллов\n",
"* Задача 4 — 20 баллов\n",
"\n",
"Cложная часть (необходимо на \"отл\"):\n",
"* Задача 5 — 25 баллов\n",
"* Задача 6 — 30 баллов\n",
"-----"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Bot check\n",
"\n",
"# HW_ID: phds_hw6\n",
"# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.\n",
"\n",
"# Status: not final\n",
"# Перед отправкой в финальном решении удали \"not\" в строчке выше.\n",
"# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.\n",
"# Никакие значения в этой ячейке не влияют на факт сдачи работы."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "pwOeZYydbPOU"
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import scipy.stats as sps\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"from scipy.special import gamma, loggamma\n",
"\n",
"sns.set_style(\"whitegrid\")\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Легкая часть\n",
"\n",
"\n",
"### Задача 1\n",
"\n",
"Пусть $X_1,...,X_n$ выборка из из распределения $U(0, \\theta)$. На лекции во время практики вы уже визуализировали свойство несмещенности для следующих оценок параметра $\\theta$: $2\\overline{X}$, $X_{(n)}$, $\\frac{n+1}{n}X_{(n)}$. Теперь наша задача убедиться, согласуется ли практика с теорией. Для решения этой задачи воспользуйтесь утверждениями с лекции.\n",
"\n",
"*Указание.* Найдите функцию распределения случайной величины $X_{(n)}$, посчитав вероятность того, что максимальное значение среди элементов выборки не превосходит числа $x$. Используйте при этом определение выборки. После чего получите плотность $X_{(n)}$.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Задача 2\n",
"\n",
"\n",
"Пусть $X_1,...,X_n$ выборка из некоторого распределения $\\mathrm{P}$, причем ${\\sf D} X_1=\\sigma^2<+\\infty$, и $\\sigma$ неизвестно.\n",
"Рассмотрим статистику $S^2=\\frac1n\\sum\\limits_{i=1}^n(X_i-\\overline{X})^2$.\n",
"\n",
"1. Докажите, что статистика $S^2$ равна $\\overline{X^2}-\\overline{X}^2$.\n",
"\n",
"\n",
"2. Является ли она состоятельной оценкой $\\sigma^2$? Для ответа на этот вопрос воспользуйтесь утверждениями с лекции, а также тем фактом, что для любой непрерывной на $\\Theta$ функции $\\tau (x)$, $\\tau (\\widehat{\\theta})$ является состоятельной, если $\\widehat{\\theta}$ — состоятельная оценка ${\\theta}$.\n",
"\n",
"\n",
"3. Является ли статистика $S^2$ несмещенной оценкой $\\sigma^2$? Для ответа на этот вопрос вспомните различные варианты определения дисперсии."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Задача 3\n",
"\n",
"\n",
"Пусть $X_1, ..., X_n$ — выборка из распределения $\\mathcal{N}(0, \\sigma^2)$. Известно, что в качестве оценки параметра $\\sigma^2$ можно использовать следующие оценки $S^2, \\frac{n}{n-1}S^2$. Проверьте эти оценки на несмещенность, повторив эксперимент с семинара."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Реализуйте две функции, каждая из которых на вход берет несколько выборок, а на выход выдает массив оценок (первая функция - $S^2$, вторая функция - $\\frac{n}{n-1}S^2$) для каждой выборки. \n",
"*Примечание:* У матрицы, заданной в виде `numpy.array` есть метод `var` вычисляющий выборочную дисперсию."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def estimate_s2(X):\n",
" '''\n",
" Принимает на вход массив размером (n_samples, sample_size), выдает массив оценок размера (n_samples,)\n",
" '''\n",
" <...>\n",
"\n",
"def estimate_s2_corrected(X):\n",
" '''\n",
" Принимает на вход массив размером (n_samples, sample_size), выдает массив оценок размера (n_samples,)\n",
" '''\n",
" <...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Проверьте правильность своей реализации"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = np.array([[1, 3, 3, 6], [2, 5, 1, 89]])\n",
"estimate_s2(X)\n",
"\n",
"assert(sum(estimate_s2(X) != np.array([3.1875, 1399.6875])) == 0)\n",
"assert(sum(estimate_s2_corrected(X) != np.array((4.25, 1866.25))) == 0)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Задайте список оценок и разные параметры для отрисовки графика"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"estimators = [\n",
" (estimate_s2, r'$S^2$', 'purple', 0.1),\n",
" (estimate_s2_corrected, r'\\frac{n}{n-1}$S^2$', 'green', 0.2)\n",
"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Мы хотим понять, являются ли оценки параметра $\\theta$ смещенными, для этого нам нужно провести множество экспериментов (сгенерировать выборку много раз, так как при каждой генерации получаются разные числа).\n",
"\n",
"Напишите функцию построения таких графиков в общем виде: на вход функция может получать любые распределения (`distributions`) и любые оценки (`estimators`). \n",
"Средние значения по экспериментам для каждой оценки нужно обозначить звездочками.\n",
"\n",
"*Подсказка: получается, что для этой задачи достаточно просто взять функции из семинарского ноутбука?!*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Постройте три графика для разных размеров выборок (10, 100, 500).\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sample_size_list = (10, 100, 500) # размеры выборок\n",
"sample_count = 500 # количество экспериментов\n",
"\n",
"for sample_size in sample_size_list:\n",
" <...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Изучите поведение среднего оценок из первого пункта при росте размера $n$ выборки - постройте график зависимости среднего оценки по всем экспериментам от размера выборки. Для вычисления зависимости нужно один раз сгенерировать выборки из достаточно большого размера и посчитать оценки по префиксам, используя функции из `numpy`.\n",
"\n",
"*Подсказка: кажется, на семинаре для этих целей использовалась функция `cumsum`...*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Какие из оценок являются асимптотически несмещёнными (т.е. $\\forall \\theta \\in \\Theta\\colon \\mathsf{E}_\\theta \\widehat{\\theta} \\to \\theta$ при $n\\to +\\infty$)?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Ответ:**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Задача 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Профиль Биология\n",
"\n",
"В данной задаче мы будем работать с данными, полученными в результате РНК интерференции. Это метод точной медицины, который включает в себя процесс, при котором специфические мРНК становятся мишенью и разрушаются. Использование естественных механизмов деградации позволяет подавлять экспрессию определенных генов. Это интересный лекарственный механизм для лечения многих заболеваний и расстройств, начиная от лечения рака и заканчивая лечением генетических нарушений.\n",
"\n",
"Вам нужно взять [данные](https://www.kaggle.com/datasets/livtoft/sirna-activity/data) об \"Активности\" экспрессии последовательности \"M60857\" и предполагая, что они имеют экспоненциальное распределение найти ОМП и построить гистограмму с плотностью экспоненциального распределения.\n",
"\n",
"*Данные активности начинаются не с 0, поэтому для начала приведите их к началу координат, для этого необходимо вычесть из всей выборки минимальное значение.*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(\"data.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Выделим данные активности по признаку \"M60857\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Профиль Физика\n",
"\n",
"В данной задаче мы будем работать с [данными](https://www.kaggle.com/datasets/abhinand05/daily-sun-spot-data-1818-to-2019) наблюдения за тёмными пятнами на солнце. Среди всех данных нам понадобятся только данные по числу тёмных пятен в день. Данные необходимо проверить на наличие пропусков, обратите внимание, что пропуски не обязательно будут обозначаться как `NaN`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv(\"sunspot_data.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Выделим данные про количество пятен в день."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Общая часть\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализируем данные с помощью гистограммы."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"В данной задаче мы предполагаем, что распределение имеет экспоненциальный характер, оценим параметр этого распределения.\n",
"\n",
"Для этого выведем ОМП для параметра экспоненциального распределения:\n",
"\n",
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Посчитайте оценку и визуализируйте полученный результат. Для этого отобразите ваши данные в виде гистограммы, после этого добавьте на график плотность экспоненциального распределения с полученным параметром."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Вывод:**\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "od4vuw6aJ1LC"
},
"source": [
"## Сложная часть"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Задача 5\n",
"\n",
"Рассмотрим модель линейной регрессии\n",
"\n",
"$$Y = X \\theta + ɛ,$$\n",
"\n",
"где $Y \\in \\mathbb{R}^n$ - отклик, $X \\in \\mathbb{R}^{n \\times d}$, $\\theta \\in \\mathbb{R}^d$, $ɛ \\in \\mathbb{R}^n$ - шум, $n > d$, $rk X = d$.\n",
"\n",
"1. Опишите, какие величины в модели являются\n",
" - случайными\n",
" - неизвестными\n",
"2. Покажите, что если $E ɛ = 0$, то МНК-оценка $\\widehat{\\theta}$ параметра $\\theta$\n",
"\n",
" $$\\widehat{\\theta} = (X^TX)^{-1}X^T Y$$\n",
"\n",
" является несмещенной оценкой параметра $\\theta$. Будет ли выполнено свойство несмещенности для Ridge-регрессии?\n",
"\n",
" *Указание:* используйте свойство линейности математического ожидания в матричном виде.\n",
" \n",
"3. Покажите, что, если дополнительно матрица ковариаций $D ɛ = σ^2 I_n$, дисперсия МНК-оценки $D \\widehat{\\theta} = \\sigma^2 (X^TX)^{-1}$. Что показывает данный результат в случае мультиколлинеарности признаков?\n",
" *Указание:* используйте свойство дисперсии в матричном виде.\n",
"\n",
"\n",
"**Напоминание**\n",
"\n",
"1. Матричное свойство математического ожидания:\n",
"\n",
" $∀ A \\in \\mathbb{R}^{m \\times k}$, случайного вектора $\\psi \\in \\mathbb{R}^k$\n",
"\n",
" $$E A \\psi = A E \\psi$$\n",
"2. Матричное свойство дисперсии:\n",
" $∀ A \\in \\mathbb{R}^{m \\times k}$, случайного вектора $\\psi \\in \\mathbb{R}^k$\n",
"\n",
" $$D A \\psi = A (D \\psi) A^T$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Задача 6\n",
"\n",
"В данной задаче нужно проверить на несмещенность МНК-оценку в линейной регрессии и оценку в Ridge-регрессии.\n",
"\n",
"1. При заданных $X, Y, \\lambda$ выпишите формулы для\n",
" - Решения задачи МНК $\\widehat{\\theta}_{МНК}$\n",
" - Решения задачи Ridge-регрессии $\\widehat{\\theta}_{Ridge}$\n",
"2. Визуализируйте, являюся ли данные оценки несмещенными аналогично задаче 5. Для этого нужно во многих экспериментах посчитать реализации оценок $\\widehat{\\theta}_{МНК}$, $\\widehat{\\theta}_{Ridge}$ и нанести их на график.\n",
" - Учитывая ответы в задаче 5, опишите, как должны генерироваться выборки для визуализации. Какие величины в формулах из п.1 должны быть зафиксированы? Какие должны меняться от эксперимента к эксперименту? Каким образом?\n",
" - Задайте сами истинное значение $\\theta$ и значения признаков $X \\in \\mathcal{R}^{n \\times d}$. Учитывайте, что для выполнения условия теоремы с лекции $n > d$ и $rk X = d$. Для Ridge-регрессии возьмите два значения $\\lambda$. Сгенерируйте зашумленные значения $Y$, с помощью которых можно получить выборки для каждого вида оценки. Визуализируйте их аналогично задаче 3. Распределение шума $ɛ$ можно считать нормальным. \n",
" \n",
" **Внимание:** вы должны получить $m$ реализаций $Y$, по которым будут посчитаны $m$ реализаций оценок каждого вида."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Не забудьте про выводы."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Выводы:**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}