{ "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 }