commit e0a5b2a8f65cdc6765519168acf397f889318864 Author: Arity-T Date: Thu May 15 21:39:49 2025 +0300 ИДЗ 3 diff --git a/idz3/.gitignore b/idz3/.gitignore new file mode 100644 index 0000000..6d3c5f8 --- /dev/null +++ b/idz3/.gitignore @@ -0,0 +1,6 @@ +**/* +!.gitignore +!report.tex +!img +!img/** +!*.ipynb \ No newline at end of file diff --git a/idz3/img/table1.png b/idz3/img/table1.png new file mode 100644 index 0000000..80428ee Binary files /dev/null and b/idz3/img/table1.png differ diff --git a/idz3/img/table2.png b/idz3/img/table2.png new file mode 100644 index 0000000..678eee2 Binary files /dev/null and b/idz3/img/table2.png differ diff --git a/idz3/img/table3.png b/idz3/img/table3.png new file mode 100644 index 0000000..a7715b4 Binary files /dev/null and b/idz3/img/table3.png differ diff --git a/idz3/img/table4.png b/idz3/img/table4.png new file mode 100644 index 0000000..96180e4 Binary files /dev/null and b/idz3/img/table4.png differ diff --git a/idz3/img/table5.png b/idz3/img/table5.png new file mode 100644 index 0000000..ed37c6d Binary files /dev/null and b/idz3/img/table5.png differ diff --git a/idz3/img/table6.png b/idz3/img/table6.png new file mode 100644 index 0000000..16dcf59 Binary files /dev/null and b/idz3/img/table6.png differ diff --git a/idz3/img/task1.png b/idz3/img/task1.png new file mode 100644 index 0000000..cc924a0 Binary files /dev/null and b/idz3/img/task1.png differ diff --git a/idz3/img/task1_1.png b/idz3/img/task1_1.png new file mode 100644 index 0000000..57f66b7 Binary files /dev/null and b/idz3/img/task1_1.png differ diff --git a/idz3/img/task1_2.png b/idz3/img/task1_2.png new file mode 100644 index 0000000..eee72e1 Binary files /dev/null and b/idz3/img/task1_2.png differ diff --git a/idz3/img/task2.png b/idz3/img/task2.png new file mode 100644 index 0000000..58e6ead Binary files /dev/null and b/idz3/img/task2.png differ diff --git a/idz3/img/task2_1.png b/idz3/img/task2_1.png new file mode 100644 index 0000000..a06ea8b Binary files /dev/null and b/idz3/img/task2_1.png differ diff --git a/idz3/img/task2_2.png b/idz3/img/task2_2.png new file mode 100644 index 0000000..a78ee0e Binary files /dev/null and b/idz3/img/task2_2.png differ diff --git a/idz3/report.tex b/idz3/report.tex new file mode 100644 index 0000000..12d9dc7 --- /dev/null +++ b/idz3/report.tex @@ -0,0 +1,755 @@ +\documentclass[a4paper, final]{article} +%\usepackage{literat} % Нормальные шрифты +\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта +\usepackage{tabularx} +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[russian]{babel} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage[left=15mm, top=15mm, right=15mm, bottom=15mm, footskip=10mm]{geometry} +\usepackage{ragged2e} %для растягивания по ширине +\usepackage{setspace} %для межстрочно го интервала +\usepackage{moreverb} %для работы с листингами +\usepackage{indentfirst} % для абзацного отступа +\usepackage{moreverb} %для печати в листинге исходного кода программ +\usepackage{pdfpages} %для вставки других pdf файлов +\usepackage{tikz} +\usepackage{graphicx} +\usepackage{afterpage} +\usepackage{longtable} +\usepackage{float} + + + +% \usepackage[paper=A4,DIV=12]{typearea} +\usepackage{pdflscape} +% \usepackage{lscape} + +\usepackage{array} +\usepackage{multirow} + +\renewcommand\verbatimtabsize{4\relax} +\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге +\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице +\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы +\usepackage{listings} %листинги +\usepackage{xcolor} % цвета +\usepackage{hyperref}% для гиперссылок +\usepackage{enumitem} %для перечислений + +\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}} + + +\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях + +\hypersetup{colorlinks, + allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные) + +% подгружаемые языки — подробнее в документации listings (это всё для листингов) +\lstloadlanguages{ SQL} +% включаем кириллицу и добавляем кое−какие опции +\lstset{tabsize=2, + breaklines, + basicstyle=\footnotesize, + columns=fullflexible, + flexiblecolumns, + numbers=left, + numberstyle={\footnotesize}, + keywordstyle=\color{blue}, + inputencoding=cp1251, + extendedchars=true +} +\lstdefinelanguage{MyC}{ + language=SQL, +% ndkeywordstyle=\color{darkgray}\bfseries, +% identifierstyle=\color{black}, +% morecomment=[n]{/**}{*/}, +% commentstyle=\color{blue}\ttfamily, +% stringstyle=\color{red}\ttfamily, +% morestring=[b]", +% showstringspaces=false, +% morecomment=[l][\color{gray}]{//}, + keepspaces=true, + escapechar=\%, + texcl=true +} + +\textheight=24cm % высота текста +\textwidth=16cm % ширина текста +\oddsidemargin=0pt % отступ от левого края +\topmargin=-1.5cm % отступ от верхнего края +\parindent=24pt % абзацный отступ +\parskip=5pt % интервал между абзацами +\tolerance=2000 % терпимость к "жидким" строкам +\flushbottom % выравнивание высоты страниц + + +% Настройка листингов +\lstset{ + language=python, + extendedchars=\true, + inputencoding=utf8, + keepspaces=true, + % captionpos=b, % подписи листингов снизу +} + +\begin{document} % начало документа + + + + % НАЧАЛО ТИТУЛЬНОГО ЛИСТА + \begin{center} + \hfill \break + \hfill \break + \normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\ + федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский политехнический университет Петра Великого»\\[10pt]} + \normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt] + \normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt] + \normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\ + + \hfill \break + \hfill \break + \hfill \break + \hfill \break + \large{Индивидуальное домашнее задание №3}\\ + \large{по дисциплине}\\ + \large{<<Математическая статистика>>}\\ + \large{Вариант 27}\\ + + % \hfill \break + \hfill \break + \end{center} + + \small{ + \begin{tabular}{lrrl} + \!\!\!Студент, & \hspace{2cm} & & \\ + \!\!\!группы 5130201/20102 & \hspace{2cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\ + \!\!\!Преподаватель & \hspace{2cm} & \underline{\hspace{3cm}} & Малов С. В. \\\\ + &&\hspace{4cm} + \end{tabular} + \begin{flushright} + <<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2025г. + \end{flushright} + } + + \hfill \break + % \hfill \break + \begin{center} \small{Санкт-Петербург, 2025} \end{center} + \thispagestyle{empty} % выключаем отображение номера для этой страницы + + % КОНЕЦ ТИТУЛЬНОГО ЛИСТА + \newpage + \section {Задание №1} + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/task1.png} + \label{fig:task1} + \end{figure} + + + \subsection{Пункт a} + Вариационный ряд: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 6, 6, 7, 8, 8, 14. + + Эмпирическая функция распределения (ЭФР) + $$ + \hat{F}_n(x) = \frac{1}{n} \sum_{i=1}^{n} \text{\textbf{1}}_{\{X_i \leq x\}}, + $$ + где $n$ — объем выборки. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.55\linewidth]{img/task1_1.png} + \label{fig:task1_1} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.55\linewidth]{img/task1_2.png} + \label{fig:task1_2} + \end{figure} + + \subsection{Пункт b} + + \textbf{(i) Выборочное среднее (математическое ожидание)} + Выборочное среднее — оценка теоретического математического ожидания. + $$ + \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i = 1.96 + $$ + + + \textbf{(ii) Выборочная дисперсия} + + Несмещённая оценка дисперсии: + $$ + s^2 = \frac{1}{n-1} \sum_{i=1}^{n}(X_i-\bar{X})^2 = 7.67 + $$ + + Смещенная оценка дисперсии: + $$ + s^2_{\text{смещенная}} = \frac{1}{n} \sum_{i=1}^{n}(X_i - \bar{X})^2 = 7.52 + $$ + + где: + \begin{itemize} + \item $ n $ — общее количество наблюдений, + \item $X_i$ — каждое отдельное наблюдение, + \item $\bar{X}$ — среднее значение выборки. + \end{itemize} + + + \textbf{(iii) Медиана} + + $$ + \text{Медиана} = + \begin{cases} + X_{\left(\frac{n}{2}\right)} & \text{если } n \text{ чётно} \\ + \frac{X_{\left(\frac{n-1}{2}\right)} + X_{\left(\frac{n+1}{2}\right)}}{2} & \text{если } n \text{ нечётно} + \end{cases} + $$ + + Для данных из варианта: + $$ + \text{Медиана} = 1 + $$ + + \textbf{(iv) Ассиметрия} + $$ + Skewness = \frac{\frac{1}{n}\sum_{i=1}^{n}(X_i-\bar{X})^3}{s^3} = 2.25 + $$ + + \textbf{(v) Эксцесс} + $$ + Kurtosis = \frac{\frac{1}{n}\sum_{i=1}^{n}(X_i-\bar{X})^4}{s^4} - 3 = 5.92 + $$ + + \textbf{(vi) Вероятность $P(X \in [0.00, 2.49])$} + $$ + P(X \in [a, b]) = \frac{\text{число элементов выборки} \in [a, b]}{n}. + $$ + + Для данных из варианта: + $$ + P(X \in [0.0, 2.49]): 0.74 + $$ + + \subsection{Пункт c} + \textbf{1. Оценка максимального правдоподобия (ОМП)} + Функция правдоподобия для Пуассона: + $$ + L(\lambda) = \prod_{i=1}^{n}\frac{\lambda^{X_i}e^{-\lambda}}{X_i!}. + $$ + + Логарифмируя, получаем: + + $$ + \ln L(\lambda) = \sum_{i=1}^{n} \left( X_i \ln \lambda - \lambda - \ln X_i! \right). + $$ + + Дифференцируя по $\lambda$, приравнивая к нулю: + + $$ + \frac{d}{d\lambda} \ln L(\lambda) = \frac{1}{\lambda} \sum_{i=1}^{n} X_i - n = 0 + \Longrightarrow \hat{\lambda}_{\text{ОМП}} = \frac{1}{n} \sum_{i=1}^{n} X_i = \bar{X}. + $$ + + ОМП для $\lambda$: 1.96 + + + \textbf{Смещение ОМП:} + В случае распределения Пуассона оценка максимального правдоподобия (ОМП) параметра $\lambda$ совпадает с выборочным средним: + + $$ + \hat{\lambda}_{\text{ОМП}} = \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i. + $$ + + Найдём математическое ожидание этой оценки: + + $$ + \mathbb{E}[\hat{\lambda}_{\text{ОМП}}] = \mathbb{E} \left[ \frac{1}{n} \sum_{i=1}^{n} x_i \right] = \frac{1}{n} \sum_{i=1}^{n} \mathbb{E}[x_i]. + $$ + + Так как для распределения Пуассона $\mathbb{E}[x_i] = \lambda$, то: + + $$ + \mathbb{E}[\hat{\lambda}_{\text{ОМП}}] = \frac{1}{n} \cdot n \lambda = \lambda. + $$ + + Отсюда следует: + + $$ + \text{Смещение}(\hat{\lambda}_{\text{ОМП}}) = \lambda - \lambda = 0. + $$ + + \textbf{2. Оценка по методу моментов (ОММ)} + Приравниваем теоретическое математическое ожидание к выборочному: + $$ + E[X]=\lambda \Longrightarrow \hat{\lambda}_{\text{MM}} = \bar{X}. \ + $$ + + ОММ для $\lambda$: 1.96 + + + \textbf{Смещение ОММ:} + Метод моментов приводит к той же оценке: + + $$ + \hat{\lambda}_{\text{ММ}} = \bar{x}. + $$ + + Математическое ожидание: + + $$ + \mathbb{E}[\hat{\lambda}_{\text{ММ}}] = \lambda \ + $$ + + Смещение этой оценки: + + $$ + \text{Смещение}(\hat{\lambda}_{\text{ММ}}) = \lambda - \lambda = 0. + $$ + + Таким образом, обе оценки ($\hat{\lambda}_{\text{ОМП}}$ и $\hat{\lambda}_{\text{ММ}}$) являются несмещёнными. + + + \subsection{Пункт d} + Aсимптотический доверительный интервал уровня значимости $\alpha_{1}=0.02$ для параметра $\lambda$ на базе оценки максимального правдоподобия + + \textbf{Шаги построения} + + \begin{enumerate} + \item Оценка $\hat{\lambda}$ + ОМП параметра $\lambda$ равна выборочному среднему: + $$ \hat{\lambda} = \bar{x} = 1.96 $$ + + \item Стандартная ошибка + Для распределения Пуассона дисперсия равна $\lambda$: + $$ SE = \sqrt{\frac{\hat{\lambda}}{n}} = 0.198$$ + + \item Квантиль нормального распределения + Для уровня значимости $\alpha_{1} = 0.02$: + $$ z_{1-\alpha/2} = z_{0.99} $$ + + \item Границы интервала + $$ \hat{\lambda} \pm z_{0.99} \cdot SE $$ + + Доверительный интервал (98\%): $\lambda \in (1.499, 2.421)$ + \end{enumerate} + + + \subsection{Пункт e} + Критерий $\chi^2$ для проверки гипотезы согласия с распределением Пуассона ($\lambda_0 = 2.00$) + Критерий $\chi^2$ проверяет, насколько эмпирические частоты $O_i$ соответствуют теоретическим частотам $E_i$ при заданном распределении. + + \begin{enumerate} + \item Расчёт наблюдаемых и теоретических частот: + $O_i$ - наблюдаемые частоты для каждого интервала, + + $$ + E_i = n \cdot P(X = k\ |\ \lambda = \lambda_0), + $$ + где $P(X=k)$ — вероятность по распределению Пуассона. + + \item Группировка данных: Объединить значения так, чтобы $E_i \geq 5$. + + \item Статистика $\chi^2$: + $$ + \chi^2 = \sum_{i=1}^{k}\frac{(O_i - E_i)^2}{E_i}. + $$ + + \item Степени свободы: + $$ + df = k - 1 - m, + $$ + где $k$ — число категорий, $m=0$. + \end{enumerate} + + \textbf{Критическое значение:} Сравнение с $\chi_{\text{крит}}^2(df, \alpha)$. + + \textbf{p-значение:} Вероятность $P(\chi^2 \geq \chi_{\text{набл}}^2)$. + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/table1.png} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.5\linewidth]{img/table2.png} + \end{figure} + + \newpage + \textbf{Интерпретация} + \begin{itemize} + \item Наблюдаемые частоты $O_i$ — количество раз, когда значение $k$ встречается в выборке. + \item Теоретическая вероятность $P(X=k)$ — вероятность по распределению Пуассона с $\lambda=2.0$. + \item Теоретическая частота $E_i$ — ожидаемое количество значений $k$ при условии, что данные следуют распределению Пуассона ($E_i = n \cdot P(X = k)$). + \end{itemize} + + После группировки категорий (чтобы $E_i \geq 5$) таблица принимает вид: + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/table3.png} + \end{figure} + + $\chi^2$ наблюдаемое: 29.022 + + Критическое значение ($\alpha=0.02$): 11.668 + + p-значение: 0.0000077 + + Отвергаем гипотезу на уровне $\alpha=0.02$ + + Наибольший уровень значимости, на котором ещё нет оснований отвергнуть гипотезу: 0.0000077 + + Это означает, что гипотеза отвергается на любом уровне значимости $\alpha \geq 0.0000077$ + + + \subsection{Пункт f} + Критерий $\chi^2$ для проверки сложной гипотезы согласия с распределением Пуассона + + \textbf{Оценка параметра $\lambda$} + Если параметр $\lambda$ неизвестен, его оценивают по выборке (например, через выборочное среднее): + + $$ + \hat{\lambda} = \frac{1}{n} \sum_{i=1}^n x_i, + $$ + + где $x_i$ — значения выборки, $n$ — объем выборки. + + \textbf{Степени свободы} + Число степеней свободы для критерия $\chi^2$: + + $$ + df = k - 1 - m, + $$ + + где: + - \( k \) — количество интервалов, + - \( m \) — количество оцененных параметров (в данном случае \( m = 1 \), так как оценивается $\lambda$). + + \textbf{Критическое значение:} Сравнение с $\chi_{\text{крит}}^2(df, \alpha)$. + \textbf{p-значение:} Вероятность $P(\chi^2 \geq \chi_{\text{набл}}^2)$. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.8\linewidth]{img/table4.png} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/table5.png} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/table6.png} + \end{figure} + + Хи-квадрат статистика: 27.3903 + + Критическое значение ($\alpha=0.02$): 9.8374 + + p-value: 0.000005 + + Вывод: Отвергаем нулевую гипотезу + + + \subsection{Пункт g} + + Наиболее мощный критерий проверки гипотезы $H_0 : \lambda = \lambda_0 = 2.0$ против $H_1 : \lambda = \lambda_1 = 4.0$ + + \textbf{Логарифм отношения правдоподобия} + + Функция правдоподобия для распределения Пуассона: + + $$ + L(\lambda) = \prod_{i=1}^n \frac{\lambda^{X_i} e^{-\lambda}}{X_i!} + $$ + + Логарифм отношения правдоподобия: + + $$ + \ln \left( \frac{L(\lambda_1)}{L(\lambda_0)} \right) = \sum_{i=1}^n \left( X_i \ln \left( \frac{\lambda_1}{\lambda_0} \right) - (\lambda_1 - \lambda_0) \right). + $$ + + \textbf{Критерий отношения правдоподобия} + + Для проверки $H_0$ против $H_1$ используется сумма наблюдений $T = \sum_{i=1}^n X_i$. Критерий принимает $H_1$, если: + + $$ + T > k, + $$ + + где $k$ определяется как: + + $$ + k = \text{qpois}(1 - \alpha, n\lambda_0). + $$ + + \textbf{Смена гипотез} + + Если поменять местами гипотезы, новая нулевая гипотеза $H_0 : \lambda = \lambda_1$, а альтернатива $H_1 : \lambda = \lambda_0$. В этом случае критерий принимает $H_0$, если: + + $$ + T < k', + $$ + + где $k'$ определяется как: + + $$ + k' = \text{qpois}(\alpha, n\lambda_1). + $$ + + Сумма наблюдений: $T_{obs} = 98$ + + Порог для $H_0: \lambda = 2.00$: $k = 121$ + + Порог для $H_0: \lambda = 4.00$: $k' = 172$ + + Проверка $H_0: \lambda = 2.00$ vs $H_1: \lambda = 4.00$: + + Не отклоняем $H_0: T_{obs} = 98 \leq 121$ + + Проверка $H_0: \lambda = 4.00$ vs $H_1: \lambda = 2.00$: + + Отклоняем $H_0: T_{obs} = 98 < 172$ + + \newpage + \section{Задание 2} + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/task2.png} + \end{figure} + + \subsection{Пункт a} + + \textbf{1. Вариационный ряд} + + Вариационный ряд: 0.0, 0.03, 0.06, 0.06, 0.07, 0.1, 0.11, 0.12, 0.12, 0.15, 0.17, 0.18, 0.24, 0.24, 0.29, 0.31, 0.36, 0.49, 0.49, 0.5, 0.53, 0.57, 0.59, 0.67, 0.85, 1.02, 1.11, 1.17, 1.31, 1.31, 2.37, 2.44, 2.58, 2.77, 2.98, 3.03, 3.13, 3.34, 3.57, 3.96, 4.55, 6.5, 6.72, 6.84, 8.33, 9.25, 11.4, 11.83, 14.94, 15.68 + + \textbf{2. Эмпирическая функция распределения (ЭФР)} + $$ + \hat{F}_n(x) = \frac{1}{n} \sum_{i=1}^{n} \text{\textbf{1}}_{\{X_i \leq x\}}, + $$ + где $n$ — объем выборки. + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/task2_1.png} + \end{figure} + + \newpage + \textbf{3. Гистограмма частот} + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/task2_2.png} + \end{figure} + + \newpage + \subsection{Пункт b} + + \textbf{1. Выборочное среднее (математическое ожидание)} + Выборочное среднее — оценка теоретического математического ожидания. + + $$ + \bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i = 2.79 + $$ + + \textbf{2. Выборочная дисперсия} + Несмещённая оценка дисперсии: + $$ + s^2 = \frac{1}{n-1} \sum_{i=1}^{n}(X_i-\bar{X})^2 = 15.59 + $$ + + Смещенная оценка дисперсии: + $$ + s^2_{\text{смещенная}} = \frac{1}{n} \sum_{i=1}^{n}(X_i - \bar{X})^2 = 15.28 + $$ + + где: + - $ n $ — общее количество наблюдений, + - $X_i$ — каждое отдельное наблюдение, + - $\bar{X}$ — среднее значение выборки. + + \textbf{3. Медиана} + Значение, разделяющее выборку на две равные части. + + $$ + \text{Медиана} = 0.94 + $$ + + \textbf{4. Ассиметрия} + $$ + Skewness = \frac{\frac{1}{n}\sum_{i=1}^{n}(X_i-\bar{X})^3}{s^3} = 1.85 + $$ + + \textbf{5. Эксцесс} + $$ + Kurtosis = \frac{\frac{1}{n}\sum_{i=1}^{n}(X_i-\bar{X})^4}{s^4} - 3 = 2.66 + $$ + + \textbf{6. Вероятность $P(X \in [0.00, 4.62])$} + Эмпирическая оценка вероятности: + $$ + P(X \in [c, d]) = \frac{\text{число элементов выборки} \in [c, d]}{n}. + $$ + + $$ + P(X \in [0.0, 4.62]): 0.82 + $$ + + \subsection{Пункт c} + \textbf{1. Оценка максимального правдоподобия (ОМП)} + + + Функция правдоподобия для показательного распределения: + $$ + L(\lambda) = \prod_{i=1}^{n} \lambda e^{-\lambda x_i} = \lambda^n e^{-\lambda \sum_{i=1}^{n} x_i} + $$ + Логарифмируя, получаем: + $$ + \ln L(\lambda) = n \ln \lambda - \lambda \sum_{i=1}^{n} x_i + $$ + Дифференцируя по $\lambda$ и приравнивая к нулю: + $$ + \frac{d}{d\lambda} \ln L(\lambda) = \frac{n}{\lambda} - \sum_{i=1}^{n} x_i = 0 + $$ + Отсюда получаем ОМП: + $$ + \hat{\lambda}{\text{ОМП}} = \frac{n}{\sum{i=1}^{n} x_i} = \frac{1}{\bar{X}} + $$ + + ОМП для $\lambda$: 0.3586 + + + \textbf{2. Оценка по методу моментов (ОММ)} + Для показательного распределения математическое ожидание равно $E[X] = \frac{1}{\lambda}$. Приравнивая теоретическое математическое ожидание к выборочному: + $$ + \frac{1}{\lambda} = \bar{X} \Rightarrow \hat{\lambda}{\text{ММ}} = \frac{1}{\bar{X}} + $$ + ОММ для $\lambda$: 0.3586 + + + \textbf{3. Смещение оценок} + Для показательного распределения ОМП и ОММ совпадают. Найдём смещение: + $$ + \text{Смещение}(\hat{\lambda}) = E[\hat{\lambda}] - \lambda + $$ + Для показательного распределения: + $$ + E[\hat{\lambda}_{\text{ОМП}}] = E\left[\frac{1}{\bar{X}}\right] \neq \frac{1}{E[\bar{X}]} = \lambda + $$ + Оценка $\hat{\lambda}_{\text{ОМП}}$ является смещённой, но асимптотически несмещённой. + + Смещение MLE: 0.0073 + + + \subsection{Пункт d} + + Для построения асимптотического доверительного интервала используем тот факт, что ОМП асимптотически нормальна с дисперсией: + $$ + \text{Var}(\hat{\lambda}) = \frac{\lambda^2}{n} + $$ + Доверительный интервал уровня значимости $\alpha_2$ имеет вид: + $$ + \hat{\lambda} \pm z_{1-\alpha_2/2} \cdot \frac{\hat{\lambda}}{\sqrt{n}} + $$ + где $z_{1-\alpha_2/2}$ — квантиль стандартного нормального распределения. + + Квантиль $z_{1-\alpha_2/2} = 1.6449$ + + Доверительный интервал (90.0\%): (0.2752, 0.4420) + + \subsection{Пункт e} + Критерий Колмогорова основан на статистике: + $$ + D_n = \sup_x |F_n(x) - F(x)| + $$ + где $F_n(x)$ — эмпирическая функция распределения, $F(x)$ — теоретическая функция распределения. + Для показательного распределения с параметром $\lambda_0$: + $$ + F(x) = 1 - e^{-\lambda_0 x}, \quad x \geq 0 + $$ + + Критерий Колмогорова-Смирнова: + + Статистика $D_n$: 0.2831, Критическое значение: 0.1725 + + P-value: 0.0005 + + Гипотеза отвергается + + \subsection{Пункт f} + Критерий $\chi^2$ основан на сравнении наблюдаемых и ожидаемых частот в интервалах: + $$ + \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} + $$ + где $O_i$ — наблюдаемая частота в $i$-м интервале, $E_i$ — ожидаемая частота. + + $\chi^2$ статистика: 14.4669 + + Критическое значение ($\alpha=0.1$): 6.2514 + + p-значение: 0.002334 + + Степени свободы: 3 + + Гипотеза отвергается на уровне 0.1 + + + \subsection{Пункт g} + Критерий $\chi^2$ для проверки сложной гипотезы + + При проверке сложной гипотезы параметр $\lambda$ оценивается по выборке: + Оценка $\lambda$: 0.3586 + + Критерий $\chi^2$ для сложной гипотезы: + + Статистика $\chi^2$: 10.9186 + + Критическое значение ($\alpha=0.1$): 4.6052 + + p-значение: 0.0043 + + Степени свободы: 2 + + Гипотеза отвергается на уровне 0.1 + + Таблица частот: + + [0.00, 1.40): O=30, E=19.74 + + [1.40, 2.80): O=4, E=11.95 + + [2.80, 4.20): O=6, E=7.23 + + [4.20, 16.80): O=10, E=10.97 + + \subsection{Пункт h} + Для проверки простой гипотезы $H_0: \lambda = \lambda_0$ против альтернативы $H_1: \lambda = \lambda_1$ наиболее мощный критерий основан на отношении правдоподобия: + $$ + \Lambda = \frac{L(\lambda_0)}{L(\lambda_1)} = \frac{\lambda_0^n e^{-\lambda_0 \sum_{i=1}^{n} x_i}}{\lambda_1^n e^{-\lambda_1 \sum_{i=1}^{n} x_i}} = \left(\frac{\lambda_0}{\lambda_1}\right)^n e^{-(\lambda_0-\lambda_1) \sum_{i=1}^{n} x_i} + $$ + Логарифмируя: + $$ + \ln \Lambda = n \ln\left(\frac{\lambda_0}{\lambda_1}\right) - (\lambda_0-\lambda_1) \sum_{i=1}^{n} x_i + $$ + Критическая область имеет вид $\ln \Lambda < c$, где $c$ определяется уровнем значимости $\alpha_2$. + + Критическая область: $sum \, data > 179.54$ + + Сумма данных: 139.43 + + Решение: Не отвергаем $H_0$ + + При замене гипотез местами: + + Критическая область: $sum \, data < 294.14$ + + Решение: Отвергаем $H_0$ +\end{document} \ No newline at end of file diff --git a/idz3/ИДЗ 3_1 Артём.ipynb b/idz3/ИДЗ 3_1 Артём.ipynb new file mode 100644 index 0000000..947b650 --- /dev/null +++ b/idz3/ИДЗ 3_1 Артём.ipynb @@ -0,0 +1,1631 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "23f67692", + "metadata": {}, + "source": [ + "Вар. 27 (513020125)\n", + "1. В результате эксперимента получены данные, приведенные в таблице 1. \n", + "a) Построить вариационный ряд, эмпирическую функцию распределения и гистограмму частот. \n", + "b) Вычислить выборочные аналоги следующих числовых характеристик: \n", + "(i) математического ожидания, (ii) дисперсии, (iii) медианы, (iv) асимметрии, (v) эксцесса, \n", + "(vi) вероятности P(X ∈ [a, b]). \n", + "c) В предположении, что исходные наблюдения являются выборкой из распределения Пуассона, построить оценку \n", + "максимального правдоподобия параметра λ, а также оценку λ по методу моментов. Найти смещение оценок. \n", + "d) Построить асимптотический доверительный интервал уровня значимости α1 для параметра λ на базе оценки \n", + "максимального правдоподобия. \n", + "e) Используя гистограмму частот, построить критерий значимости χ2 проверки простой гипотезы согласия \n", + "с распределением Пуассона с параметром λ0. Проверить гипотезу на уровне значимости α1. Вычислить \n", + "наибольшее значение уровня значимости, на котором еще нет оснований отвергнуть данную гипотезу. \n", + "f) Построить критерий значимости χ2 проверки сложной гипотезы согласия с распределением Пуассона. Проверить \n", + "гипотезу на уровне значимости α1. Вычислить наибольшее значение уровня значимости, на котором еще нет \n", + "оснований отвергнуть данную гипотезу. \n", + "g) Построить наиболее мощный критерий проверки простой гипотезы пуассоновости с параметром λ = λ0 при \n", + "альтернативе пуассоновости с параметром λ = λ1. Проверить гипотезу на уровне значимости α1. Что получится, \n", + "если поменять местами основную и альтернативную гипотезы? \n", + "\n", + "Таблица 1 α1 = 0.02; a = 0.00; b = 2.49; λ0 = 2.00; λ1 = 4.00. \n", + "0 1 2 0 0 7 1 0 2 1 0 1 2 2 0 0 1 8 0 0 14 4 3 0 0 3 0 6 2 2 1 0 0 2 0 4 0 0 3 3 1 1 0 0 6 8 1 \n", + "4 1 1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "57a523dd", + "metadata": {}, + "outputs": [], + "source": [ + "# Данные\n", + "import numpy as np\n", + "data = np.array([0, 1, 2, 0, 0, 7, 1, 0, 2, 1, 0, 1, 2, 2, 0, 0, 1, 8, 0, 0, 14, 4, 3, 0, 0, 3, 0, 6, 2, 2, 1, 0, 0,\n", + " 2, 0, 4, 0, 0, 3, 3, 1, 1, 0, 0, 6, 8, 1, 4, 1, 1])\n", + "n = len(data)\n", + "alpha = 0.02\n", + "a = 0.00\n", + "b = 2.49\n", + "lambda0 = 2.00\n", + "lambda1 = 4.00\n" + ] + }, + { + "cell_type": "markdown", + "id": "8b7561a0", + "metadata": {}, + "source": [ + "## Пункт a)" + ] + }, + { + "cell_type": "markdown", + "id": "b046ad70", + "metadata": {}, + "source": [ + "### 1. Вариационный ряд" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "db7e1a67", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Вариационный ряд: 0^(19), 1^(11), 2^(7), 3^(4), 4^(3), 6^(2), 7^(1), 8^(2), 14^(1)\n", + "[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1\n", + " 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 4 4 4 6 6 7 8\n", + " 8 14]\n" + ] + } + ], + "source": [ + "# Получение уникальных значений и их частот\n", + "unique_values, counts = np.unique(data, return_counts=True)\n", + "\n", + "# Форматирование вариационного ряда\n", + "variational_series = [f\"{value}^({count})\" for value, count in zip(unique_values, counts)]\n", + "print(\"Вариационный ряд:\", \", \".join(variational_series))\n", + "sorted_data = np.sort(data)\n", + "print(sorted_data)" + ] + }, + { + "cell_type": "markdown", + "id": "93c7e45f", + "metadata": {}, + "source": [ + "### 2. Эмпирическая функция распределения (ЭФР)\n", + "$$\n", + "\\hat{F}_n(x) = \\frac{1}{n} \\sum_{i=1}^{n} \\text{\\textbf{1}}_{\\{X_i \\leq x\\}},\n", + "$$\n", + "где $n$ — объем выборки." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "261ad18a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfHZJREFUeJzt3QmYFNW5//F3hgEGFAVBQBFFcQ/iFsA1JmogalySm6iJibtmUeOSGDW5LolJzKLG3Gjct8QkavzH4BUUVKIQQSGI6KgooEFEZBFG1oFZ+v/8DrfGnqZnehp56Toz38/zNF309PKr01XVfeq8VV2WyWQyBgAAAABoVnnzfwIAAAAACB0nAAAAACiAjhMAAAAAFEDHCQAAAAAKoOMEAAAAAAXQcQIAAACAAug4AQAAAEABdJwAAAAAoAA6TgAAAABQAB0nAAAAACiAjhOAjaKqqsrOPfdc23nnna1z58625ZZb2gEHHGC/+93vbM2aNaWOhxTYfPPN7fTTTy91DAAANkjFhj0MAD62fPly22effWzbbbe1k046yXbbbTdbvXq1TZgwwS655BL7y1/+Yk888YRttdVWpY4KAACwQeg4AfjEGhoa7KKLLrKf//znYbQpccEFF4QO0zHHHGNnnnmm/eMf/yhpTgAAgA1FqR6AT0xleddff32TTlPiqKOOshNPPNFGjhxpU6ZMabx9wIABVlZWFjpcuUaMGBH+9sUvfrHxtmeffTbc1twluwTsvvvuC7f95z//adK5Gzx4cLhdf0/ocSohe/vtt8PrbrbZZmHk7Kc//allMpnG++m5ch8r55133nqvr2nNXy7d75prrmly27x580Knsk+fPqH9PvWpT9k999yz3mNramrCY3fddVerrKy0bbbZxr785S/b7Nmzm82nkcD999/fdtxxR5s/f37j7XqvDjroIOvZs6d16dIl3OeRRx5Z7zVXrFhh3//+922nnXayjh07NmnvxYsXW0vU3pdeemlYNtQWTz75ZOPfLrvsMuvWrZvtsssuoWOduPfee8NzT5s2bb3n+8UvfmEdOnQI7SWf/exnbdCgQevdT/OW+97r9XNLBFVWqnbUcpV9v+xlLnH++eeH58ym9yL3NrVX3759w+3Zzyu33npryNu1a9cm7Ziv3fO9zowZM8J6tMUWW4T37cILLwzLRDa13+GHH269e/cOy9Kee+4ZXjcftfthhx0W3gc955AhQ8LIcELt29L6ltu+arexY8eGkWe1q17773//+3qvW11dHdb5/v37h4wq7f3Vr34VlpdcyXqce8m3bql9vvKVr4RRbb3+pz/9aXvsscfyzntz85a7br/44ov2hS98ISzDet/UXs8//3ze9yd3ffj3v/+dd1uTm33u3LlhHcxt07q6OvvZz34W1ne1U3ZOPTeA0qDjBMCdOgaS+0VGX3D+/Oc/W21tbeNt7733nj3zzDPhb/l873vfsz/96U9NLvk6bLl0v1dffTXv3+rr68MXJHVefv3rX4eOxNVXXx0uLZk1a5bdeeedtqEWLFgQjgN7+umnw5dzHQ+mL5JnnXWW3XTTTU3y6YvpT37yk5DthhtuCF+cP/roo3BsWT5q0//6r/+yd99918aMGRM6Wgm9zr777hs6h+qQVFRU2Fe/+lUbNWpUk+dQx+fGG28MX8bvuOOO0IZf+tKXWjVv+jKsTszxxx9vF198cbisXbs2vMZLL70URif1hVGdv3feeSc8Rl98dZuWiVy6TV94+/XrZ5+U3te7777bHnjggfCcG4veF72nuR566CH77ne/a1tvvbX99re/De34ox/9qKjnVqdJHaXrrrvOjj76aPuf//mf0PnLpk7SDjvsEJ5bWdQ50evecsstTe6nL/MaBV6yZIldccUV9stf/jJ0eLI7t7Lddtutt6597Wtfy5tv5syZoUxXO0qUMVmmnnrqqcb7rFq1KnQ+1O6nnnpqmIeDDz44ZFBJb3O0nCavr5y5XnvttbAevfHGG3b55ZeHedcOkBNOOMEeffTRvM+5++67Nz6n3pNc48aNs8985jO2bNmysLxoPVGnT+vC5MmTbWO56qqr1usAi+bhyiuvDJ3tP/zhDyFn7vsNoAQyALCRrFy5MrNo0aL1LjNmzNDQTebLX/5y43132GGHzOc///lMr169Mo888kjj7ddee23moIMOCn8/5phjGm//5z//GZ7jb3/723qvu9lmm2VOO+20xv/fe++94b7vvPNO+H9NTU1m++23zxx11FHhdv09ocfptgsuuKDxtoaGhvDanTp1CvlFz5X72BNPPDEzaNCgTP/+/Zu8/hlnnBFeL5cef/XVVzf+/6yzzspss802mcWLFze538knn5zZcsstM6tWrQr/v+eee8Jjb7zxxvWeU1lz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0JZEV6p3yy232IABA8IpFIcNG2aTJ09u8f5/+9vfbPfddw/332uvvcLBcNiUMmHUKQbKqRWCvD7I64u8vsjri7y+yOuLvEhlx+mhhx6ySy65xK6++mp76aWXbO+997YRI0bYwoUL895/4sSJ9rWvfc3OOussmzZtmp1wwgnhUlVVtcmzt1exlepNmDCBvE7I64u8vsjri7y+yOuLvEhlqZ5GmIYMGWI333xz+H9DQ4P179/fLrjgArv88svXu/9JJ51kK1eutMcff7zxtgMOOMD22Wcfu+2226Is1Vu5svm/dehgVlnZuvuWl5t16bJh9121Sh2i/PfVyVm6djX74x/NTjuNUj0AAAC0DcX0DUr6S1lr1661qVOn2hVXXNF4W3l5uR155JE2adKkvI/R7RqhyqYRqn/84x95779mzZpwyW4cmTdvXuiA1dfXh/9vttlmobHUU1+yZEm41ukcO3ToEKb79esXsi1YsCD8X9PJ9VZbbRVO/6hfbF6xYkW4XY/T4/X33r17hw7h+++/H24Xva4es/XWW9vmm1dYjx5LrLLy45zrsnazww7b3B5+eGXIpPsffLB+GbrMamsrbPHircP9+vadHzo3++6bsbvuKgvP3atXLxswoNJqa6uta9fVTZ53xYrNbNddu9mECTVWXV0d8p5wQgebP1+PLbeFC/uE+/XuvcA6dGiwHXc0e/DBOrvxxg7WqVNP69Chky1dWm2rV68Or5XMU6dOncLr6n1VOymv5lsXTffp0ydML126NNwnuV3Xavtu3bqFhVbvkW5P3puuXbuGBVr///DDDxtvT96bvn37WseOHcMoZW1tbZP3Rs+b/JJ28t7odl30/iiTrufOndvkvdG03pt17bWicV6TvMrUo0ePcPvixYubzGvnzp1DO2haeZVJ+yeSeerZs6d16dIltIOWQb1W9nKojLpWW2Tn1X223XbbMD1//vzw/NnzqufVc+Uuh5Isa3oOPVb/V6ZknpJlVG2vx2e/N3pf1I56TmVO5kOPT36hXH/PfW80refVcrFo0aKwHibvmfLqPdXjtSzkzqueW++rpt97773G9yuZJ7Wv/q/2W7VqVeN86HFqf7WF5kOvm7scallRXi37em+S2/Ucek/V9vqb5jf3vdnU2wj9TXnVVppXLW/Z740yde/ePfwt2UYk86q21euqTdQOue+N2lD30fum503mI3k/tYyrfZJtRL73RtvRZLudPFYZ1I6a12Qbm9ZtRJJd64Zu1/OmeRuh++gx22yzTWM7pXkbob9p3rbffvvQhvmWwzRtI3Qf3bbTTjuFjFqn0ryNUDYtX8qr+y1fvjzV2wi9j3ovdGiGcmg6zdsIXSvfdtttF9ZHLZ9p3kYol15H86J20P/Tvo3IZDKhHbSMNrccbopthJa11ippx0kLihpFC102/X/GjBl5H/PBBx/kvb9uz+e6666zn/zkJ+vd/sc//jE0dkLHSu24446hQfMdM3X66afbDjvsYH/5y18aO1+JL33pS2Eh0oL+3HPPNfmbFpbvfOc7YT7vueee9Z73W9/6lro+9oUvjLHddnuryd/GjBluZgeGEsZx48aF2zTiI/Pn97Xbb9djzc4++26rqFi3oN1xx7q/f/7znzezg+yww8bbfvtNa/K8EyYcbPPmHWDTp1fZmDFjwm3HHfdxZ+3GG9d1TL/xjT/bFlssD9OK/qUv6eQQ37TevVfZpEnv2pQpU5o8rzbAGinUAvqnP/2pyd+0kJ577rmhpHLmzJnrvV+DBw8O7Th+/Pgwv9l23XXX8P5ohckeaUyceOKJtscee9jDDz8cNjDZhg8fHlY2rVzPPvtsk7/pA0WZtDLne2/OOeecMI9671599dUmf9MH4Nlnn22vvfaajRo1qsnftCE8/vjjwwfG888/Hz4csh1yyCF2xBFHhOVs1qxZTf623377hWut0Do7Tm4bnnHGGeG1H3jggfWe9+STTw7Pp+VQr5tN83/eeeeFDVa+ef3ud78b2l3L8Zw5c5r8bbfddgvPrZ0WKpXNpi9E2pBqw/bEE0+s97zHHntsmKe///3v673nhx9+eOMHwVNPPdXkb/pAUPtqmbr33nvDhjfbmWeeGfJqQ5i7vGh78O1vf9tmz55tjzzyyHrPO2jQoPDeT58+PbRHNo1+H3300fb000+H9zZbqbYR++67b3jv9ZxvvdV0G6E8p556apNtREIfGFrONI9az5MPo4S2EQcddJA99thj9u677zb528EHHxw+zNS+yTYioQ8wlUrrPdd2VB9Y2bQuaj51efHFF1O/jdCXOH0xUt5nnnkm9dsILd9aJvSBn7vOpXEboeVbOzf15TC3HdK4jdBrffOb37T//Oc/9vLLL0exjVA7KGss24hTTjkltF0s2wh9j9Dyq/mKYRuh9UnvrdadGLYRO+ywQ6gcU6eqVNuI3EypLdXTnhO9eQp84IEHNt7+wx/+MGw4clco0YJ7//33h+OcEn/4wx9C5yhfjzHfiJNKAV9//fXQw03DiNOKFRlbuXL9PUVdu25mW22ljB/vKVq5ssEyGe2NqLTu3dftKfrww3U9dJXfde368Z6i+vpKW7r04z1F9fXaw1pm3bptYZtt1tUqKj7eU7R2rXri63rovXuv66HPn79uT1GHDuVWUbFunrQ3Qn9L+56i5L3Re6wNQNr3FCXzpDZIRp3YU7TxR5yURe2g6bTvTc7eRmi+0r43OZknthFsI9hGsI1gG8E2oiGibYSWNZ10rjWleiXtOGlG1WDa46MTPCROO+20sCKOHDlyvcdoD7dK9S666KLG23RiCZXqaQ9yjMc4xUQrgFZwLXBaCNOOvL7I64u8vsjri7y+yOuLvO3HslhOR64e5P77799k6FNvvP6fPQKVTbfnDpVqeK65+2Pj0vujYfLcIc+0Iq8v8voiry/y+iKvL/L6Ii9SeVY9nY5cI0y33367DR061G666aZQY6pjnDT8qdpcDW/rWCVRWd9hhx1mv/zlL+2YY46xBx980H7xi1+EOkUdu1AII04AAAAAohpxSk4vfv3119tVV10VTimuAxyffPLJxhNA6IBE1VImdKCiDqy84447wm8+qcxPZXqt6TThk9OeDNUsx7JHg7y+yOuLvL7I64u8vsjri7xIZcdJzj///HAGDh30pRNC6LedEjoT2n333dfk/l/96lftzTffDPfXsKTOcINNQyukzkQUy4pJXl/k9UVeX+T1RV5f5PVFXqSyVG9To1QPAAAAQHSleoiL9mRodDCWPRrk9UVeX+T1RV5f5PVFXl/kRT50nNCma2jJ64u8vsjri7y+yOuLvL7Ii3wo1QMAAADQLlGqBzf6FedZs2Y1/rJz2pHXF3l9kdcXeX2R1xd5fZEX+dBxQlE0QLl06dJwHQPy+iKvL/L6Iq8v8voiry/yIh9K9QAAAAC0S8so1YMXDQHPmDEjmqFg8voiry/y+iKvL/L6Iq8v8iIfOk4o2urVqy0m5PVFXl/k9UVeX+T1RV5f5EUuSvUAAAAAtEvLKNWDFw0BV1VVRTMUTF5f5PVFXl/k9UVeX+T1RV7kQ8cJAAAAAAqgVA8AAABAu7SsiL5BhbUzST9RjYQNHwoeNGiQdejQwdKOvL7I64u8vsjri7y+yOuLvO3Hsv/rE7RmLKnddZyWL18ervv371/qKAAAAABS0kfQyFNL2l2pXkNDg73//vvWrVs3KysrK3WcKHvl6nTOnTs3ilJH8voiry/y+iKvL/L6Iq8v8rYfmUwmdJq23XZbKy9v+fQP7W7ESQ2y3XbblTpG9LRSxrRiktcXeX2R1xd5fZHXF3l9kbd92LLASFOCs+oBAAAAQAF0nAAAAACgADpOKErnzp3t6quvDtcxIK8v8voiry/y+iKvL/L6Ii/yaXcnhwAAAACAYjHiBAAAAAAF0HECAAAAgALoOAEAAABAAXScAAAAAKAAOk5otVtuucUGDBhglZWVNmzYMJs8ebKl1fjx4+3YY48NvwJdVlZm//jHPyytrrvuOhsyZIh169bNevfubSeccIK9+eablla33nqrDR48uPFH9g488EB74oknLBa//OUvwzJx0UUXWRpdc801IV/2Zffdd7c0mzdvnn3jG9+wnj17WpcuXWyvvfayf//735ZW2o7ltrEu5513nqVNfX29XXnllbbjjjuGth04cKBde+214Zfu02r58uVh/dphhx1C5oMOOsimTJlisXw+qG2vuuoq22abbUL+I4880mbOnJnavH//+99t+PDhYf3T319++WUrpZby1tbW2mWXXRa2EZtttlm4z6mnnmrvv/9+KvMm22Rtg5W3R48eYXl48cUXU5s327e//e1wn5tuummTZmzL6DihVR566CG75JJLwqkuX3rpJdt7771txIgRtnDhQkujlStXhozq7KXdc889F76wvfDCC/bUU0+FDxZ9CGoe0mi77bYLnY+pU6eGL8eHH364HX/88fbaa69Z2unL2+233x46fmn2qU99yubPn994+de//mVptXTpUjv44IOtY8eOoQP9+uuv2w033BC+YKR5OchuX6138tWvftXS5le/+lXYWXHzzTfbG2+8Ef7/61//2n7/+99bWp199tmhTf/0pz/Zq6++GrZn+rKpDnYMnw9q3//5n/+x2267LXxB1hdmfd7V1NRYGvPq74ccckhYNtKgpbyrVq0K3yG0M0DX6vRpR+Fxxx1npVKofXfdddew/mlZ1rZYO160TC9atMjS/P3m0UcfDd8r1MHCRqTTkQOFDB06NHPeeec1/r++vj6z7bbbZq67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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from statsmodels.distributions.empirical_distribution import ECDF\n", + "\n", + "ecdf = ECDF(data)\n", + "x = np.linspace(min(data) - 1, max(data) + 1, 1000)\n", + "y = ecdf(x)\n", + "\n", + "# Находим точки, где F(x) переходит от 0 к основному росту и от роста к 1\n", + "x_left = x[y == 0][-1] # Последняя точка, где F(x)=0\n", + "x_right = x[y == 1][0] # Первая точка, где F(x)=1\n", + "\n", + "# Разделяем данные на 3 части\n", + "mask_left = (x < x_left) # F(x) = 0\n", + "mask_mid = (x >= x_left) & (x <= x_right) # Основной рост\n", + "mask_right = (x > x_right) # F(x) = 1\n", + "\n", + "# Рисуем каждую часть своим стилем\n", + "plt.figure(figsize=(10, 6))\n", + "plt.step(x[mask_left], y[mask_left], '--', color='blue', where='post', label='F(x)=0') # Пунктир слева\n", + "plt.step(x[mask_mid], y[mask_mid], '-', color='blue', where='post', label='ЭФР') # Сплошная основная часть\n", + "plt.step(x[mask_right], y[mask_right], '--', color='blue', where='post', label='F(x)=1') # Пунктир справа\n", + "\n", + "# Настройки графика\n", + "plt.title(\"Эмпирическая функция распределения\")\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"F(x)\")\n", + "# Добавление пунктирных линий для F(x) = 0 и F(x) = 1\n", + "plt.axhline(y=0, color='gray', linestyle='--', linewidth=1, label='F(x) = 0')\n", + "plt.axhline(y=1, color='gray', linestyle='--', linewidth=1, label='F(x) = 1')\n", + "\n", + "plt.grid(True, linestyle=':')\n", + "plt.xticks(np.arange(np.floor(min(data)), np.ceil(max(data)) + 1))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "639c228f", + "metadata": {}, + "source": [ + "### 3. Гистограмма частот" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "09541433", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(data, bins=np.arange(min(data)-0.5, max(data)+1.5, 1), edgecolor='black', alpha=0.7)\n", + "plt.title(\"Гистограмма частот\")\n", + "plt.xlabel(\"Значения\")\n", + "plt.ylabel(\"Частота\")\n", + "plt.xticks(np.arange(min(data), max(data)+1))\n", + "plt.grid(axis='y')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "44f7e836", + "metadata": {}, + "source": [ + "## Пункт b)" + ] + }, + { + "cell_type": "markdown", + "id": "c32cd292", + "metadata": {}, + "source": [ + "### (i) Выборочное среднее (математическое ожидание)\n", + "Выборочное среднее — оценка теоретического математического ожидания.\n", + "$$\n", + "\\bar{X} = \\frac{1}{n} \\sum_{i=1}^{n} X_i.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ead66cb6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Выборочное среднее: 1.96\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "mean = np.mean(data)\n", + "print(f\"Выборочное среднее: {mean:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "83c9665b", + "metadata": {}, + "source": [ + "### (ii) Выборочная дисперсия\n", + "Несмещённая оценка дисперсии:\n", + "$$\n", + "s^2 = \\frac{1}{n-1} \\sum_{i=1}^{n}(X_i-\\bar{X})^2.\n", + "$$\n", + "\n", + "Смещенная оценка дисперсии:\n", + "$$\n", + "s^2_{\\text{смещенная}} = \\frac{1}{n} \\sum_{i=1}^{n}(X_i - \\bar{X})^2\n", + "$$\n", + "\n", + "где:\n", + "- $ n $ — общее количество наблюдений,\n", + "- $X_i$ — каждое отдельное наблюдение,\n", + "- $\\bar{X}$ — среднее значение выборки." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a24ea7eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Несмещённая оценка дисперсии: 7.67\n", + "Смещённая оценка дисперсии: 7.52\n" + ] + } + ], + "source": [ + "variance = np.var(data, ddof=1)\n", + "print(f\"Несмещённая оценка дисперсии: {variance:.2f}\")\n", + "print(f\"Смещённая оценка дисперсии: {(np.var(data, ddof=0)):.2f}\")\n", + "# print(sum((x - mean) ** 2 for x in data) / (n - 1))" + ] + }, + { + "cell_type": "markdown", + "id": "bd8ee128", + "metadata": {}, + "source": [ + "### (iii) Медиана\n", + "Значение, разделяющее выборку на две равные части." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e8490052", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Медиана: 1.0\n" + ] + } + ], + "source": [ + "median = np.median(data)\n", + "print(f\"Медиана: {median}\")" + ] + }, + { + "cell_type": "markdown", + "id": "34384b8f", + "metadata": {}, + "source": [ + "### (iv) Ассиметрия\n", + "$$\n", + "Skewness = \\frac{\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\bar{X})^3}{s^3}.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "cc21a5b6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Асимметрия: 2.25\n" + ] + } + ], + "source": [ + "from scipy.stats import skew\n", + "skewness = skew(data)\n", + "print(f\"Асимметрия: {skewness:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "ddd4b8a7", + "metadata": {}, + "source": [ + "### (v) Эксцесс\n", + "$$\n", + "Kurtosis = \\frac{\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\bar{X})^4}{s^4} - 3.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "118d475e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Эксцесс: 5.92\n" + ] + } + ], + "source": [ + "from scipy.stats import kurtosis\n", + "excess_kurtosis = kurtosis(data)\n", + "print(f\"Эксцесс: {excess_kurtosis:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "93fd7cc5", + "metadata": {}, + "source": [ + "### (vi) Вероятность $P(X \\in [0.00, 2.49])$\n", + "$$\n", + "P(X \\in [a, b]) = \\frac{\\text{число элементов выборки} \\in [a, b]}{n}.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "08ea631c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "P(X ∈ [0.0, 2.49]): 0.74\n" + ] + } + ], + "source": [ + "count = np.sum((data >= a) & (data <= b))\n", + "probability = count / len(data)\n", + "print(f\"P(X ∈ [{a}, {b}]): {probability:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "26424ded", + "metadata": {}, + "source": [ + "## Пункт c)" + ] + }, + { + "cell_type": "markdown", + "id": "f6b509ff", + "metadata": {}, + "source": [ + "### 1. Оценка максимального правдоподобия (ОМП)" + ] + }, + { + "cell_type": "markdown", + "id": "c40e8461", + "metadata": {}, + "source": [ + "Функция правдоподобия для Пуассона:\n", + "$$\n", + "L(λ) = \\prod_{i=1}^{n}\\frac{λ^{X_i}e^{-λ}}{X_i!}.\n", + "$$\n", + "\n", + "Логарифмируя, получаем:\n", + "\n", + "$$\n", + "\\ln L(\\lambda) = \\sum_{i=1}^{n} \\left( X_i \\ln \\lambda - \\lambda - \\ln X_i! \\right).\n", + "$$\n", + "\n", + "Дифференцируя по $\\lambda$, приравнивая к нулю:\n", + "\n", + "$$\n", + "\\frac{d}{d\\lambda} \\ln L(\\lambda) = \\frac{1}{\\lambda} \\sum_{i=1}^{n} X_i - n = 0 \n", + "\\Longrightarrow \\hat{\\lambda}_{\\text{ОМП}} = \\frac{1}{n} \\sum_{i=1}^{n} X_i = \\bar{X}.\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7fa556a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ОМП для λ: 1.96\n" + ] + } + ], + "source": [ + "lambda_ml = np.mean(data)\n", + "print(f\"ОМП для λ: {lambda_ml:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "5a5e2f27", + "metadata": {}, + "source": [ + "\n", + "**Смещение ОМП:** \n", + "В случае распределения Пуассона оценка максимального правдоподобия (ОМП) параметра $\\lambda$ совпадает с выборочным средним:\n", + "\n", + "$$\n", + "\\hat{\\lambda}_{\\text{ОМП}} = \\bar{x} = \\frac{1}{n} \\sum_{i=1}^{n} x_i.\n", + "$$\n", + "\n", + "Найдём математическое ожидание этой оценки:\n", + "\n", + "$$\n", + "\\mathbb{E}[\\hat{\\lambda}_{\\text{ОМП}}] = \\mathbb{E} \\left[ \\frac{1}{n} \\sum_{i=1}^{n} x_i \\right] = \\frac{1}{n} \\sum_{i=1}^{n} \\mathbb{E}[x_i].\n", + "$$\n", + "\n", + "Так как для распределения Пуассона $\\mathbb{E}[x_i] = \\lambda$, то:\n", + "\n", + "$$\n", + "\\mathbb{E}[\\hat{\\lambda}_{\\text{ОМП}}] = \\frac{1}{n} \\cdot n \\lambda = \\lambda.\n", + "$$\n", + "\n", + "Отсюда следует:\n", + "\n", + "$$\n", + "\\text{Смещение}(\\hat{\\lambda}_{\\text{ОМП}}) = \\lambda - \\lambda = 0.\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "id": "545f29e7", + "metadata": {}, + "source": [ + "### 2. Оценка по методу моментов (ОММ)\n", + "Приравниваем теоретическое математическое ожидание к выборочному:\n", + "$$\n", + "E[X]=λ \\Longrightarrow \\hat{λ}_{\\text{MM}} = \\bar{X}. \\\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "96484e1c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ОММ для λ: 1.96\n" + ] + } + ], + "source": [ + "lambda_mm = np.mean(data)\n", + "print(f\"ОММ для λ: {lambda_mm:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "525cff2b", + "metadata": {}, + "source": [ + "\n", + "**Смещение ОММ:** \n", + "Метод моментов приводит к той же оценке:\n", + "\n", + "$$\n", + "\\hat{\\lambda}_{\\text{ММ}} = \\bar{x}.\n", + "$$\n", + "\n", + "Математическое ожидание:\n", + "\n", + "$$\n", + "\\mathbb{E}[\\hat{\\lambda}_{\\text{ММ}}] = \\lambda \\\n", + "$$\n", + "\n", + "Смещение этой оценки:\n", + "\n", + "$$\n", + "\\text{Смещение}(\\hat{\\lambda}_{\\text{ММ}}) = \\lambda - \\lambda = 0.\n", + "$$\n", + "\n", + "Таким образом, обе оценки ($\\hat{\\lambda}_{\\text{ОМП}}$ и $\\hat{\\lambda}_{\\text{ММ}}$) являются несмещёнными.\n" + ] + }, + { + "cell_type": "markdown", + "id": "289e0726", + "metadata": {}, + "source": [ + "# d) Aсимптотический доверительный интервал уровня значимости α1=0.02 для параметра λ на базе оценки максимального правдоподобия\n", + "\n", + "## Шаги построения\n", + "\n", + "### 1. Оценка $\\hat{\\lambda}$\n", + "ОМП параметра $\\lambda$ равна выборочному среднему:\n", + "$$ \\hat{\\lambda} = \\bar{x} $$\n", + "\n", + "### 2. Стандартная ошибка\n", + "Для распределения Пуассона дисперсия равна $\\lambda$:\n", + "$$ SE = \\sqrt{\\frac{\\hat{\\lambda}}{n}} $$\n", + "\n", + "### 3. Квантиль нормального распределения\n", + "Для уровня значимости $\\alpha_{1} = 0.02$:\n", + "$$ z_{1-\\alpha/2} = z_{0.99} $$\n", + "\n", + "### 4. Границы интервала\n", + "$$ \\hat{\\lambda} \\pm z_{0.99} \\cdot SE $$\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "7f3db200", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "z = 2.326\n", + "se = 0.198\n", + "Доверительный интервал (98%): (1.499, 2.421)\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from scipy.stats import norm\n", + "\n", + "z = norm.ppf(1 - alpha/2)\n", + "se = np.sqrt(lambda_ml / len(data))\n", + "lower = lambda_ml - z * se\n", + "upper = lambda_ml + z * se\n", + "\n", + "print(f\"z = {z:.3f}\")\n", + "print(f\"se = {se:.3f}\")\n", + "print(f\"Доверительный интервал (98%): ({lower:.3f}, {upper:.3f})\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "4604ecf9", + "metadata": {}, + "source": [ + "## Пункт e) Критерий $\\chi^2$ для проверки гипотезы согласия с распределением Пуассона ($λ0 = 2.00$)\n", + "Критерий $\\chi^2$ проверяет, насколько эмпирические частоты $O_i$ соответствуют теоретическим частотам $E_i$ при заданном распределении.\n", + "\n", + "1. **Расчёт наблюдаемых и теоретических частот:** \n", + " $O_i$ - наблюдаемые частоты для каждого интервала,\n", + "\n", + " $$\n", + " E_i = n \\cdot P(X = k\\ |\\ λ = λ_0),\n", + " $$\n", + " где $P(X=k)$ — вероятность по распределению Пуассона.\n", + "\n", + "2. **Группировка данных:** Объединить значения так, чтобы $E_i \\geq 5$.\n", + "\n", + "3. **Статистика $\\chi^2$:**\n", + " $$\n", + " \\chi^2 = \\sum_{i=1}^{k}\\frac{(O_i - E_i)^2}{E_i}.\n", + " $$\n", + "4. **Степени свободы:**\n", + " $$\n", + " df = k - 1 - m,\n", + " $$\n", + " где $k$ — число категорий, $m=0$. \n", + "\n", + "**Критическое значение:** Сравнение с $χ_{\\text{крит}}^2(df, α)$. \n", + "**p-значение:** Вероятность $P(χ^2 \\geq χ_{\\text{набл}}^2$)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "d881725f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Таблица до группировки категорий:\n", + " Значение k Наблюдаемая частота (O_i) Теоретическая вероятность (P(X=k)) \\\n", + "0 0 19 0.1353 \n", + "1 1 11 0.2707 \n", + "2 2 7 0.2707 \n", + "3 3 4 0.1804 \n", + "4 4 3 0.0902 \n", + "5 6 2 0.0120 \n", + "6 7 1 0.0034 \n", + "7 8 2 0.0009 \n", + "8 14 1 0.0000 \n", + "\n", + " Теоретическая частота (E_i) \n", + "0 6.767 \n", + "1 13.534 \n", + "2 13.534 \n", + "3 9.022 \n", + "4 4.511 \n", + "5 0.601 \n", + "6 0.172 \n", + "7 0.043 \n", + "8 0.000 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from scipy.stats import poisson, chi2\n", + "\n", + "# Теоретические вероятности для каждого k\n", + "probs_individual = [poisson.pmf(k, lambda0) for k in unique_values]\n", + "\n", + "# Теоретические частоты\n", + "expected_individual = np.array(probs_individual) * n\n", + "\n", + "df_individual = pd.DataFrame({\n", + " \"Значение k\": unique_values,\n", + " \"Наблюдаемая частота (O_i)\": counts,\n", + " \"Теоретическая вероятность (P(X=k))\": np.round(probs_individual, 4),\n", + " \"Теоретическая частота (E_i)\": np.round(expected_individual, 3)\n", + "})\n", + "\n", + "print(\"Таблица до группировки категорий:\")\n", + "print(df_individual)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "c669819b", + "metadata": {}, + "source": [ + "### Интерпретация\n", + "- **Наблюдаемые частоты** $O_i$ — количество раз, когда значение $k$ встречается в выборке.\n", + "- **Теоретическая вероятность** $P(X=k)$ — вероятность по распределению Пуассона с $λ=2.0$.\n", + "- **Теоретическая частота** $E_i$ — ожидаемое количество значений $k$ при условии, что данные следуют распределению Пуассона ($E_i = n \\cdot P(X = k)$).\n", + "\n", + "После группировки категорий (чтобы $E_i ≥ 5$) таблица принимает вид:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "74f3d6a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Таблица после группировки категорий:\n", + " Группа Наблюдаемая частота (O_i) Теоретическая вероятность \\\n", + "0 0 19 0.1353 \n", + "1 1 11 0.2707 \n", + "2 2 7 0.2707 \n", + "3 3 4 0.1804 \n", + "4 4,5,6,7,8 9 0.1429 \n", + "\n", + " Теоретическая частота (E_i) \n", + "0 6.767 \n", + "1 13.534 \n", + "2 13.534 \n", + "3 9.022 \n", + "4 7.144 \n", + "\n", + "χ² наблюдаемое: 29.022\n", + "Критическое значение (α=0.02): 11.668\n", + "p-значение: 0.0000077\n", + "Отвергаем гипотезу на уровне 0.02\n", + "Наибольший уровень значимости, на котором ещё нет оснований отвергнуть гипотезу: 0.0000077\n", + "Это означает, что гипотеза отвергается на любом уровне значимости α ≥ 0.0000077\n" + ] + } + ], + "source": [ + "from scipy.stats import chi2\n", + "# Группировка категорий (для E_i ≥ 5)\n", + "groups = [\n", + " [0], # Группа 1: k=0\n", + " [1], # Группа 2: k=1\n", + " [2], # Группа 3: k=2\n", + " [3], # Группа 4: k=3\n", + " [4, 5, 6, 7, 8] # Группа 5: k=4,5,6,7,8\n", + "]\n", + "\n", + "# Расчёт наблюдаемых частот по группам\n", + "# observed_grouped = np.array([19, 11, 7, 4, 3+2+1+2+1]) # ??\n", + "observed_grouped = np.array([np.sum(data==k) for k in [0,1,2,3]] + [np.sum(data>=4)])\n", + "\n", + "# Расчёт теоретических вероятностей по группам\n", + "probs_grouped = [\n", + " poisson.pmf(0, lambda0),\n", + " poisson.pmf(1, lambda0),\n", + " poisson.pmf(2, lambda0),\n", + " poisson.pmf(3, lambda0),\n", + " 1 - poisson.cdf(3, lambda0) # sum(poisson.pmf(k, lambda0) for k in groups[4])\n", + "]\n", + "\n", + "# Теоретические частоты\n", + "expected_grouped = np.array(probs_grouped) * n\n", + "\n", + "# Создание таблицы после группировки\n", + "df_grouped = pd.DataFrame({\n", + " \"Группа\": [\"0\", \"1\", \"2\", \"3\", \"4,5,6,7,8\"],\n", + " \"Наблюдаемая частота (O_i)\": observed_grouped,\n", + " \"Теоретическая вероятность\": np.round(probs_grouped, 4),\n", + " \"Теоретическая частота (E_i)\": np.round(expected_grouped, 3)\n", + "})\n", + "\n", + "print(\"\\nТаблица после группировки категорий:\")\n", + "print(df_grouped)\n", + "\n", + "# Статистика χ²\n", + "chi2_stat = np.sum((observed_grouped - expected_grouped)**2 / expected_grouped)\n", + "\n", + "# Степени свободы\n", + "df = 5 - 1 - 0 # 4\n", + "\n", + "# Критическое значение и p-значение\n", + "chi2_crit = chi2.ppf(1 - alpha, df)\n", + "p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "\n", + "print(f\"\\nχ² наблюдаемое: {chi2_stat:.3f}\")\n", + "print(f\"Критическое значение (α=0.02): {chi2_crit:.3f}\")\n", + "print(f\"p-значение: {p_value:.7f}\")\n", + "\n", + "if chi2_stat > chi2_crit:\n", + " print(\"Отвергаем гипотезу на уровне 0.02\")\n", + "else:\n", + " print(\"Нет оснований отвергнуть гипотезу на уровне 0.02\")\n", + "print(f\"\"\"Наибольший уровень значимости, на котором ещё нет оснований отвергнуть гипотезу: {p_value:.7f}\n", + "Это означает, что гипотеза отвергается на любом уровне значимости α ≥ {p_value:.7f}\"\"\")\n", + "\n", + "# observed = np.array([np.sum(data==k) for k in [0,1,2,3]] + [np.sum(data>=4)])\n", + "# expected = np.array([poisson.pmf(k,2)*n for k in [0,1,2,3]] + [n*(1 - poisson.cdf(3,2))])\n", + "# chi2_stat = np.sum((observed - expected)**2 / expected)\n", + "# df = 4\n", + "# crit = chi2.ppf(1-0.02, df)\n", + "# p_val = 1 - chi2.cdf(chi2_stat, df)\n", + "# print(f\"\\ne) χ²: {chi2_stat:.2f}, крит: {crit:.2f}, p-value: {p_val:.4f}\")\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "b4be90df", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Group Lower Upper O_i P_i E_i O_i - E_i \\\n", + "0 0 -inf 0.0 19 0.1353 6.767 12.233 \n", + "1 1 1.0 1.0 11 0.2707 13.534 -2.534 \n", + "2 2 2.0 2.0 7 0.2707 13.534 -6.534 \n", + "3 3 3.0 3.0 4 0.1804 9.022 -5.022 \n", + "4 4, 5, 6, 7, 8 4.0 inf 9 0.1429 7.144 1.856 \n", + "\n", + " (O_i - E_i)^2 / E_i \n", + "0 22.1157 \n", + "1 0.4743 \n", + "2 3.1542 \n", + "3 2.7957 \n", + "4 0.4823 \n", + "\n", + "χ² наблюдаемое: 29.022\n", + "Критическое значение (α=0.02): 11.668\n", + "p-значение: 0.0000077\n", + "Отвергаем H₀\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from scipy.stats import poisson, chi2\n", + "\n", + "# Пусть заданы:\n", + "# counts — частоты\n", + "# unique_values — уникальные значения\n", + "# n — общее число наблюдений\n", + "# lambda0 — параметр Пуассона\n", + "# alpha — уровень значимости - вычислить его\n", + "\n", + "# Группы значений\n", + "groups = [\n", + " [0], # Группа 1\n", + " [1], # Группа 2\n", + " [2], # Группа 3\n", + " [3], # Группа 4\n", + " [4, 5, 6, 7, 8] # Группа 5\n", + "]\n", + "\n", + "observed_grouped = np.array([np.sum(data==k) for k in [0,1,2,3]] + [np.sum(data>=4)])\n", + "probs_grouped = [\n", + " poisson.pmf(0, lambda0),\n", + " poisson.pmf(1, lambda0),\n", + " poisson.pmf(2, lambda0),\n", + " poisson.pmf(3, lambda0),\n", + " 1 - poisson.cdf(3, lambda0) # sum(poisson.pmf(k, lambda0) for k in groups[4])\n", + "]\n", + "\n", + "# Теоретические частоты\n", + "expected_grouped = np.array(probs_grouped) * n\n", + "lower_bounds = []\n", + "upper_bounds = []\n", + "\n", + "for i, group in enumerate(groups):\n", + " # obs = sum(counts[np.where(unique_values == k)[0][0]] for k in group if k in unique_values)\n", + " # prob = sum(poisson.pmf(k, lambda0) for k in group)\n", + " # exp = prob * n\n", + " # observed_grouped.append(obs)\n", + " # expected_grouped.append(exp)\n", + "\n", + " # Нижняя и верхняя границы\n", + " lower = -np.inf if i == 0 else min(group)\n", + " upper = np.inf if i == len(groups) - 1 else max(group)\n", + " lower_bounds.append(lower)\n", + " upper_bounds.append(upper)\n", + "\n", + "# Разности и вклад в статистику\n", + "diff = np.array(observed_grouped) - np.array(expected_grouped)\n", + "chi2_terms = diff**2 / expected_grouped\n", + "\n", + "# Таблица\n", + "df_final = pd.DataFrame({\n", + " \"Group\": [\", \".join(map(str, g)) for g in groups],\n", + " \"Lower\": lower_bounds,\n", + " \"Upper\": upper_bounds,\n", + " \"O_i\": observed_grouped,\n", + " \"P_i\": np.round(np.array(expected_grouped) / n, 4),\n", + " \"E_i\": np.round(expected_grouped, 3),\n", + " \"O_i - E_i\": np.round(diff, 3),\n", + " \"(O_i - E_i)^2 / E_i\": np.round(chi2_terms, 4)\n", + "})\n", + "\n", + "print(df_final)\n", + "\n", + "# Хи-квадрат статистика и p-value\n", + "chi2_stat = np.sum(chi2_terms)\n", + "df = len(groups) - 1 # без оценки параметров — простая гипотеза\n", + "chi2_crit = chi2.ppf(1 - alpha, df)\n", + "p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "\n", + "print(f\"\\nχ² наблюдаемое: {chi2_stat:.3f}\")\n", + "print(f\"Критическое значение (α={alpha:.2f}): {chi2_crit:.3f}\")\n", + "print(f\"p-значение: {p_value:.7f}\")\n", + "print(\"Отвергаем H₀\" if chi2_stat > chi2_crit else \"Нет оснований отвергнуть H₀\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "f9ef2691", + "metadata": {}, + "source": [ + "## Пункт f) Критерий $χ^2$ для проверки сложной гипотезы согласия с распределением Пуассона\n", + "\n", + "**Оценка параметра $\\lambda$** \n", + "Если параметр $\\lambda$ неизвестен, его оценивают по выборке (например, через выборочное среднее): \n", + "\n", + "$$\n", + "\\hat{\\lambda} = \\frac{1}{n} \\sum_{i=1}^n x_i,\n", + "$$\n", + "\n", + "где $x_i$ — значения выборки, $n$ — объем выборки.\n", + "\n", + "**Степени свободы** \n", + "Число степеней свободы для критерия хи-квадрат: \n", + "\n", + "$$\n", + "df = k - 1 - m,\n", + "$$\n", + "\n", + "где: \n", + "- \\( k \\) — количество интервалов, \n", + "- \\( m \\) — количество оцененных параметров (в данном случае \\( m = 1 \\), так как оценивается $\\lambda$).\n", + "\n", + "**Критическое значение:** Сравнение с $χ_{\\text{крит}}^2(df, α)$. \n", + "**p-значение:** Вероятность $P(χ^2 \\geq χ_{\\text{набл}}^2$).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "4383629c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Таблица до группировки категорий:\n", + " Значение k Наблюдаемая частота (O_i) Теоретическая вероятность (P(X=k)) \\\n", + "0 0 19 0.1409 \n", + "1 1 11 0.2761 \n", + "2 2 7 0.2706 \n", + "3 3 4 0.1768 \n", + "4 4 3 0.0866 \n", + "5 6 2 0.0111 \n", + "6 7 1 0.0031 \n", + "7 8 2 0.0008 \n", + "8 14 1 0.0000 \n", + "\n", + " Теоретическая частота (E_i) \n", + "0 7.043 \n", + "1 13.804 \n", + "2 13.528 \n", + "3 8.838 \n", + "4 4.331 \n", + "5 0.555 \n", + "6 0.155 \n", + "7 0.038 \n", + "8 0.000 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from scipy.stats import poisson\n", + "\n", + "# Теоретические вероятности для каждого k\n", + "probs_individual = [poisson.pmf(k, mean) for k in unique_values]\n", + "\n", + "# Теоретические частоты\n", + "expected_individual = np.array(probs_individual) * n\n", + "\n", + "df_individual = pd.DataFrame({\n", + " \"Значение k\": unique_values,\n", + " \"Наблюдаемая частота (O_i)\": counts,\n", + " \"Теоретическая вероятность (P(X=k))\": np.round(probs_individual, 4),\n", + " \"Теоретическая частота (E_i)\": np.round(expected_individual, 3)\n", + "})\n", + "\n", + "print(\"Таблица до группировки категорий:\")\n", + "print(df_individual)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c23d34d", + "metadata": {}, + "outputs": [], + "source": [ + "# from scipy.stats import chi2\n", + "# # Группировка категорий (для E_i ≥ 5)\n", + "# groups = [\n", + "# [0], # Группа 1: k=0,1,2\n", + "# [1], # Группа 2: k=3\n", + "# [2], # Группа 3: k=4\n", + "# [3], # Группа 4: k=5\n", + "# [4, 5, 6, 7, 8] # Группа 5: k=6,8,9\n", + "# ]\n", + "\n", + "# # Расчёт наблюдаемых частот по группам\n", + "# # observed_grouped = np.array([np.sum(data==k) for k in [0,1,2,3]] + [np.sum(data>=4)])\n", + "# probs_grouped = [\n", + "# poisson.pmf(0, lambda0),\n", + "# poisson.pmf(1, lambda0),\n", + "# poisson.pmf(2, lambda0),\n", + "# poisson.pmf(3, lambda0),\n", + "# 1 - poisson.cdf(3, lambda0) # sum(poisson.pmf(k, lambda0) for k in groups[4])\n", + "# ]\n", + "\n", + "# # Расчёт теоретических вероятностей по группам\n", + "# probs_grouped = [\n", + "# poisson.pmf(3, mean),\n", + "# poisson.pmf(3, mean),\n", + "# poisson.pmf(4, mean),\n", + "# poisson.pmf(5, mean),\n", + "# sum(poisson.pmf(k, mean) for k in groups[4])\n", + "# ]\n", + "\n", + "# # Теоретические частоты\n", + "# expected_grouped = np.array(probs_grouped) * n\n", + "\n", + "# # Создание таблицы после группировки\n", + "# df_grouped = pd.DataFrame({\n", + "# \"Группа\": [\"0,1,2\", \"3\", \"4\", \"5\", \"6,8,9\"],\n", + "# \"Наблюдаемая частота (O_i)\": observed_grouped,\n", + "# \"Теоретическая вероятность\": np.round(probs_grouped, 4),\n", + "# \"Теоретическая частота (E_i)\": np.round(expected_grouped, 3)\n", + "# })\n", + "\n", + "# print(\"\\nТаблица после группировки категорий:\")\n", + "# print(df_grouped)\n", + "\n", + "# # Статистика χ²\n", + "# chi2_stat = np.sum((observed_grouped - expected_grouped)**2 / expected_grouped)\n", + "\n", + "# # Степени свободы\n", + "# df = 5 - 1 - 1 # 3\n", + "\n", + "# # Критическое значение и p-значение\n", + "# chi2_crit = chi2.ppf(1 - alpha, df)\n", + "# p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "\n", + "# print(f\"\\nχ² наблюдаемое: {chi2_stat:.3f}\")\n", + "# print(f\"Критическое значение (α=0.10): {chi2_crit:.3f}\")\n", + "# print(f\"p-значение: {p_value:.3f}\")\n", + "\n", + "# if chi2_stat > chi2_crit:\n", + "# print(\"Отвергаем гипотезу на уровне 0.10\")\n", + "# else:\n", + "# print(\"Нет оснований отвергнуть гипотезу на уровне 0.10\")\n", + "\n", + "# lambda_hat = np.mean(data)\n", + "# expected = np.array([poisson.pmf(k,lambda_hat)*n for k in [0,1,2,3]] + [n*(1 - poisson.cdf(3,lambda_hat))])\n", + "# chi2_stat = np.sum((observed - expected)**2 / expected)\n", + "# df = 3\n", + "# crit = chi2.ppf(1-0.02, df)\n", + "# p_val = 1 - chi2.cdf(chi2_stat, df)\n", + "# print(f\"\\nf) χ²: {chi2_stat:.2f}, крит: {crit:.2f}, p-value: {p_val:.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "9d39fc45", + "metadata": {}, + "outputs": [], + "source": [ + "# import numpy as np\n", + "# from scipy.stats import poisson, chi2\n", + "# groups = [\n", + "# [0], # Группа 1: k=0,1,2\n", + "# [1], # Группа 2: k=3\n", + "# [2], # Группа 3: k=4\n", + "# [3], # Группа 4: k=5\n", + "# [4, 5, 6, 7, 8] # Группа 5: k=6,8,9\n", + "# ]\n", + "\n", + "# # Оценка параметра λ\n", + "# lambda_hat = np.mean(data)\n", + "# print(f\"Оценка λ: {lambda_hat:.4f}\")\n", + "\n", + "# # Разбиение на интервалы (пример)\n", + "# intervals = [\n", + "# (-np.inf, 0),\n", + "# (1, 1),\n", + "# (2, 2),\n", + "# (3, 3),\n", + "# (4, np.inf)\n", + "# ]\n", + "\n", + "# # Наблюдаемые частоты\n", + "# observed = [19, 11, 7, 4, 9] # Пример из таблицы\n", + "\n", + "# # Ожидаемые частоты для λ0\n", + "# expected = []\n", + "# n = len(data)\n", + "# for interval in intervals:\n", + "# if interval[0] == -np.inf:\n", + "# prob = poisson.cdf(0, lambda0)\n", + "# elif interval[1] == np.inf:\n", + "# prob = 1 - poisson.cdf(interval[0] - 1, lambda0)\n", + "# else:\n", + "# prob = poisson.pmf(interval[0], lambda0)\n", + "# expected.append(n * prob)\n", + "\n", + "# # Статистика хи-квадрат\n", + "# chi2_stat = sum((o - e)**2 / e for o, e in zip(observed, expected))\n", + "# print(f\"Наблюдаемое χ²: {chi2_stat:.4f}\")\n", + "\n", + "# # Степени свободы\n", + "# k = len(intervals)\n", + "# m = 1 # Оценен один параметр\n", + "# df = k - 1 - m\n", + "# print(f\"Степени свободы: {df}\")\n", + "\n", + "# # Критическое значение и p-значение\n", + "# chi2_crit = chi2.ppf(1 - alpha, df)\n", + "# p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "# print(f\"Критическое значение: {chi2_crit:.4f}\")\n", + "# print(f\"p-значение: {p_value:.4f}\")\n", + "\n", + "# # Вывод решения\n", + "# if chi2_stat > chi2_crit:\n", + "# print(\"Отвергаем H₀\")\n", + "# else:\n", + "# print(\"Не отвергаем H₀\")\n", + "\n", + "# # Обновим expected_grouped, чтобы быть уверенными, что это numpy-массив\n", + "# expected_grouped = np.array(expected_grouped)\n", + "\n", + "# # Вычислим границы для групп\n", + "# lower_bounds = [float('-inf')] + [min(g) for g in groups[1:]]\n", + "# upper_bounds = [max(g) for g in groups[:-1]] + [float('inf')]\n", + "\n", + "# # Вычислим разности и хи-квадрат члены\n", + "# diff = np.array(observed_grouped) - expected_grouped\n", + "# chi2_terms = diff**2 / expected_grouped\n", + "\n", + "# # Построим финальную таблицу\n", + "# df_final = pd.DataFrame({\n", + "# \"Group\": [\", \".join(map(str, g)) for g in groups],\n", + "# \"Lower\": lower_bounds,\n", + "# \"Upper\": upper_bounds,\n", + "# \"O_i\": observed_grouped,\n", + "# \"P_i\": np.round(expected_grouped / n, 4),\n", + "# \"E_i\": np.round(expected_grouped, 3),\n", + "# \"O_i - E_i\": np.round(diff, 3),\n", + "# \"(O_i - E_i)^2 / E_i\": np.round(chi2_terms, 4)\n", + "# })\n", + "\n", + "# print(\"\\nПодробная таблица для χ² при сложной гипотезе:\")\n", + "# print(df_final)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "d5e3c152", + "metadata": {}, + "outputs": [], + "source": [ + "# import numpy as np\n", + "# from scipy.stats import poisson, chi2\n", + "\n", + "\n", + "# # Оценка параметра λ\n", + "# lambda_hat = np.mean(data)\n", + "# print(f\"Оценка λ: {lambda_hat:.4f}\")\n", + "\n", + "# # Разбиение на интервалы (пример)\n", + "# intervals = [\n", + "# (-np.inf, 0),\n", + "# (1, 1),\n", + "# (2, 2),\n", + "# (3, 3),\n", + "# (4, np.inf)\n", + "# ]\n", + "\n", + "# # Наблюдаемые частоты\n", + "# observed = [19, 11, 7, 4, 9] # Пример из таблицы\n", + "\n", + "# # Ожидаемые частоты для λ0\n", + "# expected = []\n", + "# n = len(data)\n", + "# for interval in intervals:\n", + "# if interval[0] == -np.inf:\n", + "# prob = poisson.cdf(0, lambda0)\n", + "# elif interval[1] == np.inf:\n", + "# prob = 1 - poisson.cdf(interval[0] - 1, lambda0)\n", + "# else:\n", + "# prob = poisson.pmf(interval[0], lambda0)\n", + "# expected.append(n * prob)\n", + "\n", + "# # Статистика хи-квадрат\n", + "# chi2_stat = sum((o - e)**2 / e for o, e in zip(observed, expected))\n", + "# print(f\"Наблюдаемое χ²: {chi2_stat:.4f}\")\n", + "\n", + "# # Степени свободы\n", + "# k = len(intervals)\n", + "# m = 1 # Оценен один параметр\n", + "# df = k - 1 - m\n", + "# print(f\"Степени свободы: {df}\")\n", + "\n", + "# # Критическое значение и p-значение\n", + "# chi2_crit = chi2.ppf(1 - alpha, df)\n", + "# p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "# print(f\"Критическое значение: {chi2_crit:.4f}\")\n", + "# print(f\"p-значение: {p_value:.4f}\")\n", + "\n", + "# # Вывод решения\n", + "# if chi2_stat > chi2_crit:\n", + "# print(\"Отвергаем H₀\")\n", + "# else:\n", + "# print(\"Не отвергаем H₀\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a937cbce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Оценка λ: 1.9600\n", + "\n", + "Таблица до объединения категорий:\n", + " Значение k Наблюдаемая частота (Oᵢ) Теоретическая вероятность P(X=k) \\\n", + "0 0 19 0.1409 \n", + "1 1 11 0.2761 \n", + "2 2 7 0.2706 \n", + "3 3 4 0.1768 \n", + "4 4 3 0.0866 \n", + "5 6 2 0.0111 \n", + "6 7 1 0.0031 \n", + "7 8 2 0.0008 \n", + "8 14 1 0.0000 \n", + "\n", + " Теоретическая частота (Eᵢ) \n", + "0 7.043 \n", + "1 13.804 \n", + "2 13.528 \n", + "3 8.838 \n", + "4 4.331 \n", + "5 0.555 \n", + "6 0.155 \n", + "7 0.038 \n", + "8 0.000 \n", + "\n", + "Таблица после объединения категорий:\n", + " Группа Наблюдаемая частота (Oᵢ) Теоретическая вероятность \\\n", + "0 0 19 0.1409 \n", + "1 1 11 0.2761 \n", + "2 2 7 0.2706 \n", + "3 3 4 0.1768 \n", + "4 4,6,7,8,14 9 0.1016 \n", + "\n", + " Теоретическая частота (Eᵢ) \n", + "0 7.043 \n", + "1 13.804 \n", + "2 13.528 \n", + "3 8.838 \n", + "4 6.787 \n", + "[ 7.04292105 13.80412525 13.52804275 8.83832126 6.7865897 ]\n", + "\n", + "Подробная таблица для χ²:\n", + " Группа Oᵢ Pᵢ Eᵢ Oᵢ - Eᵢ (Oᵢ - Eᵢ)² / Eᵢ\n", + "0 0 19 0.1409 7.043 11.957 20.3001\n", + "1 1 11 0.2761 13.804 -2.804 0.5696\n", + "2 2 7 0.2706 13.528 -6.528 3.1501\n", + "3 3 4 0.1768 8.838 -4.838 2.6486\n", + "4 4,6,7,8,14 9 0.1357 6.787 2.213 0.7219\n", + "\n", + "Хи-квадрат статистика: 27.3903\n", + "Критическое значение (α=0.02): 9.8374\n", + "p-value: 0.000005\n", + "Вывод: Отвергаем нулевую гипотезу\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from scipy.stats import poisson, chi2\n", + "\n", + "# Данные: частоты по значениям\n", + "freq_table = {\n", + " 0: 19,\n", + " 1: 11,\n", + " 2: 7,\n", + " 3: 4,\n", + " 4: 3,\n", + " 6: 2,\n", + " 7: 1,\n", + " 8: 2,\n", + " 14: 1\n", + "}\n", + "\n", + "# Общее количество наблюдений\n", + "n = sum(freq_table.values())\n", + "\n", + "# Оценка параметра λ\n", + "lambda_hat = sum(k * v for k, v in freq_table.items()) / n\n", + "print(f\"Оценка λ: {lambda_hat:.4f}\")\n", + "\n", + "# Теоретические вероятности и частоты до объединения\n", + "unique_values = list(freq_table.keys())\n", + "probs = [poisson.pmf(k, lambda_hat) for k in unique_values]\n", + "expected = np.array(probs) * n\n", + "\n", + "# Таблица до объединения\n", + "df_individual = pd.DataFrame({\n", + " 'Значение k': unique_values,\n", + " 'Наблюдаемая частота (Oᵢ)': [freq_table[k] for k in unique_values],\n", + " 'Теоретическая вероятность P(X=k)': np.round(probs, 4),\n", + " 'Теоретическая частота (Eᵢ)': np.round(expected, 3)\n", + "})\n", + "\n", + "print(\"\\nТаблица до объединения категорий:\")\n", + "print(df_individual)\n", + "\n", + "# Группировка категорий:\n", + "groups = {\n", + " '0': [0],\n", + " '1': [1],\n", + " '2': [2],\n", + " '3': [3],\n", + " '4,6,7,8,14': [4, 6, 7, 8, 14]\n", + "}\n", + "\n", + "# Наблюдаемые и ожидаемые частоты по группам\n", + "observed_grouped = []\n", + "expected_grouped = []\n", + "expected_grouped = [\n", + " poisson.pmf(0, lambda_hat)*n,\n", + " poisson.pmf(1, lambda_hat)*n,\n", + " poisson.pmf(2, lambda_hat)*n,\n", + " poisson.pmf(3, lambda_hat)*n,\n", + " (1 - poisson.cdf(3, lambda_hat))*n\n", + "]\n", + "\n", + "for group, values in groups.items():\n", + " O_i = sum(freq_table.get(k, 0) for k in values)\n", + " p_i = sum(poisson.pmf(k, lambda_hat) for k in values)\n", + " \n", + " observed_grouped.append(O_i)\n", + "\n", + "# Таблица после объединения\n", + "df_grouped = pd.DataFrame({\n", + " 'Группа': list(groups.keys()),\n", + " 'Наблюдаемая частота (Oᵢ)': observed_grouped,\n", + " 'Теоретическая вероятность': np.round(probs_grouped, 4),\n", + " 'Теоретическая частота (Eᵢ)': np.round(expected_grouped, 3)\n", + "})\n", + "\n", + "print(\"\\nТаблица после объединения категорий:\")\n", + "print(df_grouped)\n", + "\n", + "# Расчёт χ²\n", + "observed_grouped = np.array(observed_grouped)\n", + "expected_grouped = np.array(expected_grouped)\n", + "diff = observed_grouped - expected_grouped\n", + "chi2_terms = diff**2 / expected_grouped\n", + "chi2_stat = np.sum(chi2_terms)\n", + "print(expected_grouped)\n", + "\n", + "# Степени свободы\n", + "k = len(groups)\n", + "m = 1 # число оцененных параметров\n", + "df_chi2 = k - 1 - m\n", + "\n", + "# Критическое значение и p-value\n", + "alpha = 0.02\n", + "chi2_crit = chi2.ppf(1 - alpha, df_chi2)\n", + "p_value = 1 - chi2.cdf(chi2_stat, df_chi2)\n", + "\n", + "# Подробная таблица расчётов\n", + "df_final = pd.DataFrame({\n", + " 'Группа': list(groups.keys()),\n", + " 'Oᵢ': observed_grouped,\n", + " 'Pᵢ': np.round(expected_grouped / n, 4),\n", + " 'Eᵢ': np.round(expected_grouped, 3),\n", + " 'Oᵢ - Eᵢ': np.round(diff, 3),\n", + " '(Oᵢ - Eᵢ)² / Eᵢ': np.round(chi2_terms, 4)\n", + "})\n", + "\n", + "print(\"\\nПодробная таблица для χ²:\")\n", + "print(df_final)\n", + "\n", + "# Вывод результатов\n", + "print(f\"\\nХи-квадрат статистика: {chi2_stat:.4f}\")\n", + "print(f\"Критическое значение (α={alpha}): {chi2_crit:.4f}\")\n", + "print(f\"p-value: {p_value:.6f}\")\n", + "\n", + "if chi2_stat > chi2_crit:\n", + " print(\"Вывод: Отвергаем нулевую гипотезу\")\n", + "else:\n", + " print(\"Вывод: Нет оснований отвергнуть нулевую гипотезу H0\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "07c231d4", + "metadata": {}, + "source": [ + "## Пункт g) Наиболее мощный критерий проверки гипотезы $H_0 : λ = λ_0 = 2.0$ против $H_1 : λ = λ_1 = 4.0$\n", + "### Пункт g) Наиболее мощный критерий проверки гипотезы\n", + "\n", + "**Логарифм отношения правдоподобия**\n", + "\n", + "Функция правдоподобия для распределения Пуассона:\n", + "\n", + "$$\n", + "L(\\lambda) = \\prod_{i=1}^n \\frac{\\lambda^{X_i} e^{-\\lambda}}{X_i!}\n", + "$$\n", + "\n", + "Логарифм отношения правдоподобия:\n", + "\n", + "$$\n", + "\\ln \\left( \\frac{L(\\lambda_1)}{L(\\lambda_0)} \\right) = \\sum_{i=1}^n \\left( X_i \\ln \\left( \\frac{\\lambda_1}{\\lambda_0} \\right) - (\\lambda_1 - \\lambda_0) \\right).\n", + "$$\n", + "\n", + "**Критерий отношения правдоподобия**\n", + "\n", + "Для проверки $H_0$ против $H_1$ используется сумма наблюдений $T = \\sum_{i=1}^n X_i$. Критерий принимает $H_1$, если:\n", + "\n", + "$$\n", + "T > k,\n", + "$$\n", + "\n", + "где $k$ определяется как:\n", + "\n", + "$$\n", + "k = \\text{qpois}(1 - \\alpha, n\\lambda_0).\n", + "$$\n", + "\n", + "**Смена гипотез**\n", + "\n", + "Если поменять местами гипотезы, новая нулевая гипотеза $H_0 : \\lambda = \\lambda_1$, а альтернатива $H_1 : \\lambda = \\lambda_0$. В этом случае критерий принимает $H_0$, если:\n", + "\n", + "$$\n", + "T < k',\n", + "$$\n", + "\n", + "где $k'$ определяется как:\n", + "\n", + "$$\n", + "k' = \\text{qpois}(\\alpha, n\\lambda_1).\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "635fbf6b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Сумма наблюдений: T_obs = 98\n", + "Порог для H0:λ=2.00: k = 121\n", + "Порог для H0:λ=4.00: k' = 172\n", + "\n", + "Проверка H0:λ=2.00 vs H1:λ=4.00:\n", + "Не отклоняем H0: T_obs = 98 ≤ 121\n", + "\n", + "Проверка H0:λ=4.00 vs H1:λ=2.00:\n", + "Отклоняем H0: T_obs = 98 < 172\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from scipy.stats import norm\n", + "\n", + "# sum_X = np.sum(data)\n", + "\n", + "# # Критическое значение для H0: λ=2.0\n", + "# mu_H0 = n * lambda0\n", + "# sigma_H0 = np.sqrt(mu_H0)\n", + "# z_crit = norm.ppf(1 - alpha)\n", + "# C = mu_H0 + z_crit * sigma_H0\n", + "\n", + "# print(f\"Сумма наблюдений: {sum_X}\")\n", + "# print(f\"Критическое значение C: {C:.1f}\")\n", + "\n", + "# if sum_X > C:\n", + "# print(\"Отвергаем H0: λ=2.0\")\n", + "# else:\n", + "# print(\"Нет оснований отвергнуть H0: λ=2.0\")\n", + "\n", + "# print(\"\\nПоменяли гипотезы местами\")\n", + "# # Смена гипотез местами\n", + "# mu_H0_swapped = n * lambda1\n", + "# sigma_H0_swapped = np.sqrt(mu_H0_swapped)\n", + "# z_crit_swapped = norm.ppf(alpha)\n", + "# C_swapped = mu_H0_swapped + z_crit_swapped * sigma_H0_swapped\n", + "\n", + "# print(f\"\\nКритическое значение C' (при H0: λ=4.0): {C_swapped:.1f}\")\n", + "\n", + "# if sum_X < C_swapped:\n", + "# print(\"Отвергаем H0: λ=4.0\")\n", + "# else:\n", + "# print(\"Нет оснований отвергнуть H0: λ=4.0\")\n", + "\n", + "# print(\"---\")\n", + "\n", + "# sum_data = np.sum(data)\n", + "# mu0 = 2*n\n", + "# mu1 = 4*n\n", + "# c = norm.ppf(1-0.02, mu0, np.sqrt(mu0))\n", + "# print(f\"\\ng) Критич. значение: {c:.1f}, сумма: {sum_data}\")\n", + "# print(\"Отвергаем H0\" if sum_data > c else \"Не отвергаем H0\")\n", + "\n", + "\n", + "# # Сумма наблюдений\n", + "# T_obs = np.sum(data)\n", + "\n", + "# # Критерий для H0: λ = λ0 vs H1: λ = λ1\n", + "# k = poisson.ppf(1 - alpha, n * lambda0) # Квантиль для порога k\n", + "# decision_H0 = \"Отклоняем H0 в пользу H1\" if T_obs > k else \"Не отклоняем H0\"\n", + "\n", + "# # Критерий для H0: λ = λ1 vs H1: λ = λ0\n", + "# k_prime = poisson.ppf(alpha, n * lambda1) # Квантиль для порога k'\n", + "# decision_H1 = \"Отклоняем H0 в пользу H1\" if T_obs < k_prime else \"Не отклоняем H0\"\n", + "\n", + "# # Вывод результатов\n", + "# print(f\"Сумма наблюдений T_obs: {T_obs}\")\n", + "# print(f\"Порог k для H0: λ = {lambda0}: {k}\")\n", + "# print(f\"Решение для H0: {decision_H0}\")\n", + "# print(f\"Порог k' для H0: λ = {lambda1}: {k_prime}\")\n", + "# print(f\"Решение для H1: {decision_H1}\")\n", + "# print(\"---\")\n", + "from scipy.stats import poisson\n", + "\n", + "# Данные наблюдений\n", + "data = list(map(int, \"0 1 2 0 0 7 1 0 2 1 0 1 2 2 0 0 1 8 0 0 14 4 3 0 0 3 0 6 2 2 1 0 0 2 0 4 0 0 3 3 1 1 0 0 6 8 1 4 1 1\".split()))\n", + "n = len(data)\n", + "T_obs = sum(data)\n", + "\n", + "# Параметры\n", + "alpha = 0.02\n", + "lambda0 = 2.00\n", + "lambda1 = 4.00\n", + "\n", + "# Вычисление порогов\n", + "k = poisson.ppf(1 - alpha, n * lambda0)\n", + "k_prime = poisson.ppf(alpha, n * lambda1)\n", + "\n", + "# Результаты\n", + "# print(f\"Количество наблюдений: n = {n}\")\n", + "print(f\"Сумма наблюдений: T_obs = {T_obs}\")\n", + "print(f\"Порог для H0:λ=2.00: k = {int(k)}\")\n", + "print(f\"Порог для H0:λ=4.00: k' = {int(k_prime)}\")\n", + "\n", + "# Проверка исходных гипотез\n", + "print(\"\\nПроверка H0:λ=2.00 vs H1:λ=4.00:\")\n", + "if T_obs > k:\n", + " print(f\"Отклоняем H0: T_obs = {T_obs} > {int(k)}\")\n", + "else:\n", + " print(f\"Не отклоняем H0: T_obs = {T_obs} ≤ {int(k)}\")\n", + "\n", + "# Проверка инвертированных гипотез\n", + "print(\"\\nПроверка H0:λ=4.00 vs H1:λ=2.00:\")\n", + "if T_obs < k_prime:\n", + " print(f\"Отклоняем H0: T_obs = {T_obs} < {int(k_prime)}\")\n", + "else:\n", + " print(f\"Не отклоняем H0: T_obs = {T_obs} ≥ {int(k_prime)}\")" + ] + }, + { + "cell_type": "markdown", + "id": "863bdc6c", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "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.13.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/idz3/ИДЗ 3_2 Артём.ipynb b/idz3/ИДЗ 3_2 Артём.ipynb new file mode 100644 index 0000000..9821edc --- /dev/null +++ b/idz3/ИДЗ 3_2 Артём.ipynb @@ -0,0 +1,1078 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "23f67692", + "metadata": {}, + "source": [ + "2. В результате эксперимента получены данные, приведенные в таблице 2.\n", + "a) Построить вариационный ряд, эмпирическую функцию распределения, гистограмму и полигон частот с шагом h. \n", + "b) Вычислить выборочные аналоги следующих числовых характеристик: \n", + "(i) математического ожидания, (ii) дисперсии, (iii) медианы, (iv) асимметрии, (v) эксцесса, (vi) вероятности P(X ∈ [c, d]). \n", + "c) В предположении, что исходные наблюдения являются выборкой из показательного распределения, построить \n", + "оценку максимального правдоподобия параметра λ и соответствующую оценку по методу моментов. Найти смещение оценок. \n", + "d) Построить асимптотический доверительный интервал уровня значимости α2 для параметра λ на базе оценки максимального правдоподобия. \n", + "e) С использованием теоремы Колмогорова построить критерий значимости проверки простой гипотезы согласия с показательным распределением с параметром λ0. Проверить гипотезу на уровне значимости α2. Вычислить наибольшее значение уровня значимости, на котором нет оснований отвергнуть данную гипотезу. \n", + "f) Используя гистограмму частот, построить критерий значимости χ2 проверки простой гипотезы согласия с показательным распределением с параметром λ0. Проверить гипотезу на уровне α2. Вычислить наибольшее значение уровня значимости, на котором еще нет оснований отвергнуть данную гипотезу. \n", + "g) Построить критерий проверки значимости χ2 сложной гипотезы согласия с показательным распределением. \n", + "Проверить гипотезу на уровне α2. Вычислить наибольшее значение уровня значимости, на котором еще нет оснований отвергнуть данную гипотезу. \n", + "h) Построить наиболее мощный критерий проверки простой гипотезы о показательности с параметром λ = λ0 при альтернативе показательности с параметром λ = λ1. Проверить гипотезу на уровне значимости α2. Что получится, если поменять местами основную и альтернативную гипотезы? \n", + "\n", + "Таблица 2 α2 = 0.10; c = 0.00; d = 4.62; h = 1.40; λ0 = 0.33; λ1 = 0.14. \n", + "0.18 0.10 3.34 0.67 0.85 1.17 0.24 0.15 1.31 0.00 0.49 2.37 14.94 2.44 3.13 0.06 2.98 9.25 6.84 3.96 0.07 6.72 11.83 0.50 0.11\n", + "6.50 0.29 0.17 0.03 0.06 1.02 0.49 15.68 3.03 0.24 11.40 0.53 0.59 4.55 3.57 8.33 0.12 2.58 2.77 0.12 1.11 0.31 0.36 1.31 0.57" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "57a523dd", + "metadata": {}, + "outputs": [], + "source": [ + "# Данные\n", + "import numpy as np\n", + "data = np.array(list(map(float, \"\"\"0.18 0.10 3.34 0.67 0.85 1.17 0.24 0.15 1.31 0.00 0.49 2.37 14.94 2.44 3.13 0.06 2.98 9.25 6.84 3.96 0.07 6.72 11.83 0.50 0.11 6.50 0.29 0.17 0.03 0.06 1.02 0.49 15.68 3.03 0.24 11.40 0.53 0.59 4.55 3.57 8.33 0.12 2.58 2.77 0.12 1.11 0.31 0.36 1.31 0.57\"\"\".split())))\n", + "lambda0 = 0.33; lambda1 = 0.14\n", + "alpha2 = 0.10\n", + "c = 0.00; d = 4.62; h = 1.40\n", + "# a0 = 3.00; sig0 = 3.00\n", + "# a1 = -7.00; sig1 = 3.00" + ] + }, + { + "cell_type": "markdown", + "id": "8b7561a0", + "metadata": {}, + "source": [ + "## Пункт a)" + ] + }, + { + "cell_type": "markdown", + "id": "b046ad70", + "metadata": {}, + "source": [ + "### 1. Вариационный ряд" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "db7e1a67", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0^(1), 0.03^(1), 0.06^(2), 0.07^(1), 0.1^(1), 0.11^(1), 0.12^(2), 0.15^(1), 0.17^(1), 0.18^(1), 0.24^(2), 0.29^(1), 0.31^(1), 0.36^(1), 0.49^(2), 0.5^(1), 0.53^(1), 0.57^(1), 0.59^(1), 0.67^(1), 0.85^(1), 1.02^(1), 1.11^(1), 1.17^(1), 1.31^(2), 2.37^(1), 2.44^(1), 2.58^(1), 2.77^(1), 2.98^(1), 3.03^(1), 3.13^(1), 3.34^(1), 3.57^(1), 3.96^(1), 4.55^(1), 6.5^(1), 6.72^(1), 6.84^(1), 8.33^(1), 9.25^(1), 11.4^(1), 11.83^(1), 14.94^(1), 15.68^(1)\n", + "Вариационный ряд: 0.0, 0.03, 0.06, 0.06, 0.07, 0.1, 0.11, 0.12, 0.12, 0.15, 0.17, 0.18, 0.24, 0.24, 0.29, 0.31, 0.36, 0.49, 0.49, 0.5, 0.53, 0.57, 0.59, 0.67, 0.85, 1.02, 1.11, 1.17, 1.31, 1.31, 2.37, 2.44, 2.58, 2.77, 2.98, 3.03, 3.13, 3.34, 3.57, 3.96, 4.55, 6.5, 6.72, 6.84, 8.33, 9.25, 11.4, 11.83, 14.94, 15.68\n" + ] + } + ], + "source": [ + "# Получение уникальных значений и их частот\n", + "unique_values, counts = np.unique(data, return_counts=True)\n", + "\n", + "# Форматирование вариационного ряда\n", + "variational_series = sorted(data)\n", + "print(\", \".join(f\"{value}^({count})\" for value, count in zip(unique_values, counts)))\n", + "print(\"Вариационный ряд:\", \", \".join(map(str, variational_series)))" + ] + }, + { + "cell_type": "markdown", + "id": "93c7e45f", + "metadata": {}, + "source": [ + "### 2. Эмпирическая функция распределения (ЭФР)\n", + "$$\n", + "\\hat{F}_n(x) = \\frac{1}{n} \\sum_{i=1}^{n} \\text{\\textbf{1}}_{\\{X_i \\leq x\\}},\n", + "$$\n", + "где $n$ — объем выборки." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "261ad18a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhXtJREFUeJzt3Qmc3dP9//HPZJ0gJEESIrbU2tiJvdpSilqqipZaSylqaWupWlpKdVH92am1qqiWqIQEKQlRUlIMgoRGRGSPRNZZ7v/xPvP/Tu5M5s5Mcu7M/cyZ1/PxmMydmTszr/u933tzzz3nfqcsl8vlDAAAAABQUKfCXwIAAAAACAMnAAAAAGgGAycAAAAAaAYDJwAAAABoBgMnAAAAAGgGAycAAAAAaAYDJwAAAABoBgMnAAAAAGgGAycAAAAAaAYDJwAAAABoBgMnAEVRUVFhp512mn3hC1+w7t2721prrWW77bab/fGPf7SlS5eWOg8OrLHGGnbiiSeWOgMAgFXSZdW+DQCWW7BggW2//fa2/vrr29FHH21bbLGFLV682MaMGWPnn3++PfDAA/bkk09anz59Sp0KAACwShg4AYhWU1Nj5557rv3qV78Ks02Zs88+OwyYDj74YDv55JPtscceK2knAADAqmKpHoBoWpb3u9/9rt6gKXPggQfaUUcdZUOHDrVx48bVfX7jjTe2srKyMOBq6IADDghf+8Y3vlH3ueeeey58rtBb/hKwe+65J3zuf//7X73B3bbbbhs+r69n9H1aQvbBBx+E37v66quHmbNf/vKXlsvl6s6nn9Xwe+XMM89c4ffrtC5fQzrfFVdcUe9zU6dODYPKfv36he33xS9+0e66664VvnfJkiXhezfffHMrLy+39dZbz4444gibNGlSwT7NBO600062ySab2LRp0+o+r+tqjz32sLXXXtt69OgRzvPII4+s8Ds///xz+/GPf2ybbrqpde3atd72njVrljVF2/unP/1p2De0LZ566qm6r1144YXWs2dP22yzzcLAOnP33XeHnz1+/PgVft7VV19tnTt3DttLvvzlL9vgwYNXOJ8uW8PrXr+/4RJBLSvVdtR+lX++/H0uc9ZZZ4WfmU/XRcPPaXv1798/fD7/58ott9wSeldbbbV627Gx7d7Y75kwYUK4Ha255prhejvnnHPCPpFP2++rX/2q9e3bN+xLW2+9dfi9jdF232effcL1oJ+5yy67hJnhjLZvU7e3httX223kyJFh5lnbVb/7H//4xwq/d968eeE2P3DgwNCopb3XXntt2F8aym7HDd8au21p+xx55JFhVlu/f+edd7bHH3+80cte6LI1vG2//PLL9vWvfz3sw7retL1efPHFRq+fhreH//znP43e1zRsnzJlSrgNNtymVVVVdtVVV4Xbu7ZTfqd+NoDSYOAEoNVpYCANH8joAc5f/vIXq6ysrPvcxx9/bM8++2z4WmN+9KMf2Z///Od6b40N2BrS+d58881Gv1ZdXR0eIGnw8pvf/CYMJC6//PLw1pSJEyfaHXfcYatq+vTp4XVgzzzzTHhwrteD6YHkKaecYtdff329Pj0w/cUvfhHafv/734cHzp999ll4bVljtE2/9a1v2UcffWQjRowIA62Mfs8OO+wQBocakHTp0sW+/e1v27Bhw+r9DA18rrvuuvBg/Pbbbw/b8Jvf/GaLLpseDGsQc9hhh9l5550X3pYtWxZ+x2uvvRZmJ/WAUYO/Dz/8MHyPHvjqc9onGtLn9IB3wIABFkvX65133mn3339/+JnFoutF12lDDz30kP3whz+0dddd1/7whz+E7fizn/1spX62Bk0aKF1zzTV20EEH2f/93/+FwV8+DZI22mij8LPVosGJfu9NN91U73x6MK9Z4Dlz5tjFF19sv/71r8OAJ39wKxtssMEKt7XvfOc7jfa9//77YZmunihRY7ZPPf3003XnWbRoURh8aLsff/zx4TLsueeeoUFLegvRfpr9fnU29NZbb4Xb0TvvvGMXXXRRuOx6AuTwww+3Rx99tNGfueWWW9b9TF0nDY0aNcq+9KUv2fz588P+otuJBn26LbzyyitWLJdddtkKA2DRZbj00kvDYPvmm28OnQ2vbwAlkAOAIlm4cGFu5syZK7xNmDBBUze5I444ou68G220Ue5rX/tabp111sk98sgjdZ+/8sorc3vssUf4+sEHH1z3+X/961/hZ/ztb39b4feuvvrquRNOOKHu47vvvjuc98MPPwwfL1myJLfhhhvmDjzwwPB5fT2j79Pnzj777LrP1dTUhN/drVu30C/6WQ2/96ijjsoNHjw4N3DgwHq//6STTgq/ryF9/+WXX1738SmnnJJbb731crNmzap3vmOOOSa31lpr5RYtWhQ+vuuuu8L3XnfddSv8TLU27NPnjj322Nxqq62We/nll1f4nuznZpYtWxYux1e/+tV6n1fbAQccUO9z6tfvybZLY7S9+/btm/vOd75T97nXX38917lz59x2222XW7p0aficLnfPnj1z55xzTt359D3rr79+rrq6uu5zr7322grbfp999sl98YtfXOF3//a3v6133Yv2pez6ue2228LXb7jhhhW+t+E+lznzzDPD9zS2HTIzZswIlyXbx7S/5l+mXr165RYvXtyi/bmx33PooYfW+/wPf/jD8Hlt10LXq+j623TTTes+njdvXujcdddd6/Xk70ursn31ub///e91n/vss8/C/rPDDjvUu23rtvree+/V+5kXXXRR2Dc++uijep+//fbbw8/9z3/+U/c5XT/6ffn23Xff3DbbbBP2u/zLovuRzTbbbIXLsOeee+a+8pWv1H3c8Lat79X3advlbxNt30022STcbzV3exg3blyj9zX57RUVFblOnTrV7TP523T33XfPbbXVVvV+f3a/pp8NoDSYcQJQNJqt0bPqDd/07K7o2dt83bp1s2OPPTYsMcp/Nvykk04qapeecZ89e3aTM0ia8cloOYw+1gyJZoMa8+qrr9rf/va38Ox6p07170q1VGrGjBnh+wvROOrvf/+7HXLIIeG0lvpkb1oyqNkkzcyIzrfOOuuE14w11HC5WDZTpBmahx9+2IYMGbLC1zWrk5k7d274XXvvvXfd78tf6qdlYStLM3u6/JpNymiZpGYRNWOg6130s/WsvmYYM5qJ+OSTT+xf//pX3ed0WdSsGbR8monL325606xGIVouqhkYbZ/867sYrrzyyrCkSzOiDWk7aqlXoVnUltCS0HzZvjB8+PBGr1ddp9oemuHRMlR9LJoBUo9mZhr2NLYvtZSWt+bPRmr5n65LLbv89NNPw+d0e9F+1rt373rX2X777Reuy9GjR9f7mdlMTFPbTbNmmh3SjJwuV/YzdXvX7UgzYdnyzoxul03NUv/3v/8N3/fd7343/JzsZy5cuND23Xff0NlwaaE68i9Ttr2bopm2HXfcMczMNaTLou0Uc50AKD4ODgGgaPRAaa+99lrh83rthx5U6cFUQxokafmZXoPz3nvvhfd6EKT1/cWgBzBaZqOlQFqK1xgNfPQ6nnx6bYHkv+4gnx546kGgltA1fBCu1w9pqdrPf/7z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VPvWWlLefh29z3Ob0BeHvjj0pdkm9KXd5wFL9QCHtt/e7PXXl3+8xhpmM2fW/v0mAAAAFAdL9VAUesZh6tSpbp95SLmvsrL2/cUXm913n9m//138QVPK26+j93luE/ri0BeHvjTbhL60+zxg4ISCdMOZNGmS2xtQR+jbf3+z733P7ItftKLrCNuvo/Z5bhP64tAXh74024S+tPs8YKke4JAGSm+/bfavf5l9+culrgEAAEgTS/VQFHrGYfLkyW6feaAvDn3p9nluE/ri0BeHvjTbhL60+zwo+cDppptuso033tjKy8tt1113tVdeeaXJ88+bN8/OPPNMW2+99ax79+62+eab2/Dhw9ustyPxvtaVvjj0pdvnuU3oi0NfHPrSbBP60u6zjr5U76GHHrLjjz/ebr311jBouv766+1vf/ubvfvuu9a3b98Vzr9s2TLbc889w9d+9rOf2YABA8LIuFevXrbddtu16HeyVA/tAUv1AAAAWt/KjA26WAldd911duqpp9pJJ50UPtYAatiwYXbXXXfZRRddtML59fk5c+bY2LFjrWvXruFzmq1C66iurrYPP/zQNtlkE+vcubOl0PfOO7VvbaGmptqmT59h/fr1tU6dVm77zZ9vrS7F67ctee7z3Cb0xaEvDn1ptgl9afd5ULKBk2aPXn31VbtYx1v+/zp16mT77befvfTSS41+z+OPP2677757WKo3dOhQW3fdde273/2uXXjhhQWv4KVLl4a3/FFltnPkv9f355+uqqqysrKyutNq01uh05WVleG82ekuXbqE789Oi86ff1qDP034Zac1NaqG7LTedP5Cp3VefX92urHLEXuZNFDV4NTjZdL5Zs+ebQMHDmzRZZo3r5Ntt13OKivLrG1on1wv8mdUWU1N6+x72ubafrp+Pe57+vlz584NM8tayutp38suR3b78HYfoZ+pbafbRmtfT+x77HsNT4v6svtmT/ueLpMef+j63XDDDUOvp31P583+b9too43Cx+x77Hvse51b9XpamcV3JXuN06xZs8IG6devX73P6+NPP/200e/54IMP7JFHHgnfp9c1XXrppfb73//errrqqoK/55prrgnTb9mbbkyiv4ws77zzTniTN954w95///1wevz48WHULXrd1ZQpU8JpzXZNmzYtnB49enS4HDJq1Kjw+isZOXKkLViwIJxW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xewrNvri0Jdmm9AXh7449KXZJvSl3WcdfanesmXL7NVXX7X99ttveVCnTuHjl156qeD3/fKXv7S+ffvaKaec0uzvWLp0adgg+W/Z4Ct739jpqqqqeqc1oGvqtEbn+aez8Wh2Wm8NT0v+aX1//mn9/KZOqy//dLEvk05nh6MsxmW69tqaMGiSLl1yRblMumF7vp66dOnS6tdTzGXKzutt38suk7af59tT9h8L+x77Hvte/dPq87rv6bSuX6/7XsPbCPse+x77nrX69dRSJR04zZo1K2yEfv361fu8Pv70008b/Z4XXnjB7rzzTrvjjjta9DuuueaaMIrM3jSbJRUVFeH9O++8E97kjTfesPfffz+cHj9+vH344YfhtF5zNWXKlHB67NixNu3/T5WMHj06XAYZNWpUmPmSkSNHhhfXyfDhw8PoXVemTuu9PtZp0fl0ftH36+dk20Y/X/T79HtFHdlrwNSnTlG3+ot9mZ566qnQXIzLNGnSkrrr5eyz50VfJv1e/aG2SZMmub2e9P3qa+3raVUuk77n6aefDp/3uO/Nnj07tKrR4+1JS4u1/6mBfY99j31v+WXK7pvV6W3f0/l0vepjXc/e9j1dJjWrMbt87Hvse+x71urXU7tYqvfJJ5/YgAEDwoXefffd6z5/wQUX2PPPP28vv/xyvfPrQm+77bZ2880324EHHhg+d+KJJza5VE8zTnrLaMZJg6c5c+ZY796960avnTt3rnc6e1YlO62ZF70VOq1Rq86bndYzCvr+7LRkzwJnp7t27RpGudlpjYzVkJ3OnvUsdFrn1fdnpxu7HLGXSb+rW7dude0xl+n003N2221l9otfmP385/GXSY26bnVevXm7nvJnxaQ1r6dVuUxq1J1Fjx49wuXztu/pvX6ffo+6vN2e1KKPu3fvHt6z77Hvse/Vntbv0n2z3uv8nva97FlmnTe7nj3tezqvvmfx4sVhuVT+5WPfY9/ryPteVSteTxob6I/+uv8DuFqqt9pqq9kjjzxS78h4J5xwQhgM6QVq+f773//aDjvsEDZEJpuG04Z59913bdCgQU3+Tl7jVLq1rmecYXbrrRYGTpdd5q+v2OiLQ1+abUJfHPri0Jdmm9CXdp919Nc4aSZjp512smeffbbeQEgf589AZbbcckt78803wwAqezv00EPtK1/5SjidLcNDcWgkrulN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hq5TbX/dLvR786+bhvcR+l79fn1OP6M17yN0uRYsWBD2t/zrRk3a/urI7iP0eX2vtutGG20Ufkdj1422oba/blP6udl1o/PrMum61WXM7iPyrxvtLzqt+9Hsfju7TC25j9B2mDRpUmiX1rqPyC6Tert27dri+wjJrtv11luv1e4jdFq9atJ2bel9hL6m78t+XmvdR6gpu0zZPtqS+wj9Lp1P+2e2j7bGfUS2H3788cd19+ktuY/QvqDzZPt/a91HrOrjCG07/Xxdfn1va9xH6E2XX7+30HXT2H1Edr+n28Uaa6zRavcRq/o4QpdX+4Poem6t+4hVfRyhn6336tT2a637iFV9HKEeter36/pprfuILm30OKKl9xHa11qqpAMn7SjaKNrp8unjCRMmNPo9n376aaPn1+cbc80119gvfvGLFT5/3333hY2d0WulNtlkk7BBG3vN1IknnhgehDzwwAN1g6/MN7/5zbATaUd7/vnn631NO8sZZ5wRLuddd921ws/9gaZ1rL99/esjbIst3qv3tREj9jez3cMSxlGjRoXPnXBC7demTetvt92m7zX7/vfvtC5dane022+v/frXvvY1M9vD9tlntO244/h6P3fMmD1t6tTd7PXXK2zEiBHhc4ceunywdt11tQPTE0/8s622Wu20VZZ+wgkn2Ouvvx4u68svv1zv5+oOWDOF2kH//Oc/1/uadtLTTjstLKl8//33V7i+tt1227AdR48eHS5vvs033zxcP7rB5M80Zr71rW/Z4MGD7eGHHw53MPkOPPDAcEPVje7ZZ5+t9zXdsahJN+bGrptTTz3Vxo0bF667N998s97X9B/g97//fXvrrbds2LBh9b6mO57DDjssbIfnnntuhSnvvfbay/bdd9+wn02cOLHe13beeedwJ6Eb/JNPPrnCNjzppJPC777//vvDnVq+Y445Jvw8XTcvvvhiva/pzuXMM88Md1iNXdYf/vCHYbtrP548eXK9r22xxRbhZ+tJCy2VzafbhGZ8tY0bbgc55JBDbMcdd7R//OMfK1znX/3qV+v+I3j66afrfU3/Ieg2p+W4es2j7njznXzyyaFXd4QN9xfdH5x++unhgfkjjzxS72u6g/7ud78bvvbf//43bI98mv0+6KCD7JlnngnXbb5S3kfoCSb9zPfeq38foZ7jjz++3n1E/mU99NBDw/fp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C+bF3Llzbc8997SuXbuGwfDbb79tv//978MDGy/Xaf620+1Dvv3tb5sH1157bXhi4cYbbwwPGvTxb37zG7vhhhvMg+9///thm/35z3+2N998M9yv6AGrBsse74u17f7v//7Pbr311vCgWg++9P/IkiVLSt6mr++1117hOi6FpvoWLVoU/t/VIF7vNcjTk296EOuhTzbffPNwO9F+qPtAPSmi/XHmzJku+jKPPvpo+L9YA4S21JI+DZTy7w//+te/uumbNGlSuH1ocPzcc8/ZG2+8EfbH8vLyNmt0S4cjBxoaMmRI7swzz6z7uLq6Orf++uvnrrnmmpwn2oUfffTRnGczZswInc8//3zOq969e+f+9Kc/5bxYsGBBbrPNNss9/fTTuX322Sd3zjnn5Dy4/PLLc9ttt13OqwsvvDC311575doLXa+DBg3K1dTU5Dw4+OCDcyeffHK9zx1xxBG5Y489NldqixYtynXu3Dn3xBNP1Pv8jjvumLvkkkty3u6LdZ32798/99vf/rbuc/Pmzct1794999e//rWkbfk+/PDD8PXx48fnPP8/9sorr4TzTZ48Oeex77PPPgvne+aZZ3Je+j7++OPcgAEDchUVFbmNNtoo94c//KHN2wr1nXDCCbnDDjss50FjfUcffXTuuOOOK1mTZ8w4YQXLli0LsxF6JjPTqVOn8PFLL71U0rb26LPPPgvv+/TpY95oadKDDz4Ynn3Skj0vNGN38MEH19sHvdBSIz17uemmm9qxxx7raunC448/bjvvvHOYwdEy0R122MHuuOMO83o/c//999vJJ58clop4oKVvzz77rL333nvh49dffz08m37ggQeWOs2qqqrC7bXhM75aAudp1jPz4Ycf2qefflrvNqwlP1r2zf8jq/b/iG4nvXr1Mo+35dtvvz1cv5rF8KCmpsa+973v2U9/+tOwSsAjzeTofnqLLbawM844w2bPnm1ett2wYcPCrKJmiNWo2623l0WUCgMnrGDWrFnhP+h+/frV+7w+1n+EWLk7IL0mQcunBg8ebF5oecUaa6wR/jq41n9rOcPWW29tHmggp+Upeq2YN/rP45577rGnnnoqLOnSg8O99947vPbEgw8++CB0bbbZZjZixIjwn/GPfvQju/fee80b/Sc8b968sNbfi4suusiOOeaYsDxFyx018NTtVwPkUtNrJvXk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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "from statsmodels.distributions.empirical_distribution import ECDF\n", + "\n", + "x = np.sort(data)\n", + "y = np.arange(1, len(data)+1) / len(data)\n", + "\n", + "ecdf = ECDF(data)\n", + "x = np.linspace(min(data) - 1, max(data) + 1, 1000)\n", + "y = ecdf(x)\n", + "\n", + "# Находим точки, где F(x) переходит от 0 к основному росту и от роста к 1\n", + "x_left = x[y == 0][-1] # Последняя точка, где F(x)=0\n", + "x_right = x[y == 1][0] # Первая точка, где F(x)=1\n", + "\n", + "# Разделяем данные на 3 части\n", + "mask_left = (x < x_left) # F(x) = 0\n", + "mask_mid = (x >= x_left) & (x <= x_right) # Основной рост\n", + "mask_right = (x > x_right) # F(x) = 1\n", + "\n", + "# Рисуем каждую часть своим стилем\n", + "plt.figure(figsize=(10, 6))\n", + "plt.step(x[mask_left], y[mask_left], '--', color='blue', where='post', label='F(x)=0') # Пунктир слева\n", + "plt.step(x[mask_mid], y[mask_mid], '-', color='blue', where='post', label='ЭФР') # Сплошная основная часть\n", + "plt.step(x[mask_right], y[mask_right], '--', color='blue', where='post', label='F(x)=1') # Пунктир справа\n", + "\n", + "# Настройки графика\n", + "plt.title(\"Эмпирическая функция распределения\")\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"F(x)\")\n", + "# Добавление пунктирных линий для F(x) = 0 и F(x) = 1\n", + "plt.axhline(y=0, color='gray', linestyle='--', linewidth=1, label='F(x) = 0')\n", + "plt.axhline(y=1, color='gray', linestyle='--', linewidth=1, label='F(x) = 1')\n", + "\n", + "plt.grid(True, linestyle=':')\n", + "plt.xticks(np.arange(np.floor(min(data)), np.ceil(max(data)) + 1))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "639c228f", + "metadata": {}, + "source": [ + "### 3. Гистограмма частот" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "09541433", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1EAAAHWCAYAAACWrwPjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbN5JREFUeJzt3Qd4VFX+xvF30gMhARIgBAIk9CKINLGgosCioiBr3bWy6tpW1LWuDf2v2Na6rBXbrmBHrCiiggpIR2mhd0JPKKkk83/OnUxISAKZZCZ3yvfzPMMMdyZ3zsydmcybc87vOJxOp1MAAAAAgGoJq97NAAAAAAAGIQoAAAAAPECIAgAAAAAPEKIAAAAAwAOEKAAAAADwACEKAAAAADxAiAIAAAAADxCiAAAAAMADhCgAAAAA8AAhCgAAAAA8QIgCAD/x1ltvyeFwVHnavHmz3U0EAACSIuxuAACgvEceeURpaWkVtjdu3NiW9gAAgPIIUQDgZ4YOHarevXvb3QwAAFAFhvMBQIAO+1u/fn3ptuLiYnXv3t3abq4va8WKFbrooovUpEkTxcbGqmPHjvrHP/5hXffwww8fdQihOf3444+l+/rwww/Vq1cvaz9JSUn685//rC1btpS7v6uuuqrS/bRr1670Nm3atNG5556rb7/9Vscff7xiYmLUpUsXffLJJ+X2tWfPHv3973/Xcccdp7i4OMXHx1shc/HixeVuZ9rovp9FixaVu860Lzw83Lruo48+qtBOc/9HGjt2rHWduc+y3nzzTQ0cOFBNmzZVdHS01eaXXnrpGEfs8GM291lZu8s+xz/99JMuvPBCtWrVyrqP1NRU3XbbbcrNza2wz7o8tlUd17Knsq9JAAhm9EQBQBD473//q99//73C9t9++02nnnqqIiMjdd1111lf5NesWaPPP/9c//znP3XBBReUCzfmy3rnzp2t27qZ/xsmnF199dXq06ePFTK2b9+u559/Xr/88osWLlyohg0blv6M+fL/+uuvl2tLgwYNyv1/1apVuvjii/XXv/5VV155pRVQTHiYMmWKBg0aZN1m7dq1+vTTT63tZoijuc9XXnlFp512mpYtW6aUlJRy+zRhzOzHtMvt7bffVlRUlPLy8io8PxEREVq6dKnV/p49e5ZuN4/V7OtIJjB17dpV5513nvWz5nm88cYbrRB70003yRtMmMnJydENN9ygxMREzZkzRy+++KI1J85cZ9exvf7663XWWWeV/uzll1+uESNGWPfjZsIcAIQEJwDAL7z55ptO87E8d+7cat1u3bp11v/z8vKcrVq1cg4dOtTabq53GzBggLNBgwbODRs2lNtHcXFxpftu3bq188orr6ywvaCgwNm0aVNnt27dnLm5uaXbv/jiC+s+H3zwwdJt5ufr169/1Mdg7sf83Mcff1y6LTs729m8eXNnz549S7eZx1ZUVFTuZ83jjo6Odj7yyCOl23744Qdrf5deeqkzMTHRmZ+fX3pd+/btnZdddpl1/YcfflihncOGDXPefPPNpdt/+uknZ2xsrHP48OEVHkdOTk6FxzJkyBBnenq681jS0tKcV1xxRblt7nab86Pdx9ixY50Oh6PccbTj2JZlrnvooYeO+pgBIFgxnA8AAty4ceO0e/duPfTQQ+W279y5UzNmzNA111xjDQ0rywy98sS8efO0Y8cOq9elbA/NOeeco06dOunLL7/0uN2mF8n0ZLiZoXpXXHGF1fORmZlZ2qMVFub6VVVUVGQ9TjPEzgxbW7BgQYV9Dhs2zHpsn332WenQONODY3q8qmKenwkTJig/P9/6v+nJMr0rCQkJFW5rhrq5ZWdna9euXVavmOkxM/8/GjMEsDoVFsvex8GDB637OOmkk8wfPa3nJhCOLQAEO0IUAAQw88X9scce0+23365mzZqVu858sTe6detW6/vZsGGDdW7Cy5HMF2339Z4wQ82O/MLfoUMH69w9t8YMk3v22WfVvn17K1CZuTpmyJgZylZZaDFD28xcnjfeeMP6vzkfOXKkFdCqYsKCGZo3efJkK7R88MEH1tC2ypjhbWZIW/369a0hbqYt9913n3XdsUKUCULTp0/Xe++9Z4UWE44q+5mNGzda849MNUYTGM19mKBW9j78/dgCQLBjThQABLAnnnjC6qm58847rV6aYGMC4gMPPGD1uDz66KNWsDCPd/To0VbAqoy5rZnflJGRYc0hcvdKVcUdvEwPlJmLZOYhmeIRZp5ZWWa+0ZlnnmkFi2eeecYq+GDmWn311VdW0KuqPW4mbJkQdumll1Z5G9PbZuaDmYIad999t3VfJrCZAg8mWB3rPgAAdYMQBQABauvWrdbkf1MIwBRtODJEpaenW+dLliyp9X21bt3aOjfBxASMssw29/WeWL16tTVErWxv1MqVK61zUyTBMNX0zjjjDI0fP77cz2ZlZVm9UpUxlfxMiHJXrTM/b3qAjsYErx49emjTpk1WkYvKhsSZgg1myJ8JZWWH0P3www/VerymvbNmzbIKYriHK5oqg6b6oJspDmKeA1MMwwxtdJs6dWpAHVsACHYM5wOAADVmzBhrCJ+pblcZEyAGDBhgDWkzQ8TKctUFqD6zbpWZ0/Pyyy+Xzh0yvv76ay1fvtwaEleTEDhp0qTS/+/bt0/vvPOOVXI8OTnZ2mZKkx/ZVtO7dGRZ9cpCkRny5y7LfSym4p4p720CzpFlyN1MW4yy7THD60wPVnWZXjQzBM8MCTQnc5/Hug9zuWy1wUA4tgAQ7OiJAoAAZdZYevfdd60hZVV54YUXdMopp+iEE06wSlubMuFmvpEpFnDkekrHGvJmhg6auUJmfo4ZkuYug216jUz5bE+Z+U+jRo3S3LlzrTBoAoHZZ9lQYtaSeuSRR6z7NXOKTE+NeczunpiqXHvttVZZ9MqKQ1Tl+++/t0KEGTJYmcGDB1vPtSleYcp9HzhwQK+99poVQLZt2yZvMMP32rZta/VOmaBo5nJ9/PHH2rt3b0AdWwAIdoQoAAhQpsfmaPNrDDNEbfbs2da8IrPGkVkryQzPMkPdPGV6aOrVq6fHH3/cmq9j5uqY6nrmC3jZNaKqyxSLMOsfmflcZtiYCQHvv/++hgwZUm4ekSn2YKrnmetMYDAh4Z577jnqvk2hiKqG+1XFPB5zqoopvGCGF95///1WyDG9ZWYtJ9MrZHq+vMEEGjNs8G9/+5s1TNNUyzPP8c0332wdy0A5tgAQ7BymzrndjQAAhBbTw2GGtX3xxRd2NwUAAI8xJwoAAAAAPECIAgAAAAAPEKIAAAAAwAPMiQIAAAAAD9ATBQAAAAAeIEQBAAAAgAeCfp2o4uJibd26VQ0aNKjWqvUAAAAAgpPT6dT+/fuVkpKisLCa9ycFfYgyASo1NdXuZgAAAADwE5s2bVLLli1r/PNBH6JMD5T7iYqPj7e7OUGpsLBQ3377rQYPHqzIyEi7mxOSOAb24xjYj2NgL55/+3EM7Mcx8P9jsG/fPquDxZ0RairoQ5R7CJ8JUIQo371Y69WrZz2/fGDYg2NgP46B/TgG9uL5tx/HwH4cg8A5BrWd5kNhCQAAAADwACEKAAAAADxAiAIAAAAADxCiAAAAAMADhCgAAAAA8AAhCgAAAAA8QIgCAAAAAA8QogAAAADAA4QoAAAAAPAAIQoAAAAAPBDhyY0BWxUVST/9JG3bJjVvLp16qhQebnerAAAAEGJs7Yl66aWX1L17d8XHx1un/v376+uvvy69Pi8vTzfddJMSExMVFxenkSNHavv27XY2GXb55BOpTRvpjDOkyy5znZv/m+0AAABAqISoli1b6vHHH9f8+fM1b948DRw4UOeff76WLl1qXX/bbbfp888/14cffqjp06dr69atuuCCC+xsMuxggtIf/yht3lx++5Ytru0EKQAAAITKcL5hw4aV+/8///lPq3dq9uzZVsAaP368JkyYYIUr480331Tnzp2t60888USbWo06H8J3662S01nxOrPN4ZBGj5bOP5+hfQAAAAitOVFFRUVWj9PBgwetYX2md6qwsFBnnXVW6W06deqkVq1aadasWVWGqPz8fOvktm/fPuvc7Muc4H3u53XhwoUKC/Nu52aD+fPV8cgeqCOD1KZNynj9de3v1Uu+YIaTmlAfCMeA17h9OAb24xjYi+fffhwD+3EM/P8YeOvY2B6ifv/9dys0mflPZt7TpEmT1KVLFy1atEhRUVFq2LBhuds3a9ZMmZmZVe5v7NixGjNmTIXt3377rerVq+eTxwCXbabgg5e1WLmyWrfbv3KltiQnyxe2bNmi3377TYFg6tSpdjch5HEM7McxsBfPv/04BvbjGPjvMcjJyQmOENWxY0crMGVnZ+ujjz7SlVdeac1/qql7771Xt99+e7meqNTUVA0ePNgqXgHvMz1QJkDdMeFXFTXwbpDpt61A71Xjdk+vKNCv2RvkbYV7tmjPlBc1Y8YM9ejRQ/7K/FXFfFgMGjRIkZGRdjcnJHEM7McxsBfPv/04BvbjGPj/MXCPUgv4EGV6m9q1a2dd7tWrl+bOnavnn39eF198sQoKCpSVlVWuN8pU50s+So9DdHS0dTqSeRJ5MfuGewifCVDOpLZe3fecxm209af3lLx/V6VVUIolZTZI0pyug+QM8/6cqKJDTuXm5lqPMRBeP7zO7ccxsB/HwF48//bjGNiPY+C/x8Bbx8XvFtstLi625jSZQGUe5LRp00qvy8jI0MaNG63hfwgNxWHhGnPmda7LR15Xcm6uN7cDAAAA6oKtPVFm6N3QoUOtYhH79++3KvH9+OOP+uabb5SQkKBRo0ZZQ/MaN25sDcW75ZZbrABFZb7Q8k3Hk3TD8Ps09pt/q3Hu4S7YPfUS9I/BN1nXAwAAACERonbs2KErrrjCmk9jQpNZeNcEKDOG0Xj22WetYVRmkV3TOzVkyBD95z//sbPJsIkJSi32bdeD348v3fbcyZcSoAAAABBaIcqsA3U0MTExGjdunHUC2ux1VWUscoQp3Fms9rs32d0kAAAAhCC/mxMFVCVtzxbr/NfUbtZ5h10bbW4RAAAAQhEhCgEjba8rRE3p4Cos0nHnBtdiuwAAAEAdIkQhIEQX5qvlvp3W5e/a91OxHFaRiaScLLubBgAAgBBDiEJAaJO1zTrPionT1gZNtKGRa62w9gzpAwAAQB0jRCEgtNmz1Tpf16iF5HBoZVLrw0P6AAAAgDpEiEJASC+ZD7W2cYp17g5RHXYRogAAAFC3CFEIqMp86xu5Q1Qr65wKfQAAAKhrhCgEhDT3cL7GLazzjCYlPVFU6AMAAEAdI0QhoMqbu0OUOS8MC1d8QY6a799lc+sAAAAQSghR8HvxeQeUlJNtXV5XMpyvMDzSVWSCIX0AAACoY4Qo+L02e11D+TLjGisnKrZ0+8qyQ/oAAACAOkKIQsAUlXAP5XNzF5foSIU+AAAA1CFCFPxeeukaUa6hfG4ZJWXOWXAXAAAAdYkQhcApKlEyB6rCcL5dG+VwFtvSNgAAAIQeQhQCdjjfhobJyg+PVOyhfKVmbbepdQAAAAg1hCj4N6dTaSWFJdY1Lj+crzgsXKsTU63LVOgDAABAXSFEwa81ObhXcQW5KnKEaWPD5ArXly66S3EJAAAA1BFCFPyauxdqU0Iza22oI61yV+ijzDkAAADqCCEKATEfav0RlfmOrNBHTxQAAADqCiEKAVJUovIQ5a7Ql75nsyKKDtVp2wAAABCaCFHwa+klw/nWHlGZz21LfBMdjIxRdNEhtd67rY5bBwAAgFBEiEJg9EQdsUaUm9MRVjoviiF9AAAAqAuEKPitsOIitcraVukaUZXNi+pIiAIAAEAdIETBb6Xs22kN0zML6m6NT6rydivdPVFU6AMAAEAdIETBb6WXVuZrbg3bq4q7uAQL7gIAAKAuEKLg92tEHW0oX9nhfG32blX0oYI6aRsAAABCFyEKAVtUwm1HXGNlR9dXhLPYKnUOAAAA+BIhCn4/nG9tFWtElXI4lFEypK89Q/oAAADgY4QoBPxwPmOlu0IfxSUAAADgY4Qo+KWoQ4Vqkb2jWsP5ylXoo8w5AAAAfIwQBb9k1ocKk1P7ouppd72EY96eCn0AAACoK4Qo+PV8KGson8NR7eF8rbMyFVuQ5/P2AQAAIHQRouCX0va6Q9QxikqU2FMvQTvrNbQut99NbxQAAAB8hxAFv5S2Z2u150O5rWzinhdFiAIAAIDvEKLg32tEVaMy35FD+jpQoQ8AAAA+RIiCX5c3X1uTEEVPFAAAAHyIEAW/E5efo6YH91qX1zeq3pwoI6M0RNETBQAAAN8hRMHvtCnphdpZv6EORNer9s+tTkq1zlP271J83gGftQ8AAAChjRAFvy1vvtaDohLGvpg4bW2QZF1ut2uTT9oGAAAAEKIQFEUljpwX1ZEhfQAAAPARQhQCfo2oslYmucucE6IAAADgG4QoBMUaUW4rm1BcAgAAAL5FiIJ/cTprVN68QoW+nZQ5BwAAgG8QouBXEnOyFZ9/UMVyaFPDZI9/fnWiq0Jfk5wsNc7J9kELAQAAEOoIUfDL+VBbEpoqPyLK45/PjYrRhpLwxZA+AAAA+AIhCv5Zmc+DRXarqtDXYSchCgAAAN5HiIJfSd9T8/lQR1boo8w5AAAAfIEQBT8tb17zEJVRUqGv/S6KSwAAAMD7CFHwK21Ky5vXfjhfRzOcz+n0WtsAAAAAgxAFv+FwFpeWN69NT9Taxi11yBGmhPyDanZgtxdbCAAAANgcosaOHas+ffqoQYMGatq0qYYPH66MjIxytzn99NPlcDjKnf7617/a1mb4Tsq+XYouKlRBWIS2xDep8X4KIiK1vqQnqwND+gAAABBMIWr69Om66aabNHv2bE2dOlWFhYUaPHiwDh48WO521157rbZt21Z6evLJJ21rM3xfmW9Do+YqDguv1b7c86Ko0AcAAABvi5CNpkyZUu7/b731ltUjNX/+fA0YMKB0e7169ZSc7PnCqwi9ohJuq0yFvoxfqNAHAACA4ApRR8rOzrbOGzduXG77u+++q//9739WkBo2bJgeeOABK1hVJj8/3zq57du3zzo3vVzmBO8rLi62zqMjHHKG17yQQ/uSELUxMUXRtdiPsbZpSXGJ3RtrtS9HhEOxsbHWY/Tn14+7bf7cxmDHMbAfx8BePP/24xjYj2Pg/8fAW8fG4XT6R/ky8yX1vPPOU1ZWln7++efS7a+++qpat26tlJQU/fbbb7r77rvVt29fffLJJ5Xu5+GHH9aYMWMqbJ8wYUKVwQv+4cRHHlGzBQu08KabtHHQoFrtK27zZp158806FBOjLydMkMKooQIAABDqcnJydNlll1mdN/Hx8YEfom644QZ9/fXXVoBq2bJllbf7/vvvdeaZZ2r16tVq27ZttXqiUlNTtWvXrlo9UajawoULrblqd3+9Uc7EtBrv59uXrlPrvdv05z89prmtj6tVm8KLi7ToqT8qquiQzrzxNW1uWLPhoAXb12r7hHs0Y8YM9ejRQ/7K/FXFzCscNGiQIiMj7W5OSOIY2I9jYC+ef/txDOzHMfD/Y2CyQVJSUq1DlF8M57v55pv1xRdfWF9UjxagjH79+lnnVYWo6Oho63Qk8yTyYvaNsJJenvxDTjmLHDXaR2RRoVpmbbcuZzRsqfwa7uewCK1p3FKdd65X6+2btKZB8xrtxTym3Nxc6zEGwuuH17n9OAb24xjYi+fffhwD+3EM/PcYeOu42DrGyXSCmQA1adIkq4cpLe3YvRiLFi2yzps3r9mXYvinVlmZCncW60BUrHbWb+SVfbor9FFcAgAAAN5ka0+UKW9u5ipNnjzZWisqMzPT2p6QkGBN5l+zZo11/dlnn63ExERrTtRtt91mVe7r3r27nU2Hl6XtKVlk16zv5KhtL5TLyiTKnAMAACDIQtRLL71UuqBuWW+++aauuuoqRUVF6bvvvtNzzz1nrR1l5jaNHDlS999/v00thq/XiPJGefMKIYoFdwEAABAsIepYNS1MaDIL8iL4pe1190R5L0S5h/O1273JKjRRVMsFfAEAAACDus/ws4V2U7y2z80JTZUTGa3ookKr6h8AAADgDYQo+NdwPjMnykucjjCtSmxlXW7PkD4AAAB4CSEKtqtXkKvkA3u8Pieq7LwoKvQBAADAWwhR8Jv5ULvqJWhfTJxX970yydUTRYU+AAAAeAshCn40lM+7vVDGypLiElToAwAAgLcQouBH5c29Nx/KLaNkOJ8pXBF1qNDr+wcAAEDoIUTBdm3c5c29PB/KyGyQqH1R9RRZXFRaARAAAACoDUIUbJe+x71GlPd7ouRwHB7Sx7woAAAAeAEhCvZyOpW+Z7PPeqLKVuhjXhQAAAC8gRAFWzXK3aeE/IPW5fUNm/vkPtwV+ihzDgAAAG8gRMFWaSVD+TbHN1F+ZLRP7iOjZDhfe0IUAAAAvIAQBVul7/VdefMjh/O13pupmMI8n90PAAAAQgMhCkFbmc9td/2G2h0brzA51W63a/4VAAAAUFOEKPjFGlHrfVGZr9JFdxnSBwAAgNohRMFW6SUhaq0PFtqtbNFdypwDAACgtghRsI3DWaw2e7f5fDifsYoKfQAAAPASQhRsk7x/t2IP5aswLFybE5r59L4OV+hjrSgAAADUDiEKts+H2tiwuYrCwn16X+4KfS337VRcfo5P7wsAAADBjRAF26SVVObz9XwoY19MnDLjGluX6Y0CAABAbRCiEPSV+Y7sjaJCHwAAAGqDEAXbe6J8XVTiyHlRHanQBwAAgFogRMH2nqh1jeomRK0sqdDHcD4AAADUBiEKtogoOqRWWZl1Nieq7HA+ypwDAACgNghRsEVq9nZFOIuVExmt7XGJdXKf7rWimh7cq4a5++rkPgEAABB8CFGwRRv3fCgzlM/hqJP7zImK1aaS9ag6MKQPAAAANUSIgi3SS+dD1c1QPreMkt6oDhSXAAAAQA0RomBvUYk6qsznttJdoY95UQAAAKghQhRskbbXHaLqtifq8FpRDOcDAABAzRCiYIu0PWXmRNkRosxwPqezTu8bAAAAwYEQhToXW5CnlP27rMtr63g435rElipyhKlR3n41Obi3Tu8bAAAAwYEQhTrXJsvVC7UnNl7ZsQ3q9L7zI6K0vlFz6zJD+gAAAFAThCjUuTYlQ/ncYaaulS66S4U+AAAA1AAhCnUuzb1GVB0P5atYXIIQBQAAAM8RomDbGlFr67iohNtK91pRhCgAAADUACEKIbNGlFtGyVpR1pwoKvQBAADAQ4Qo2Dicr27XiHJb3yhFBWERiivIVYt9O21pAwAAAAIXIQp1KiF3vxrn7rMur29oT4g6FB5RWlq9PUP6AAAA4CFCFGzphdraIEm5UTG2tWNlyZC+joQoAAAAeIgQBVvmQ5khdXbKcFfoo8w5AAAAPESIgk1FJewNUatKK/Sx4C4AAAA8Q4hCnUovGc5nV3nzIyv0td+9SWHFRba2BQAAAIGFEIWQKm/utimhmfIiohRzqECtsjJtbQsAAAACCyEKdcfpVJvS8ub2hqjisHCtSky1LjOkDwAAAJ4gRKHOND2wR/UL83TIEWb1BNnNXaGvAxX6AAAA4AFCFOpM+l7XUL5NDZtZazXZbWVJcYmOVOgDAACABwhRqDNpe0qG8tlcVOLIMuftGc4HAAAADxCiEHJFJY4cztd2z2ZFFhXa3RwAAAAECEIU6kzaXv8KUVsbNNH+qFhFFhepTUkvGQAAAHAshCjUmfSSoLK2kb0L7ZZyOFh0FwAAAB4jRKFOhBcXKbVkPSZ/6YkqOy+KCn0AAAAIiBA1duxY9enTRw0aNFDTpk01fPhwZWRklLtNXl6ebrrpJiUmJiouLk4jR47U9u3bbWszaqZF9g5FFR+yFrjNbJAof7GqJER1JEQBAAAgEELU9OnTrYA0e/ZsTZ06VYWFhRo8eLAOHjxYepvbbrtNn3/+uT788EPr9lu3btUFF1xgZ7NRA+nuohKNUuR0+E8HaEZJcQkq9AEAAKC6bF2sZ8qUKeX+/9Zbb1k9UvPnz9eAAQOUnZ2t8ePHa8KECRo4cKB1mzfffFOdO3e2gteJJ55oU8tR46IS/jIfqsTKkp6oNnu3KbowX/mR0XY3CQAAAH7O/hVPyzChyWjcuLF1bsKU6Z0666yzSm/TqVMntWrVSrNmzao0ROXn51snt3379lnnZj/mBO8rLi62zqMjHHKGOyu9TbuSELUxqYWiq7iNHfbFJ2hvbAM1yt2vzlmbtDy5bbnrHREOxcbGWo/Rn18/7rb5cxuDHcfAfhwDe/H8249jYD+Ogf8fA28dG78JUeZL6ujRo3XyySerW7du1rbMzExFRUWpYcOG5W7brFkz67qq5lmNGTOmwvZvv/1W9erV81HrYTwx1FS6K6r0uv5fukJU317JerJv5bexS1F6K2npUj0Qv16b+7Y54trW0rCJ2rJli3Xyd2ZYLOzFMbAfx8BePP/24xjYj2Pgv8cgJycnuEKUmRu1ZMkS/fzzz7Xaz7333qvbb7+9XE9UamqqNdcqPj7eCy3FkRYuXKht27bp7q83ypmYVultvl/nKm/+ZHaqFs4Jlz95MLq1/qSlmv/rJv2rXvm2FWxfq+0T7tGMGTPUo0cP+SvzVxXzYTFo0CBFRkba3ZyQxDGwH8fAXjz/9uMY2I9j4P/HwD1KLShC1M0336wvvvjC+qLasmXL0u3JyckqKChQVlZWud4oU53PXFeZ6Oho63Qk8yTyYvaNsDBXoYj8Q045ixwVrjdzjZrv22VdXpnQQvmV3MZOyxNd86La7thYoW3mMeXm5lqPMRBeP7zO7ccxsB/HwF48//bjGNiPY+C/x8Bbx8XWMmlOp9MKUJMmTdL333+vtLTyvRi9evWyHui0adNKt5kS6Bs3blT//v1taDFqonXWNoXJqezo+toT63+9gStLKvSx4C4AAAD8vifKDOEzlfcmT55srRXlnueUkJBgTeY356NGjbKG55liE2Y43i233GIFKCrzBY60PVsPL7Lr8K9eKGNlkpnLJaVmb1f9/BwdjGbuHAAAAPy0J+qll16yKvKdfvrpat68eenp/fffL73Ns88+q3PPPddaZNeUPTfD+D755BM7mw0PpZdU5ltrQpQfyoqN1476jazL7Xdvsrs5AAAA8HMRdg/nO5aYmBiNGzfOOiEwpZVZaNdfZSS1VtODe9V+1wYtSulod3MAAADgx2ztiUIIDufzU+55UR13brC7KQAAAPBzhCj4XJu9ARCiSuZFUVwCAAAAx0KIgk/F5x1Qk5ws6/L6hs3lr1YmuSv00RMFAACAoyNEoU56obbHNfbrqnerSnqikg/ssYIfAAAAUBVCFBTqRSWMA9H1tDm+iXWZ3igAAAAcDSEKPpVeUlTCX8ubVzakj+ISAAAAOBpCFHwqrWSNqHWNAiBElVTooycKAAAAR0OIgkK9Mp8bFfoAAABQHYQo+I7TGTBzotwL7pYO56vGQtAAAAAITYQo+EyTg1lqUJCrIkeYNjVMlr9bnZiqYjnUOHefkkrKsgMAAABHIkTB5/OhNic0VUFEpPxdfmS0NjRyhb32DOkDAABAFQhR8JnDQ/n8fz6UGxX6AAAAcCyEKPg+RDX2//lQR86LokIfAAAAqkKIgs+k7Q2cNaLcVlGhDwAAAMdAiILPpJUstLs+ACrzuWW414qiQh8AAACqQIiCT4QVF6l1VuCsEeVm2loYFq74ghw137/L7uYAAADADxGi4BMp+3YquuiQ8sMjtbVBkgJFYXhkaSEMhvQBAACgMoQo+ER6SVGJ9Y2aqzgsXIFkZdkhfQAAAMARCFHwaVGJQBrK55ZRUlyiIxX6AAAAUAlCFHwiENeIOnKtKBbcBQAAQGUiVEMHDx7U9OnTtXHjRhUUFJS77m9/+1tNd4tg64kKoMp8FYbz7dooh7PY7uYAAAAgGELUwoULdfbZZysnJ8cKU40bN9auXbtUr149NW3alBCFgFxo121Dw2SrIEbsoXy12r9H2+xuEAAAAAJ/ON9tt92mYcOGae/evYqNjdXs2bO1YcMG9erVS08//bT3W4mAEnWoUC2zdwTsnChTCGN1Yqp1uWNWpt3NAQAAQDCEqEWLFumOO+5QWFiYwsPDlZ+fr9TUVD355JO67777vN9KBJRWWdsUJqf2RdXTrnoNFYjci+52yqIfCgAAAF4IUZGRkVaAMszwPTMvykhISNCmTZtqsksEYXlzqxfK4VAgcheX6EiIAgAAgDfmRPXs2VNz585V+/btddppp+nBBx+05kT997//Vbdu3WqySwSRtL2BOx/KbaW7zDnD+QAAAOCNnqjHHntMzZs3ty7/85//VKNGjXTDDTdo586devXVV2uySwSRNntclfnWB2BlviMr9LXL3l7zEpYAAAAISjX6fti7d+/Sy2Y435QpU7zZJgS49JLy5msDsKiE25b4JjoQFau4gly1s7sxAAAACPyeqIEDByorK8v7rUFQCOSFdt2cjrDSCn1d7W4MAAAAAj9E/fjjjxUW2AWMuPwcNT2417q8PoDnRBkZJcUlmOUHAACAWocowxGgVdfgW21KhvLtrN9Q+6PrK5C550URogAAAFBWjefMjxgxQlFRUZVe9/3339d0twiS8uZrA3go35EV+sxwvly7GwMAAIDAD1H9+/dXXFycd1uDoOmJstaICnDu4XztJf2en293cwAAABDIIcoM5bvzzjutynxAZUUlArm8uduOuMbaG1VPjQpyFLNhg/nLgd1NAgAAQKDOiXI6nd5vCYJCMCy0W8rh0MqGydbFmDVr7G4NAAAAAjlEPfTQQwzlQ0VOp9JLFtoNhjlRxoqSEBVLiAIAAEBthvOZEGXs3LlTGRkZ1uWOHTuqSZMmNdkdgkRi3gHF5x9UsRza2Ki5gsGKksdBTxQAAABq1ROVk5Oja665RikpKRowYIB1MpdHjRplXYfQlJa9wzrfktBU+RGVV24MNBn0RAEAAMAbIeq2227T9OnT9dlnnykrK8s6TZ482dp2xx131GSXCAJt9u20ztcFQVEJt5UNXT1R0Vu2SAcP2t0cAAAABGqI+vjjjzV+/HgNHTpU8fHx1unss8/Wa6+9po8++sj7rURASMveGTxFJUrsjolTpvs/y5bZ2xgAAAAE9nC+Zs2aVdhuSp4znC90pe1zDedbFyRFJdyWll4ovQQAAIAQFlbThXZNcYm8vLzSbbm5uRozZox1HUK9Jyq4QtSS0gullwAAABDCalSd77nnntMf/vAHtWzZUj169LC2LV68WDExMfrmm2+83UYEguJipZXMiVpLiAIAAEAQq1GIOu6447Rq1Sq9++67WrFihbXt0ksv1Z/+9CfFxsZ6u40IALG7dim66JAKwiK0JT64St0znA8AAAC1DlEzZszQSSedpGuvvbYmP44gFLfVtcjuhkbNVRwWrmBSGp02b5aysqSGDe1tEAAAAAJvTtQZZ5yhPXv2eL81CFj1S0LU+iAqb+62T1KBu5AKvVEAAAAhr0Yhyul0er8lCIqeqGCbD+WW27at6wIhCgAAIOTVaDifMWvWLDVq1KjS6wYMGFCbNiGAQ1QwLbRbVl7btkqYOZPiEgAAAKh5iBoxYkSl2x0Oh4qKimrTJgTwcL5gK2/ulpue7rpAiAIAAAh5NRrOZ2RmZqq4uLjCiQAVehyFhaq/Y0dQD+fLa9fOdYHhfAAAACGvRiHK9DZ5g6nyN2zYMKWkpFj7/PTTT8tdf9VVV1nby57M+lTwL9FbtshRXKwDkdHaWb/yIZ6BLi8tzbzwJRMWd7rWwwIAAEBosrWwxMGDB63FeseNG1flbUxo2rZtW+lp4sSJXrlveE/0xo3W+XqzPpSXAra/KTbrn5kgZdAbBQAAENJqNCfKDNvzhqFDh1qno4mOjlZycrJX7g++EVMSotYF2SK7FXTrJq1d65oXdfrpdrcGAAAAgRSixo4dq2bNmumaa64pt/2NN97Qzp07dffdd3urffrxxx/VtGlTqxLgwIED9X//939KTEys8vb5+fnWyW3fPrPKj1RYWGid4H3RGzZY5xsbNVV0eHCVv3dEOBQbG+ua79e5s8I/+0xFv/2mYj97Lblf27zG7cMxsB/HwF48//bjGNiPY+D/x8Bbx8bhrMHYvDZt2mjChAk66aSTym3/9ddfdckll2jdunWeN8Th0KRJkzR8+PDSbe+9957q1auntLQ0rVmzRvfdd5/i4uKs8urh4eGV7ufhhx/WmDFjKmw37TX7gveddP/9arJkieaPHq3NQdxD02L6dPV+9lnt7txZP48da3dzAAAA4KGcnBxddtllys7OVnx8vOo0RMXExGj58uVWuClr7dq16tKli/Ly8rwSoo5k9t+2bVt99913OvPMM6vdE5Wamqpdu3bV6olC1ZwtWihq505dOOIO/dY5uEJUwfa12j7hHqsISg+HQ5G9e8vZsKEObd/uV/O/zF9Vpk6dqkGDBikyMtLu5oQkjoH9OAb24vm3H8fAfhwD/z8GJhskJSXVOkTVaDifCSW//PJLhRBltplKe76Snp5uPejVq1dXGaLMHCpzOpJ5Enkx+8CBA6XV6lbWT1J+kf8EC2/IP+RUbm6uwsLCFNm1qxQeLkdWliLNY27hf+XceZ3bj2NgP46BvXj+7ccxsB/HwH+PgbeOS41C1LXXXqvRo0dbSc/MUzKmTZumu+66S3fccYd8ZfPmzdq9e7eaN2/us/uAh1avts7y4+O1LzrIh0uacN6+vbRihatCnx+GKAAAAPhejULUnXfeaYWZG2+8UQUFBaVD/ExBiXvvvbfa+zlw4IDVq+Rm5lItWrRIjRs3tk5mbtPIkSOt6nxmTpQJae3atdOQIUNq0mz4wsqV1tkBH/ZA+l2FPhOiTIW+wYPtbg0AAAACabHdJ554wqrEN3v2bC1evFh79uzRgw8+6NF+5s2bp549e1on4/bbb7cum/2YwhG//fabzjvvPHXo0EGjRo1Sr1699NNPP1U6XA/2hqiDoRSiDBOiAAAAEJJq1BPlZirl9enTp8Y/f/rppx914d5vvvmmxvtGHQm1nigzL8pgwV0AAICQVeMQZXqRPvjgA23cuLF0SJ/bJ5984o22IdBC1G6FTk+UCVFm0emwGnXmAgAAIIDV6BugWb/JrBFlypybsuSmwMTSpUv1/fffKyEhwfuthP8KtZ6odu2kqCjp4EGpZJFhAAAAhJYahajHHntMzz77rD7//HNFRUXp+eef14oVK3TRRRepVatW3m8l/NPu3dLevdbFg6FSMTEiQurUyXWZIX0AAAAhqUYhylTKO+ecc6zLJkQdPHjQKjZx22236dVXX/V2G+HnvVD5zZqpOJSKfVBcAgAAIKTVKEQ1atRI+/fvty63aNFCS0q+TGZlZSknJ8e7LYT/h6hQ630kRAEAAIS0GhWWGDBggKZOnarjjjtOF154oW699VZrPpTZduaZZ3q/lfDrEJUXaiGKCn0AAAAhrUYh6t///rfy8vKsy//4xz8UGRmpmTNnWgvj3n///d5uI/xVqIYod0/U8uXSoUOueVIAAAAIGR59+9u3b5/rhyIirDWi3P+/8cYbrRNCdDhf69YKKW3aSPXqSWbo6po1UseOdrcIAAAA/hqiGjZsaBWQOJaioqLatAmBwKyRtGpVaPZEmbWhunQxi6W5hvQRogAAAEKKRyHqhx9+KPd/p9Ops88+W6+//rpVYAIhZOtWKTfXGsqWb8qbb9+ukBvSZ0KUKS5xwQV2twYAAAD+GqJOO+20CtvCw8N14oknKj093ZvtQoAM5ZM57qE4J4gKfQAAACGrRiXOgdIQ1aGDQhIV+gAAAEJWrULUpk2brHWhEhMTvdciBIZQD1HunijzPOTn290aAAAA1CGPxmG98MILpZd37dqliRMnauDAgUpISPBF2+DPQj1EmTmA5nWfne16Lo47zu4WAQAAwB9D1LPPPmudmwp9SUlJGjZsGOtChapQD1GmSqUZ0jdzpmtIHyEKAAAgZHgUotatW+e7liBwFBaaF4Prcvv2UmamQnZInwlRFJcAAAAIKRSWgOfWr5cOHXItOJuSopBFhT4AAICQRIhCzYfymV4os/BsqKJCHwAAQEgK4W/AqLFQnw91ZE/UmjVSTo7drQEAAEAdIUTBc4Qol6ZNpSZNJKdTWr7c7tYAAACgjhCi4DlC1GEM6QMAAAg5hCh4btWqw3OiQh3FJQAAAEIOIQqeMXN/Nm1yXaYnihAFAAAQgghR8Mzq1a7zxo2lxES7W2M/hvMBAACEHEIUPMN8qMpD1MaN0r59drcGAAAAdYAQBc8Qospr1Ehq0cJ1md4oAACAkECIgmcIURUxpA8AACCkEKLgGSrzVURxCQAAgJBCiIJn6ImqiBAFAAAQUghRqL49e6Rdu1yX27WzuzX+g+F8AAAAIYUQBc+H8plCCnFxdrfGf3Tp4jrPzDwcMgEAABC0CFGoPobyVc4EyrQ012V6owAAAIIeIQrVR4iqGkP6AAAAQgYhCtVHiKoaxSUAAABCBiEK1Ud586oRogAAAEIGIQrV43TSE1Xd4XzmuQIAAEDQIkSherZtkw4elMLDDxdRwGGdOklhYa4y8KZKHwAAAIIWIQrV4+6FMgEqKsru1vifmJjDwxwpLgEAABDUCFGoHobyVX9IH/OiAAAAghohCtVDiDo2iksAAACEBEIUqofKfNUPUQznAwAACGqEKFQPPVGeDeejQh8AAEDQIkTh2A4dktascV0mRFXN9NJFRkoHDkgbN9rdGgAAAPgIIQrHtmGDVFjoqkDXsqXdrfFfJkCZUucGQ/oAAACCFiEK1R/KZ3pazFpIqBoV+gAAAIIe34hxbMyHqj4q9AEAAAQ9QhSOjcp81UeFPgAAgKBHiMKx0RPl+XC+ZcukoiK7WwMAAAAfIETh2AhR1ZeWJsXGSnl50tq1drcGAAAAPkCIwtHl5h4u102IOrbwcKlLF9dlhvQBAAAEJUIUjs6sD2UWjm3YUEpKsrs1gYEKfQAAAEHN1hA1Y8YMDRs2TCkpKXI4HPr000/LXe90OvXggw+qefPmio2N1VlnnaVV7iIHqPuhfA6H3a0JDFToAwAACGq2hqiDBw+qR48eGjduXKXXP/nkk3rhhRf08ssv69dff1X9+vU1ZMgQ5Zn5JqgbVObzHBX6AAAAglqEnXc+dOhQ61QZ0wv13HPP6f7779f5559vbXvnnXfUrFkzq8fqkksuqePWhiiKStR8ON+KFVJBgRQVZXeLAAAAECwh6mjWrVunzMxMawifW0JCgvr166dZs2ZVGaLy8/Otk9u+ffus88LCQusEz4RnZFjdlYfS0+Ws4vkrLi62zqMjHHKGOxVMHBEOayipeYzVfv0kJyuiQQM59u9XoSl17g5VPuRuG69x+3AM7McxsBfPv/04BvbjGPj/MfDWsfHbEGUClGF6nsoy/3dfV5mxY8dqzJgxFbZ/++23qlevng9aGtyGLFmiGEk/79ih7K++OuptnxjaSlKwrY3UWho2UVu2bLFO1XVqSooaZ2Ro0bvvauspp6iuTJ06tc7uC5XjGNiPY2Avnn/7cQzsxzHw32OQk5MT3CGqpu69917dfvvt5XqiUlNTNXjwYMXHx9vatoCTlaXI7Gzr4slXXSU1aFDpzRYuXKht27bp7q83ypmYpmBSsH2ttk+4xyqCYubvVVf4Z59JGRk6ISpKx599tnzN/FXFfFgMGjRIkZGRPr8/VMQxsB/HwF48//bjGNiPY+D/x8A9Si1oQ1RycrJ1vn37dqs6n5v5//HHH1/lz0VHR1unI5knkRezh9avd503b67Ixo2rvFlYmKs+Sf4hp5xFwVXBzzym3Nxc6zF69Prp3t06C1++XOF1+LrjdW4/joH9OAb24vm3H8fAfhwD/z0G3joufrtOVFpamhWkpk2bVi45mip9/fv3t7VtIYOiEjXnngdFhT4AAICgY2tP1IEDB7R69epyxSQWLVqkxo0bq1WrVho9erT+7//+T+3bt7dC1QMPPGCtKTV8+HA7mx06KG9e+zLn5vWdmyvFxtrdIgAAAARDiJo3b57OOOOM0v+75zJdeeWVeuutt3TXXXdZa0ldd911ysrK0imnnKIpU6YoJsaUOoDP0RNVc6YgSmKitHu3q9R5z552twgAAADBEKJOP/10az2oqjgcDj3yyCPWCTYgRNWcw+Ea0jdjhmtIHyEKAAAgaPjtnCjYzIRbQpR3hvQtWWJ3SwAAAOBFhChUbvt2af9+U3pPSk+3uzWBiRAFAAAQlAhRqJy7F6pNG1M33u7WBCYq9AEAAAQlQhQqR2U+74Uos96W6dUDAABAUCBEoXLMh6o9U53PvVD0smV2twYAAABeQohC5QhR3sGQPgAAgKBDiELlCFHeQXEJAACAoEOIQkVFRdLq1a7LhKjaIUQBAAAEHUIUKtq4USoocFXlS021uzWBjeF8AAAAQYcQhaor87VtK4WH292awNali+t861Zpzx67WwMAAAAvIEShIuZDeU98vNS6tesyvVEAAABBgRCFighR3sWQPgAAgKBCiEJFhCjvorgEAABAUCFEoSJClHcRogAAAIIKIQrl5edLGza4LhOivDucz4Qop9Pu1gAAAKCWCFEob+1aqbhYatBAatrU7tYEh86dJYdD2r1b2rHD7tYAAACglghRqHoon/nij9qLjZXatXNdZkgfAABAwCNEoTzmQ/kGFfoAAACCBiEK5RGifIPiEgAAAEGDEIXyCFG+DVH0RAEAAAQ8QhTKI0T5BhX6AAAAggYhCoft2ydlZrout29vd2uCiwmlERGu53jzZrtbAwAAgFogROGw1atd56a0eUKC3a0JLlFRUseOrssM6QMAAAhohCgcxlC+uhvSBwAAgIBFiMJhhCjfokIfAABAUCBE4TBClG9RoQ8AACAoEKJwGCGq7hbcLS62uzUAAACoIUIUXEzZbUKUb7VtK0VHS7m50rp1drcGAAAANUSIgsuuXVJ2tuRwuL7sw/vCw6UuXVyXGdIHAAAQsAhRcHH3QrVqJcXE2N2a4EWFPgAAgIBHiIILQ/nqBhX6AAAAAh4hCi6EqLpBhT4AAICAR4iCCyGqbofzrVghFRba3RoAAADUACEKLoSoumHmnMXFSQUF0urVdrcGAAAANUCIgmvNIvcX+vbt7W5NcAsLK79eFAAAAAIOIQrS5s1SXp4UGSm1bm13a4IfFfoAAAACWoTdDYAfDeUz60NF8JLwuVCq0FdUJP30k7Rtm9S8uXTqqa71sgAAAAIY35jBfKi6FioV+j75RLr1VldPp1vLltLzz0sXXGBnywAAAGqF4XwgRNk1nG/VKtcwymANUH/8Y/kAZWzZ4tpurgcAAAhQhCgQouqaGdbWqJFrqFtGhoKOeVymB8rprHide9vo0a7bAQAABCCG88HVI2JQma9uOByuIX1mrpAZ0tejhy3N2Lhxo3bt2uX1/cbNm6cOR/ZAHRmkNm3SyvHjdaB3b6/ff1JSklqZUvIAAAA+QogKdWa9onXrXJfpiarbIX0mRNlUXMIEqI6dOisvN8fr+75E0sRq3O6h66/Xe16/dykmtp4yViwnSAEAAJ8hRIU6E6DMsKr69V3DzBASFfpMD5QJUInn3qHIxFSv7DOy6JDOX79Qty+aIh3Yfczb5w+5ScnJ3u39LNy9Sbu/+Jf1+AhRAADAVwhRoa7sfCgzzAwhVaHPBKjo5Ha12kd83gFduniKrpr3uZqXhKdiM2qx5HQkc11mgyQt6j5Y0WGUOwcAAIGHEBXqKCphb4W+tWulgwddPYEBpmX2dl097zNd/Nu3iivItbbtqN9Ib/Uapsy4RD391bNyVlK9xgSr506+TMUEKAAAEKAIUaGOEGWPpCSpWTNp+3Zp2TKpTx8Fiu7bVuraOZM0NOMXRThNv5K0Iqm1Xu87Qp91Pk0FEZHWtoNRsXpo2qtK2X+4eMUhR5j1M1cs/FJfdjpFB6Pr2fY4AAAAaooQFercIYrKfPYM6TMhygzp8/MQ5XAWa+CaubpuziT123R4HtdPrY/Xa31HaEbaCRWGg37T8SRNbd9PfTcvVdMDe7UjrpEy6yfqwwl3q9v2NfrP5Mc1auSDOhTOxxAAAAgsfHsJde7y5vRE2TOkb9o024pLVEd0Yb5GLv1eo+ZOVts9rrLlhWHh+qzzAKvnaXnT9KP+vBmyN7tV93LbRv3xQb038V6dtm6BHp/yov5+9mjm4wEAgIBCiAplBw5IW7a4LtMTFXIV+o6mcU62rljwhS5f8KUSc/dZ2/ZF19eE4/+gt04Ypsz4pBrv+7fmHXTj+ffo9Y8f1R+XTNPWBkl6ZsDlXmw9AACAbxGiQtnq1Yfn5zRubHdrQo+fVOgrK333Zv1l7qe6YOn3ijlUYG3bHN9Ub/Q+X+93H+S1OUw/tu2j+4bcrCenvKC/zXrfCmUTjh/qlX0DAACEdIh6+OGHNWbMmHLbOnbsqBUrVtjWpqBCUQl7deniOt+8WcrKkho2tKcdTqc1z+kvcydp0Oo5pZsXNW+v1/pcoCkdT1KRDyrpfdBjsFL279ToXybq0W9f0va4xprWrp/X7wcAACCkQpTRtWtXfffdd6X/j4jw+yYHDkKUvRISpNRUadMmV2/UySfX6d2bWHTeugW68Ztx6pHpmhtXLIemtetrFYuY07Krz+cqmVLnyft365LfvtW/Jz+pSy99TItSOvr0PgEAAGrL7xOJCU3Jycl2NyM4UZnPP4b01XWI2r9fTd99V2YwZ5sZ71ib8iKi9HG3gRrfe7jWJrZUnXE4dP/gG9XswG6dsXa+xn80RiP//JTWN25Rd20AAAAIthC1atUqpaSkKCYmRv3799fYsWPVqlWrKm+fn59vndz27XNNii8sLLROOCx85UprIdRD6ely1uK5KS52rRUUHeGQM9wsrxo8HBEOxcbGWo/RF6+fsM6dFf711yr67TcV12L/7rYdtY2bNyvs3/9W2PjxapmdbW3aFROnCX3O04QTztbe+gnWtmhridw6FB6u2y+4W//9333qlrlab3/0sC654kntqd/Q745XrY8BfIpjYC+ef/txDOzHMfD/Y+CtY+NwOp1++63366+/1oEDB6x5UNu2bbPmR23ZskVLlixRgwYNqj2PypgwYYLq1WNhz7KGXn65ovbv1w/PPad9bdrY3ZyQlPr99zrhhRe087jjNPPRR31yH/Fr16rd5Mlq8fPPCisqsrbtb9FCa847T5tOP13F0dHyB9FZWTr17rtVf/t27W3fXr88+qiKYmLsbhYAAAgiOTk5uuyyy5Sdna34+PjgDFFHysrKUuvWrfXMM89o1KhR1e6JSk1N1a5du2r1RAWd3bsV2by5dbHQFDWoRcBcuHChFXLv/nqjnIlpCiYF29dq+4R7NGPGDPXo0cP7d7BggSJPPFHOpk11yBSYqCHzV5WpU6dq0KBBioyMtIpFOL79VmHPPquw778vvV3xgAEqvu02LUpJ0YDTT1ezyx5XVLOjr/VUl9rs3qL33rlTjXL368e2vXXjhfd7VNTC58fLk2OAOscxsBfPv/04BvbjGPj/MTDZICkpqdYhyu+H85XVsGFDdejQQavdpbkrER0dbZ2OZJ5EXsxlrFvnOk9NVaQpcFALYWFmUKCUf8gpZ1FwLZpqHlNubq71GH3y+jnuOGtekGPHDkXu3Ss1bVqr3UUWFyvyf/+T/vWvw6XTw8OlCy+U7rhDYb17W0M4wxYssB5Xnp8ds4yGLXXNyIc04b1/6PQ18/TAV//RvX+4pdoFLnx+vKqBzxr7cQzsxfNvP46B/TgG/nsMvHVcXN9+A4QZ2rdmzRo1L+lBQS1Qmc8/mB7A9PTarxe1Z4/af/ihIkyRkGuuce0rLk667TZpzRpp4kSpd28FgoUtOumW8+5SkSNMl/72rf428z27mwQAABA4Iervf/+7pk+frvXr12vmzJkaMWKEwsPDdemll9rdtMBHiAqORXdNQLrlFkWkp6vLu+/KkZkptWghPfmkq+rfM89IrVsr0HzXvp8eHPRX6/LtP7+rC3/71u4mAQAABMZwvs2bN1uBaffu3WrSpIlOOeUUzZ4927qMWlrlWheI8uZ+oGtXafJkacmS6v/MrFnS009Lkya55j+ZOYNpaYp78EFFXHaZFBWlQPduz7PVfP8u3TzrA42d8m/trN9IP7btY3ezAAAA/DtEvfcew3h8hp4o/+uJOlaIMpX1TNgy4cmEKLehQ3Xo1ls1PTdXZ59zjhnsq2Dx9KmXW0Fq5JLv9Z/Jj+viSx/X780J/gAAwF5+PZwPPmLWdXL3RBGi/CdELVpkavFLP/7oCkxuBw9K48ZJHTtKI0e6ApTpaTJzn0zw+uorOQcOrHbxhYDicOieP9yiGW16ql5hvt74aIxSszLtbhUAAAhxhKhQtHWrKZIvRURIrA9lv2XLDoelP/1JOuMM13EZP166/37JLC59882u+U+NGkn/+Ie0YYPrejMUMMgVhkfqhuH3amnTdDXJydLbHzyoxjmuxYIBAADsQIgK5aF8pipcEA39CkiffCJVVijFrBn1l79I//ynVXlPbdtK//63q1jE//2flJysUHIwup6uuvBhbY5vqvS9WzX+o0cUU5hnd7MAAECIIkSFIuZD+QczZO/WW63CEFUyw/Y++EDKyJBuukmqX1+hamdcY1154RhlxcSp57YMvfjZUwovLjPsEQAAoI74dWEJ+AiV+Ty2fPlyr+8zbt48dTA9TkdTUKCVe/fqwOLFR71ZsZnnJmnx4sWlix/X9eOpC2uSUjVq5IPWYryDVv+qMVNf1v2DbwzO+WAAAMBvEaJCET1R1VZ0YK/1Bf3Pf/6z1/d9iaSJ1bjdQ9dfr2PVqYyNjdXEiRM1YMAA5ebmKpjNb9lFfxt2p176dKz+vOhrbY1vov/0v8juZgEAgBBCiApFhKhqK84/YA23Szz3DkUmpnp13/mZq6Rvxh37dkNuUnLy0XsNYyJcPTHNLntceYeOMjywRO7aecr+6X8KVN90PEljzrpOY757RXfNeEeZDRL1Sbcz7W4WAAAIEYSoUFNYKK1d67pMiKo2E6Cik9t5dZ+LmqZp68z3lbx/V6WTE80AvcwGSVrUfbCiw8KPuq+ocBOcihTVLF3OomMPbSvcvUmB7u1ew9R83079dc4neuLrF6zFeL+Ljbe7WQAAIARQWCLUrF8vHTok1asnpaTY3ZqQVhwWrjFnXue6fOR1JefmenM7VO6J06/S5M6nKbK4yBre1233MeaYAQAAeAEhKlSH8pmiEtUoQADfD0u7Yfh9Vo9TWeb/Zru5HlVzOsJ059mjNbNVd8UV5Op/015Va7sbBQAAgh7D+UI5RMEvmKA0tX0/9d28VE0P7NWOuEaa07IrPVDVVBARqesv+Ic+ePdudd65Xl+bbdksxgsAAHyHrohQLW/OfCi/YgLT7Fbd9VmX06xzApRn9kfX19V/fFhb6jVUZ0ltb7tNCvIqhQAAwD6EqFBDZT4Eqcz4JF121vXKMmtwmXW1TFl6s6Axqs88Xz/+KE2c6Drn+QMAoFKEqFBDiEIQW9mouc43PXuRkdInn0imR8p57JLvkOv5atNGOuMM6bLLXOfm/2Y7AAAohxAVSnJypE0lpa0JUQhSMyRteOQR139efFF6+mm7m+T/TFD64x+lzUdUN9yyxbWdIAUAQDmEqFCyerXrvHFjKTHR7tYAPrN38GDpX/9y/eeuu6QJE+xukv8yQ/ZuvbXyHjv3ttGjGdoHAEAZVOcLJVTmQyi5/XZXz+tzz0lXXSUlJ0sDBypQbdy4Ubt27fL6fuPmzVOHI3ugjgxSmzZp5fjxOtC7t9fvPykpSa1atfL6fgEA8CVCVCihMh9CjemNMkPSPvxQGjFC+uknqXt3BWKA6tips/Jyc7y+7yslvVWN2z10/fV6z+v3LsXE1lPGiuUEKQBAQCFEhRKKSiDUmAWl33lH2r5dmjFDOvtsadYsKTVVgcT0QJkAlXjuHYpM9E7bm+Zk65oVP+ua5TOkQ/nHvP0dSa2V3+tczWrWTnI4vNKGwt2btPuLf1mPjxAFAAgkhKhQQohCKIqJkT79VDrlFGnZMmnoUOnnn6WGDRVoTICKTm5Xq32037lB186dpPOX/ajookPWtkOOMIU7i1VZNHLPlOq9a4M++Wacfm/WVq/1HaGvOp6iQ+H8CgEAhCZ+A4YSQhRCVaNG0tdfS/37S0uXSsOHS998I0VHKyQ4nTp5w2JdO2eSTl83v3TzvBad9VqfEQpzFmvc5MetwFS22lBxyflDZ12vDrs36cLfv9Nx29fohc+f1t0/vq03ep+n93sM0YHoenX+kAAAsBMhKlTs2WPGBLkut6vdX7KBgGSGi5kgdeqp0vTp0hVXuBaVNUP+glRE0SGdu+InXTfnE3XZsc7aZvqbpnTor9f7jtCCFp1Lb3uD4z49NO1Vpew/XLwis0GSxpx5nb7peJL1/2dO+ZP+vPArXbHgS7XYv1MP/DBet/4yUe/1GKI3e5+nbfFNbHiUAADUPUJUqBWVSEmR4uLsbg1gD1NUYtIk6Q9/kD74QGrRQnrmGQWb+LwDunTxFF0173M1P7Db2pYTGa0PjhukN3qfr42Nmlf4GROUprbvp76bl6rpgb3aEddIc1p2VXFYeOlt9tZL0IsnX6pX+43U8KU/WD1b7fZs1nVzJ+nq+Z/py06nWD1bS2s55BAAAH9HiAoVVOYDXEyZ87fekv70J+nZZ11FJm67TcGgRfYOXT1vsi757VvFFeRa23bWb6g3e52nd48fquzYBkf9eROYZrc6dvXC/IgoaxjfB90H6fS1860wddLG3zR82XTrNLNVd73ad4Smp/eS0xG8PX0AgNBFiAoVzIcCDrvsMsmsjXT33a71pEyP1EUXKVAdt22VNWRvaMYvinC6ZjJlJLXS631GaHKX01UQEemT+zUB6Ye2faxT18zVVsGKc5f/ZAUqc1qVmKrX+wzXp13PsIIXEPLMotVmqYVt26TmzV3Di8MP9/YCCByEqFBBiALKu/NO12K8//63dPnlUrNm0mmnKVA4nMUauGaurpszSf02LSnd/nPrHnqt7wWannaC10qRV4cZwjd62J168rQrrWGEZjhh+92b9MSUF/X3Gf/V273O1f96nq2s2Pg6axPgVz75RLr1VtcfcNxatpSef1664AI7WwagBghRoYIQBZRnAsZzz7kW4zXzpEzFPlP6vGtX+bPownxdsPQH/WXup2q7x/VlrDAsXJ93HmD1PC1rlm5r+7bGN9VjA0fpxZMv0cWLv9E18z6zilX8/af/6aZZH+qj487U+N7na33jFra2E6jzAPXHP1qVMssxnz9m+0cfEaSAAEOICgXmQ5sQBVRkhtG8+640aJD0yy+ughOzZ7uG9/mZJEm3L5qiq1fNUlJOtrVtX1Q9Teg5VG+dMEyZ8eYW/mN/dH293vcCvdXrPJ2d8bPVY9Zt+xpdvvAr/Wnh11YRi3Ht+upzuxsK1MUQPtMDdWSAMsw28wed0aOl889naB8QQAhRocCMvT540PXhnJZmd2sA/xIbK02eLJ18spSR4VqM18xZSEiQX8jIUOpjj2mjaeriKdamzfFN9Ebv4Xq/+yAd9PM1msyCvJ91OV2fdT5N/Tf+rmvnfKKBa+dpyKrZ1mm2pIbffSf16MEXSNhq48aN2uVeCsSL4ubNU4eyQ/gqC1KbNmnl+PE60Lt3re6ruNg1J3Lx4sUKK1m+ISkpSa3MEg8AvIoQFUqV+dq0kaKY3A1UkJgoTZniWoz3999dw2rMmlJ2vV/MlyoT5P71L+mzz+RefWmRKdRw8qX6uuPJKipTejwgOBya1bq7dWq3a6NGzf1UFyyZphOLi1wFPl5+2VUl8eqrWYYBtgSojp06Ky83x+v7vlTShGrc7qHrr9d7tbyv2NhYTZw4UQMGDFBurqtCZ0xsPWWsWE6QAryMEBUKGMoHHJv5I8NXX0kDBkjff+/6Mv/f/9btYryHDkkffyw9/bQ0b17p5qwBA3TejBladc7tim7eXoFudVIr3Tv0bxrb6RRd+MGDujchQRHr1kl/+5v00EPSX/8q3XKLq3oZUAdMD5QJUInn3qHIxFSv7DO6qFAj18zTbb99Ix3MOubtT+56hmb2PEcF4TX/ahYT4Som0+yyx5V3yKnC3Zu0+4t/WY+PEAV4FyEqFBCigOrp2dMVYs45R5owwVU564knfH+/+/dL48e7Cl1s2ODaFhMjXXGF1TuzNidHP/XqpeQ6rLZXF3bGxutBSed++aV6/vaba+Hj1aulsWNdQdKs5WVK0B93nN1NRYgwASq6lotFN8rJtub+Xb7gSzXJcYWnYjnkkFOVvYPNTCmz/ealP+ii9Yv09gnn6t2eQ2tUyTIq3OytSFHN0uUsCq7PC8DfsApiKCBEAdU3eLD0+uuuy08+6SqB7iumMpcZyuZe8NcEqKQk6eGHzfgi6ZVXpE6dFOycZl7aDTdIK1a4KiWa+WmFha5Fkbt3dxX8mDq18on5gJ9I27NF//fNOM186Rrd/vO7VoAy8xcfPWOUbj/3dissuWYsHWb+b7Z/3PUMbYtLVNODe3XnT//VzJeu1pipL6nV3m02PRoAx0JPVCggRAGeufJK11ou99/vGmKWkuLd8sOLF7vmO02c6BrC535/ml4X0/tkQkUoMoUlTKl5czJVEs1zZEpDf/ON62QC1R13SJdcwvxO+AenU723LLOqT5616leFWZFI+r1ZW2u9tq86nmwVVzFyI6L10LRXrZL/bpkNkjTmzOv0TceTFFlUqHNW/Kxr50xS1x1rdeWCL3X5gq/0TYf+eq3PCC1o2dm2hwmgIkJUsDNf0NascV0mRAHVd999rsV4TW+QGVZmKsiZHpKaMr0oJgiYYGD25WbmYP39764hhHU5/8rfnXii9OGH0tq1rmGOb7whmSF/JuDee68r3F5/vdSwod0tRQgKLy7SkJWzdN2cT3T8tpI/VEr6rm0fvd53hGanHldhsWsTlExp/76bl6rpgb3aEddIc1p2VXFJkZjC8Eh92vUMfdrldJ20YbGunTtJZ6ydr6ErZ1qn+Smd9GrfC6x9uH8GgH0IUcHODA8yw2LM/AozvwNA9ZgvQGYo39at0uefS8OGSTNnej68Lj/fNb/KzPdZsuRwj4tZYNP0qvTp45PmB430dOmFF1xDHE2gffFF1zG55x7p0Uelv/zFtcaOKQwC+Fi9glxd9NtUjZo3WanZ261t+eGR+rjbQI3vPVxrko5elMKEn9mtuh/9ThwOzWxzvHVqv3ODtbD28GU/qNfWFXrl08e0vmFzvdH7PH143CDlRsV48+EB8AB/9gyV8ubt2vFXbsBTERHSe+9J/fpJe/e65uaYddeqY88e6bHHXF/ur7nGFaBM6W7zhd8UTzD7JUBVX+PGrh4oU8XPzJXq1s21/t3zz0tt20oXXyzH3Ll2txJBqtn+Xbr7x7c06z9X6eFpr1oBak9svJ4/6VKddMObuu8PtxwzQNXEqiatdffZt+qUv76pF/tfrL0xDdQma5se+e4VzXrpKv19xjtqcmCP1+8XwLHRExXsmA8F1E69eq6eqJNOcoUfM+zOlEBftMgVqEwZ7lNPPXx7M3x23DjX8LOckjVnWrRwDT+77jqGn9VWdLRrSJ+ZO2aKTZgqfub8gw8U8cEHOrlLFznMMOYRIw7/4aioyLXuVtnjFSwL+wbzY/MDnXass4bVDVs2Q1HFrvmLaxulaHyf4VbvU15k3fQE7YxrpH8NuFz/OfFC/XHJdxo1d7IVpm6e9YG1gPXkLqdb86Y2JlPG3KuC+f0VzI+tjhCigh0hCqi9Jk1ci/GaILVwoZSc7Bqm59aypcKuv159vvpKEb/+KhWX1ODq0cM1ZO/iiymE4IvhlqaSojmZQh3PPCPnxIlKWrbMNVTSfOaZiocJCdJdd7kKhbiZoc2mB8ubxULsYIpu3HprcD42OzmdOnX9QqvAw4D1C0s3/9qyqzXf6bt2feV02DOywwzf+68pgX78UA1a9asV8HpvWa6Lfv/OOs1IP0ER0edLzp4lhdNRY8H8/grmx1aHCFHBjhAFeIcZMmYCkSlJXjZAGZs3K/yBB5Ti/r8Z9meKRQwcWGFyOXzAhNW339ahMWO0/o471G7aNDnMZ58pm15VaXkTtD76KHC/MJgvQeYxHFn2PRgem00iJV24eo5u+Oo5dd653tpW5AjT1x1P1mt9hmtxSkf5CzO3yhSqMKcTtizXX+ZM0h9WztKAtQukhxbo06ZpeqXvBfq4UemnEjwRzO+vYH5sdYwQFewIUYD3hj6YogZVsJa4jI6W8+efFdm7d502DSVatNCyK65Qm9deU+Tbb0t33uk6bkdyf3m46irpl18Cb76o6el89dXK180y20xwN3Pvzj+f4TnVsXevmr35pkxsSvllgrXpYGSM3u8+2CrgsLlhsvzZghaddeOIztaaUtfOn6xLl0xV5x3r9NwX/9Jd9RL0nKllYxb0RvWYzwzTS1PV++sYnx1hxcXqsnatwmbM8L/PFj47vIoQFczy8lwLdhrt29vdGqDOLF++3Ov7jJs3Tx3KDn04gulvisjPV8b8+Tro5V+cvng8/sRbj6+4ZBjl4rVrFV+/vjpUFqDKMl8sTdXEYGO+DG3apI333KPdI0bIaaqzelFSUpJatQqCuTemSIkpnz9+vFqYIiWStsUm6O2+IzTh+D9oX0ycAsnGRs31f0OuV+Loi7Xi9W/153lfKOXgXj1pcsHZZ7vmZJpwECSVLDdu3Khduw6vuVVbjtxc1V++XI2+/FJNjvJZf6zPDhM92gf4Z8fK8eN1wAd/DEwKls+OEoSoYGYmuJs3hJkTYOZ0AEGu6MBe6y9pf/7zn72+70skTazG7R675Ra9Y5YVQJ0fr9jYWE2cOFEDBgzQ+bm51Tpen0taocBiiuwPq8btWj39tJo//bTMrJ6ZZU5bann/MbH1lLFieeB+GTLzFs16bR9/XDp/Mad9e/111Sr9OPIBhbXwcBkDP1PYoIFeOfkivdz7Ap096wP9ZeZEdTNFbkxgNL3pZsiWGW4cwD3mJkB17NRZebklxXtqwNRS7C/ppJLT8SVDOqurqs+OiIgInXvuufriiy90yL2YeoB9djx0/fV6zwf3HxPonx1HIESFylA+5mUgBBTnH7D+cJB47h2KTPRuueH8zFXSN+OOfbtB1yu5STuv3nfu2nnK/ul/CjbePl4xEa7PuWaXPa78zSurdbzeHHKTZiV7/+/G7mPmi9di/8xVGlaNx7Ynqp4aF+Sor2SdRpds31KvoeY1baN5TdI0r0kbLW3cQoXh1fs6ULh7k3Z/8S+rByCgvgiZXklTZdNUczTDsNyGDLHmOq5o3Fj/7d1byeERilZwKIiI1Pvt++n5mRO16sUX1W7yZNdC3++/7zoF8ELf5vVnAlR131+RRYfUbc9m9dmxXr12rlfvneuUkpNd4XamJ3JdfJJO2r6mxp8d5nMofVhrvZB4hvIOVTJszqbPDU8+O/KH3KRkL38uFgbqZ8dREKKCGfOhEKLML5/oZO8GmUVN07R15vtK3r+r0gX2zN+z85KStLj7WYp2Rnj9l08w89bxigq3ZqYpqlm6FjVuc8zjldkgSYu6D1Z0mPfH/ruPmV2vRfPYTrn+daUc2K0Ttqywig/02rLcmivTIidLLdYv0vnrF1m3z4uI0uLk9tbcmgUtOmlBSiftrh8kpfhND4yZH2eGXpklCozISOlPf5Juv1067jjXtgULFMz2mcqiN9/sWprBPBcTJ0pmzo45dezoei4uv9x05yqQVPX+Sjq4t8zrfoW6Z65SdFH5EQKHHGFa1ixd883rPqWT5rfsrK0NmijMWayfXx5V48+Osp9DziKH33xuePLZ4avPxWBDiApmhCjAq9Wwxpx5nV769DHrF03ZX0AlBc21ZNQo63Y6xlQc+MfxMtdbxytYH1t4hDYnNLNOn3U5zdoeW5CnHpkrrS+YJlSZ80Z5+9Vv81Lr5LauUXNXqDJfLlt01sqkVoH1XG3f7lqv7T//kXbvdm0za7SZio0mTKSEaNW644+X3nnHtRC4Gdr3yitSRoZ0/fXS/fdLN90k3XhjQE0BCCsuUsddG6yw5P5jQeuszAq3M4sjz2/RSQtLXtO/Jbe3SsYfqdjBZ0cgPjY7EKKCGSEK8CpTTviG4ffpoWmvKmX/4QnN5i93jw26VoP695Pm2NpEVPN4mS8K5vpQe2zmS+PsVt2tk8XpVPqeLSWBarlO2LpCHXdtVNrebdZp5JLvrZvtj4q1vnzOTWiqb/252pspUmJ6Wv7738NLEaSludYMu/pqKS6wikX4jFkT6IknXMFp/HjXfKkNG6SHH5Yef9y1mLXpnTK9VP4mK0vxM2dqjKTTv/2PTti9SXEFueVuUiyHFfzdvasmNK0z5d6rObWBzw5UByEqFEIUlfkArzG/YKa276e+m5eq6YG92hHXSHNadlVkZJgG0QUVMMcrGP7S6pXH5nBobWJL6/Rh90HWpvi8A+q5NcMVqrasUM9tGWpQkGstPDtA0h0me51xhtSli2sBanPq398VVuxgCij9+KOrWMSXXx7e3q+fa87PiBGUa65Kgwauktamd84U2jDP4dy5rjLY5jRsmOs5PPVUe+ZWm2NrespmzpRmzXKdL1smM9DtQXP9tpXlQr47MC1K6aj90fVrddd8duBYCFHBKjtb2rHDdZkQBXiV+UVT+pf8Up5NIIbdxys4+OKxmdLe09N7Wacjh0v1WD1HPdfOUzvz5XbpUtfptdes20UkJqpfWprCfv9dOuUUqU8fqX7tvsgelamC+eGHri/+7jlN5ov+8OGuhbFNuKOoUvVEREgXXyxddJH000+u5/Szz1zFOMzJVPIzYWrkSNdtfeXAAVeIc4cmc9qzp8LN8lJT9f6mTVp64oVa3OU0rUpM9UkA4LMDR0OICkamCtF7JcUpGzXy7S8xAEBQM1+2ljdNt07jm3dQ5tp5Wvztt+puijaYL7vmNHeuHLt3K9nMP5o3z/WDpvfHzMFx91SZc1OVqzrBxvweM1/mt22Tmjd39YS4e5P27XMFt+eft9a0sZiCCGa4nulV4Q+HNWeOjanaZ06mB+jZZ12FOcwxveQSqXVr13M8apSrF6s6x6sqJoibIYTu15AJTIsXV1wg26xzZgK5u9fzxBO1bPNmXdWrl5I7nqzoJsGx7hUCT0CEqHHjxumpp55SZmamevTooRdffFF9+5qCrajgk09ci+m5F4rbu9e1sJ75ZXPBBXa3DgAQBA4lJkqDBknnn+/aUFCgQ/Pmafn48eqana2w2bOlLVuk+fNdJ1PEwDAFHcqGqp49pejoo/8ec8/heeAB1zB1E6BMkDKaNpVuuUX661/NSp519fBDg5kP9fLL0qOPugp0mEIdJvSY+WVm7pQpRmGe+zlzKj9eR37vMHPUTI9h2dBkQteRUlPLv0Z69JCiosrf5liL4QJ1wO9D1Pvvv6/bb79dL7/8svr166fnnntOQ4YMUUZGhpqaD0+U/8VjFtEzf90py/wiM9s/+oggBQDwvqgoOfv00dqdO9Xp7LMVZsqIm16isl+YFy6Utm51/S4yJ8MEKDNUzP2F2Qzduvbair/HzJdm86XdrXNn15A9U6rc9FTAd0ylvoceku66y1WwwxTuML1UTz7pWnerZMHiSr93mCGA5nrzGjBhuqCg/O3M0MATTjgcmszJhCggAPh9iHrmmWd07bXX6mrTTS/zR5GX9eWXX+qNN97QPffcY3fz/Ifp/jZ/CTryF49htpkuetMFb/5qyARbAICvmS/DZp6NORlm+J8ZFla2SMCuXa7Fb8sugHs0JnSZeVABuEBswDNDJq+7TvrLX1wFPEyAMutMVcb9XeSppyoGsrLFSEyADrC1qYCACFEFBQWaP3++7r333tJtYWFhOuusszTLfABXIj8/3zq5ZZsCC2Z9gD17VGgmodpsx44d2m7Wr/CyBosWqf3RurfNB9qmTdaq5fvNGHUvWrVqleLi4uTYs0HFBXkKJmH7tykmJkaO3evkLD78uvI3xRHm+0mqirdtkvNQ8DwuT9n5uDw9Bp7geNl/DDwVrMfMsXer9bjM7+Z97iF1JYqLi5WTk6OffvrJ+l1dpRNPdJ1Gj1b0li2qv3SpdWowd65iMiuu71NOfr5WrVmj/VV9ea/F77FgOF5HvgeOdrxqpUEDNRgxQu2rcRz2nnSSsk47TTnduinfzJdyz4kzf/z99degO161+RwK1s8Nw/1aNK/D3e6123zEfN83n0XmfiJNr/gR9pcs0eCsrOPBAw5nbffgQ1u3blWLFi00c+ZM9Td/sShx1113afr06fq1kjffww8/rDFjzOoBAAAAAFDRpk2b1NLM3wvGnqiaML1WZg5V2b+MmV6oxMREOSh16hPmrwqpqanWizE+Pt7u5oQkjoH9OAb24xjYi+fffhwD+3EM/P8YmP4j0xuVYgrd1IJfh6ikpCSFh4dXGP5m/p+cnFzpz0RHR1unsho2bOjTdsLFvFD5wLAXx8B+HAP7cQzsxfNvP46B/TgG/n0MEhISar1/v56VGRUVpV69emnatGnlepbM/8sO7wMAAACAuuLXPVGGGZp35ZVXqnfv3tbaUKbE+cGDB0ur9QEAAABAXfL7EHXxxRdr586devDBB63Fdo8//nhNmTJFzZo1s7tpKGGGTz700EMVhlGi7nAM7McxsB/HwF48//bjGNiPYxA6x8Cvq/MBAAAAgL/x6zlRAAAAAOBvCFEAAAAA4AFCFAAAAAB4gBAFAAAAAB4gRKFaxo0bpzZt2igmJkb9+vXTnDlzjnr7Dz/8UJ06dbJuf9xxx+mrr76qs7YGm7Fjx6pPnz5q0KCBmjZtquHDhysjI+OoP/PWW2/J4XCUO5ljgZp5+OGHKzyf5vV9NLwHvMt8/hx5DMzppptuqvT2vAdqb8aMGRo2bJhSUlKs5+/TTz8td72pS2Uq5zZv3lyxsbE666yztGrVKq//PglVR3v+CwsLdffdd1ufLfXr17duc8UVV2jr1q1e/ywLZcd6D1x11VUVns8//OEPx9wv7wHvHYPKfi+Y01NPPeXz9wEhCsf0/vvvW+t1mXKRCxYsUI8ePTRkyBDt2LGj0tvPnDlTl156qUaNGqWFCxdaX/rNacmSJXXe9mAwffp064vi7NmzNXXqVOuX5+DBg6310o7GrNK9bdu20tOGDRvqrM3BqGvXruWez59//rnK2/Ie8L65c+eWe/7Ne8G48MILq/wZ3gO1Yz5jzOe9+cJXmSeffFIvvPCCXn75Zf3666/Wl3nzuyEvL89rv09C2dGe/5ycHOv5e+CBB6zzTz75xPrj2nnnnefVz7JQd6z3gGFCU9nnc+LEiUfdJ+8B7x6Dss+9Ob3xxhtWKBo5cqTv3wemxDlwNH379nXedNNNpf8vKipypqSkOMeOHVvp7S+66CLnOeecU25bv379nNdff73P2xoKduzYYZYlcE6fPr3K27z55pvOhISEOm1XMHvooYecPXr0qPbteQ/43q233ups27ats7i4uNLreQ94l/nMmTRpUun/zfOenJzsfOqpp0q3ZWVlOaOjo50TJ0702u8TVP78V2bOnDnW7TZs2OC1zzIc/RhceeWVzvPPP9+j/fAe8O37wByPgQMHHvU23nof0BOFoyooKND8+fOtYRpuYWFh1v9nzZpV6c+Y7WVvb5i/slR1e3gmOzvbOm/cuPFRb3fgwAG1bt1aqampOv/887V06dI6amFwMsOUzHCC9PR0/elPf9LGjRurvC3vAd9/Lv3vf//TNddcY/3FsSq8B3xn3bp1yszMLPc6T0hIsIYmVfU6r8nvE3j2u8G8Hxo2bOi1zzIc248//mgNte/YsaNuuOEG7d69u8rb8h7wre3bt+vLL7+0RoEcizfeB4QoHNWuXbtUVFSkZs2aldtu/m9+gVbGbPfk9qi+4uJijR49WieffLK6detW5e3Mh7np0p48ebL1ZdP83EknnaTNmzfXaXuDhfliaObYTJkyRS+99JL1BfLUU0/V/v37K7097wHfMmPis7KyrPkIVeE94Fvu17Inr/Oa/D5B9ZghlGaOlBlGbIaxeuuzDEdnhvK98847mjZtmp544glr+P3QoUOt13lleA/41ttvv23NH7/ggguOejtvvQ8iatleAHXIzI0y82qONXa3f//+1snNfHns3LmzXnnlFT366KN10NLgYn4punXv3t36ADY9HB988EG1/uIF7xo/frx1TMxfEavCewChwsyTveiii6xCH+YL4dHwWeZdl1xySellU+TDPKdt27a1eqfOPPNMW9sWit544w2rV+lYRYS89T6gJwpHlZSUpPDwcKuLtCzz/+Tk5Ep/xmz35PaonptvvllffPGFfvjhB7Vs2dKjn42MjFTPnj21evVqn7UvlJjhMh06dKjy+eQ94DumOMR3332nv/zlLx79HO8B73K/lj15ndfk9wmqF6DM+8IUWzlaL1RNPsvgGTM0zLzOq3o+eQ/4zk8//WQVV/H0d0Nt3geEKBxVVFSUevXqZXVVu5lhMeb/Zf/KW5bZXvb2hvlwr+r2ODrz10UToCZNmqTvv/9eaWlpHu/DDB/4/fffrVLEqD0z12bNmjVVPp+8B3znzTfftOYfnHPOOR79HO8B7zKfQ+ZLX9nX+b59+6wqfVW9zmvy+wTHDlBmbof5w0JiYqLXP8vgGTNc2MyJqur55D3g2xEK5rk1lfzq7H1Q69IUCHrvvfeeVXHprbfeci5btsx53XXXORs2bOjMzMy0rr/88sud99xzT+ntf/nlF2dERITz6aefdi5fvtyqghIZGen8/fffbXwUgeuGG26wqoz9+OOPzm3btpWecnJySm9z5DEYM2aM85tvvnGuWbPGOX/+fOcll1zijImJcS5dutSmRxHY7rjjDuv5X7dunfX6Puuss5xJSUlWpUSD90DdMFWsWrVq5bz77rsrXMd7wPv279/vXLhwoXUyXxeeeeYZ67K7+tvjjz9u/S6YPHmy87fffrOqYqWlpTlzc3NL92GqZL344ovV/n2C6j3/BQUFzvPOO8/ZsmVL56JFi8r9bsjPz6/y+T/WZxmqfwzMdX//+9+ds2bNsp7P7777znnCCSc427dv78zLyyvdB+8B334OGdnZ2c569eo5X3rppUr34av3ASEK1WJefObLS1RUlFWec/bs2aXXnXbaaVaZz7I++OADZ4cOHazbd+3a1fnll1/a0OrgYD40KjuZEs5VHYPRo0eXHq9mzZo5zz77bOeCBQtsegSB7+KLL3Y2b97cej5btGhh/X/16tWl1/MeqBsmFJnXfkZGRoXreA943w8//FDpZ4/7eTZlzh944AHr+TVfCs8888wKx6Z169bWHxGq+/sE1Xv+zZe/qn43mJ+r6vk/1mcZqn8MzB8yBw8e7GzSpIn1RzLzXF977bUVwhDvAd9+DhmvvPKKMzY21lpmoTK+eh84zD8e93sBAAAAQIhiThQAAAAAeIAQBQAAAAAeIEQBAAAAgAcIUQAAAADgAUIUAAAAAHiAEAUAAAAAHiBEAQAAAIAHCFEAAAAA4AFCFAAAAAB4gBAFAPCaq666SsOHDy+3bcOGDYqJiZHD4bCtXQAAeBMhCgDgUw888AABCgAQVAhRAACf+f333/Xuu+/qlltuKd321ltvqWHDhuVut379eitoLVq0qPRyVSdzvbFkyRINHTpUcXFxatasmS6//HLt2rWrdJ+nn366br75ZuuUkJCgpKQkK9A5nc7S27Rp06Z0v/Xr19dJJ52kefPmlV4/ZcoUnXLKKVZ7ExMTde6552rNmjUVHqe5ryPb+dxzz1V4bJUx+zbPCQAgcBCiAAA+c88992jYsGFWOKmu1NRUbdu2zTrNmTPH2mbO3dvM9VlZWRo4cKB69uxphR4TdrZv366LLrqo3L7efvttRUREWD///PPP65lnntHrr79e7jaPPPKItV+zHxOkbrrpptLrDh48qNtvv926btq0aQoLC9OIESNUXFxcbh8mmF177bWlbWzZsmUNnzEAQCCIsLsBAIDgNGPGDH3zzTdWb1RGRka1fy48PFzJycnW5by8POu8SZMmpduMf//731aAeuyxx0q3vfHGG1bAWrlypTp06GBtM/9/9tlnrZ6gjh07Wm0x/zeBx61BgwbWvk2PUKNGjcoNPRw5cmS5tpn7MG1ZtmyZunXrVrq9sLDQ6u1yt9E8BgBA8KInCgDgs16oK6+8Up07d65wXXZ2tjUMz33q2rWrR/tevHixfvjhh3L76NSpk3Vd2eF2J554YrlQ1L9/f61atUpFRUWl2+6++27r500vlOmxGjduXOl15raXXnqp0tPTFR8fbw3/MzZu3FiuPfv27bN+/mhMb5wJbCbYXXzxxdq8ebNHjxkA4D/oiQIAeN2kSZO0cOFCffDBB5Veb8LEggULSv+/ZcsWa15RdR04cMAaJvjEE09UuK558+YetfXOO++0qgqaoXtPP/20NSTQDN8zvUnmPlq3bq3XXntNKSkp1jA+0wNVUFBQbh9bt261rj+a999/3wqUmZmZ+tvf/qa//vWv+uKLLzxqKwDAPxCiAABeZXp5/vGPf1jFJKqaG2TmFrVr1670/2bekidOOOEEffzxx1bP0NF+9tdffy33/9mzZ6t9+/blhtuZghPutpheqeOOO07r1q2zhvaZYYgmQJ166qnW9T///HOF+zA9X3v37rWGFx6N6YEy92NOo0aN0tixYz16zAAA/8FwPgCAV3333XdWcYV7773XZ/dhij/s2bPHGmo3d+5cK8iY+VdXX311uaF6ZtidKQxhwtDEiRP14osv6tZbby23r/3791u9Q2vXrrXmWpleshYtWlghylTke/XVV7V69Wp9//331r7KMj1WpiqgCV69e/c+aptN75WZ42XWzfroo4/KzakCAAQWQhQAwKtMUDA9OiaE+IoZOvfLL79YgWnw4MFWiBk9erRVHML0crldccUVys3NVd++fa3gZQLUddddV25fDz74oDUE0IQaM8Tw008/VWxsrLWf9957T/Pnz7euu+222/TUU0+V+1mzzfS2ffXVV8dcC6tfv37Wfo8//nhrDtYrr7zi5WcFAFBXHM6yC2YAABAkzBwrE1jc6zUBAOAt9EQBAAAAgAcIUQAAAADgAYbzAQAAAIAH6IkCAAAAAA8QogAAAADAA4QoAAAAAPAAIQoAAAAAPECIAgAAAAAPEKIAAAAAwAOEKAAAAADwACEKAAAAAFR9/w9NQKTU1nneMQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bins = np.arange(min(data) - h, max(data) + h, h)\n", + "hist, edges = np.histogram(data, bins=bins)\n", + "centers = (edges[:-1] + edges[1:]) / 2\n", + "\n", + "# Гистограмма\n", + "plt.figure(figsize=(10, 5))\n", + "plt.bar(edges[:-1], hist, width=h, align='edge', edgecolor='black')\n", + "plt.title(\"Гистограмма частот\")\n", + "plt.xlabel(\"Интервалы\")\n", + "plt.ylabel(\"Частота\")\n", + "\n", + "# Полигон частот\n", + "plt.plot(centers, hist, 'r-', marker='o')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "44f7e836", + "metadata": {}, + "source": [ + "## Пункт b)" + ] + }, + { + "cell_type": "markdown", + "id": "c32cd292", + "metadata": {}, + "source": [ + "### 1. Выборочное среднее (математическое ожидание)\n", + "Выборочное среднее — оценка теоретического математического ожидания.\n", + "$$\n", + "\\bar{X} = \\frac{1}{n} \\sum_{i=1}^{n} X_i.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "ead66cb6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Выборочное среднее: 2.79\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "mean = np.mean(data)\n", + "print(f\"Выборочное среднее: {mean:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "83c9665b", + "metadata": {}, + "source": [ + "### 2. Выборочная дисперсия\n", + "Несмещённая оценка дисперсии:\n", + "$$\n", + "s^2 = \\frac{1}{n-1} \\sum_{i=1}^{n}(X_i-\\bar{X})^2.\n", + "$$\n", + "\n", + "Смещенная оценка дисперсии:\n", + "$$\n", + "s^2_{\\text{смещенная}} = \\frac{1}{n} \\sum_{i=1}^{n}(X_i - \\bar{X})^2\n", + "$$\n", + "\n", + "где:\n", + "- $ n $ — общее количество наблюдений,\n", + "- $X_i$ — каждое отдельное наблюдение,\n", + "- $\\bar{X}$ — среднее значение выборки." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "a24ea7eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Выборочная дисперсия несмещённая: 15.59\n", + "Выборочная дисперсия смещённая: 15.28\n" + ] + } + ], + "source": [ + "variance = np.var(data, ddof=1)\n", + "print(f\"Выборочная дисперсия несмещённая: {variance:.2f}\")\n", + "print(f\"Выборочная дисперсия смещённая: {np.var(data, ddof=0):.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "bd8ee128", + "metadata": {}, + "source": [ + "### 3. Медиана\n", + "Значение, разделяющее выборку на две равные части." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "e8490052", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Медиана: 0.94\n" + ] + } + ], + "source": [ + "median = np.median(data)\n", + "print(f\"Медиана: {median:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "34384b8f", + "metadata": {}, + "source": [ + "### 4. Ассиметрия\n", + "$$\n", + "Skewness = \\frac{\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\bar{X})^3}{s^3}.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "cc21a5b6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Асимметрия: 1.85\n" + ] + } + ], + "source": [ + "from scipy.stats import skew\n", + "skewness = skew(data)\n", + "print(f\"Асимметрия: {skewness:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "ddd4b8a7", + "metadata": {}, + "source": [ + "### 5. Эксцесс\n", + "$$\n", + "Kurtosis = \\frac{\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\bar{X})^4}{s^4} - 3.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "118d475e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Эксцесс: 2.66\n" + ] + } + ], + "source": [ + "from scipy.stats import kurtosis\n", + "excess_kurtosis = kurtosis(data)\n", + "print(f\"Эксцесс: {excess_kurtosis:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "93fd7cc5", + "metadata": {}, + "source": [ + "### 6. Вероятность $P(X \\in [0.00, 4.62])$\n", + "Эмпирическая оценка вероятности:\n", + "$$\n", + "P(X \\in [c, d]) = \\frac{\\text{число элементов выборки} \\in [c, d]}{n}.\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "08ea631c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "P(X ∈ [0.0, 4.62]): 0.82\n" + ] + } + ], + "source": [ + "count = sum((data[i] >= c) & (data[i] <= d) for i in range(0, len(data)))\n", + "probability = count / len(data)\n", + "print(f\"P(X ∈ [{c}, {d}]): {probability:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "26424ded", + "metadata": {}, + "source": [ + "## Пункт c)" + ] + }, + { + "cell_type": "markdown", + "id": "f6b509ff", + "metadata": {}, + "source": [ + "### 1. Оценка максимального правдоподобия (ОМП)" + ] + }, + { + "cell_type": "markdown", + "id": "c40e8461", + "metadata": {}, + "source": [ + "Функция правдоподобия для показательного распределения:\n", + "$$\n", + "L(\\lambda) = \\prod_{i=1}^{n} \\lambda e^{-\\lambda x_i} = \\lambda^n e^{-\\lambda \\sum_{i=1}^{n} x_i}\n", + "$$\n", + "Логарифмируя, получаем:\n", + "$$\n", + "\\ln L(\\lambda) = n \\ln \\lambda - \\lambda \\sum_{i=1}^{n} x_i\n", + "$$\n", + "Дифференцируя по $\\lambda$ и приравнивая к нулю:\n", + "$$\n", + "\\frac{d}{d\\lambda} \\ln L(\\lambda) = \\frac{n}{\\lambda} - \\sum_{i=1}^{n} x_i = 0\n", + "$$\n", + "Отсюда получаем ОМП:\n", + "$$\n", + "\\hat{\\lambda}{\\text{ОМП}} = \\frac{n}{\\sum{i=1}^{n} x_i} = \\frac{1}{\\bar{X}}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "7fa556a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ОМП для λ: 0.3586\n" + ] + } + ], + "source": [ + "# ОМП для λ\n", + "lambda_ml = 1 / mean\n", + "print(f\"ОМП для λ: {lambda_ml:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "f2ec4e89", + "metadata": {}, + "source": [ + "### 2. Оценка по методу моментов (ОММ)\n", + "Для показательного распределения математическое ожидание равно $E[X] = \\frac{1}{\\lambda}$. Приравнивая теоретическое математическое ожидание к выборочному:\n", + "$$\n", + "\\frac{1}{\\lambda} = \\bar{X} \\Rightarrow \\hat{\\lambda}{\\text{ММ}} = \\frac{1}{\\bar{X}}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "91b57523", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ОММ для λ: 0.3586\n" + ] + } + ], + "source": [ + "# ОММ для λ\n", + "lambda_mm = 1 / mean\n", + "print(f\"ОММ для λ: {lambda_mm:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "98a4fa53", + "metadata": {}, + "source": [ + "### 3. Смещение оценок\n", + "Для показательного распределения ОМП и ОММ совпадают. Найдём смещение:\n", + "$$\n", + "\\text{Смещение}(\\hat{\\lambda}) = E[\\hat{\\lambda}] - \\lambda\n", + "$$\n", + "Для показательного распределения:\n", + "$$\n", + "E[\\hat{\\lambda}_{\\text{ОМП}}] = E\\left[\\frac{1}{\\bar{X}}\\right] \\neq \\frac{1}{E[\\bar{X}]} = \\lambda\n", + "$$\n", + "Оценка $\\hat{\\lambda}_{\\text{ОМП}}$ является смещённой, но асимптотически несмещённой." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "1bb3bbda", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Смещение MLE: 0.0073\n" + ] + } + ], + "source": [ + "# Теоретическое смещение для больших выборок\n", + "# Для показательного распределения смещение ОМП приближенно равно λ/n\n", + "n = len(data)\n", + "\n", + "bias_mle = (1 / mean) - (n / (n - 1) * (1 / mean))\n", + "\n", + "\n", + "print(f\"Смещение MLE: {abs(bias_mle):.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "289e0726", + "metadata": {}, + "source": [ + "## Пункт d) Асимптотический доверительный интервал\n", + "Для построения асимптотического доверительного интервала используем тот факт, что ОМП асимптотически нормальна с дисперсией:\n", + "$$\n", + "\\text{Var}(\\hat{\\lambda}) = \\frac{\\lambda^2}{n}\n", + "$$\n", + "Доверительный интервал уровня значимости $\\alpha_2$ имеет вид:\n", + "$$\n", + "\\hat{\\lambda} \\pm z_{1-\\alpha_2/2} \\cdot \\frac{\\hat{\\lambda}}{\\sqrt{n}}\n", + "$$\n", + "где $z_{1-\\alpha_2/2}$ — квантиль стандартного нормального распределения." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "7f3db200", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Квантиль z_(1-α/2) = 1.6449\n", + "Доверительный интервал (90.0%): (0.2752, 0.4420)\n" + ] + } + ], + "source": [ + "# Асимптотический доверительный интервал\n", + "from scipy import stats\n", + "\n", + "\n", + "z = stats.norm.ppf(1 - alpha2/2)\n", + "se = lambda_ml / np.sqrt(len(data))\n", + "lower_ci = lambda_ml - z * se\n", + "upper_ci = lambda_ml + z * se\n", + "\n", + "print(f\"Квантиль z_(1-α/2) = {z:.4f}\")\n", + "# print(f\"Стандартная ошибка: {se:.4f}\")\n", + "print(f\"Доверительный интервал ({(1-alpha2)*100}%): ({lower_ci:.4f}, {upper_ci:.4f})\")" + ] + }, + { + "cell_type": "markdown", + "id": "4604ecf9", + "metadata": {}, + "source": [ + "## Пункт e) Критерий Колмогорова для проверки простой гипотезы\n", + "Критерий Колмогорова основан на статистике:\n", + "$$\n", + "D_n = \\sup_x |F_n(x) - F(x)|\n", + "$$\n", + "где $F_n(x)$ — эмпирическая функция распределения, $F(x)$ — теоретическая функция распределения.\n", + "Для показательного распределения с параметром $\\lambda_0$:\n", + "$$\n", + "F(x) = 1 - e^{-\\lambda_0 x}, \\quad x \\geq 0\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "d881725f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Критерий Колмогорова-Смирнова:\n", + " Статистика Dn: 0.2831, Критическое значение: 0.1725\n", + " P-value: 0.0005\n", + " Гипотеза отвергается\n" + ] + } + ], + "source": [ + "# Критерий Колмогорова\n", + "# def exponential_cdf(x, lambda_param):\n", + "# return 1 - np.exp(-lambda_param * x) if x >= 0 else 0\n", + "\n", + "# # Вычисление статистики Колмогорова\n", + "# x_sorted = np.sort(data)\n", + "# n = len(data)\n", + "# empirical_cdf = np.arange(1, n + 1) / n\n", + "# theoretical_cdf = 1 - np.exp(-lambda0 * x_sorted)\n", + "# D_n = np.max(np.abs(empirical_cdf - theoretical_cdf))\n", + "\n", + "# # Критическое значение для уровня значимости alpha2\n", + "# critical_value = np.sqrt(-np.log(alpha2/2) / (2 * n))\n", + "\n", + "# # p-значение\n", + "# p_value = 2 * np.exp(-2 * n * D_n**2)\n", + "\n", + "# print(f\"Статистика Колмогорова D_n: {D_n:.4f}\")\n", + "# print(f\"Критическое значение (α={alpha2}): {critical_value:.4f}\")\n", + "# print(f\"p-значение: {p_value:.6f}\")\n", + "\n", + "# if D_n > critical_value:\n", + "# print(f\"Отвергаем H0 на уровне значимости {alpha2}\")\n", + "# else:\n", + "# print(f\"Нет оснований отвергнуть H0 на уровне значимости {alpha2}\")\n", + "# # e) Критерий Колмогорова\n", + "\n", + "# from scipy.stats import expon, kstest\n", + "\n", + "# # Правильное задание распределения (scale = 1/lambda)\n", + "# dist = expon(loc=0, scale=1/lambda0) \n", + "# D, p_value = kstest(data, dist.cdf)\n", + "\n", + "# # Критическое значение для alpha=0.10\n", + "# critical_value = 1.22 / np.sqrt(n) \n", + "\n", + "# print(f\"Статистика D: {D:.4f}, Критическое значение: {critical_value:.4f}\")\n", + "# print(f\" Гипотеза {'отвергается' if D > critical_value else 'не отвергается'}\")\n", + "# print(f\" p-значение: {p_value:.4f}\")\n", + "\n", + "# # Визуализация\n", + "# plt.figure(figsize=(10, 6))\n", + "# plt.step(x_sorted, empirical_cdf, where='post', label='Эмпирическая ФР')\n", + "# plt.plot(x_sorted, theoretical_cdf, 'r-', label=f'Теоретическая ФР (λ={lambda0})')\n", + "# plt.xlabel('x')\n", + "# plt.ylabel('F(x)')\n", + "# plt.title('Сравнение эмпирической и теоретической функций распределения')\n", + "# plt.legend()\n", + "# plt.grid(True)\n", + "# plt.show()\n", + "\n", + "# e) Критерий Колмогорова-Смирнова с использованием scipy\n", + "from scipy.stats import kstest\n", + "from scipy.stats import expon\n", + "\n", + "# Параметры показательного распределения: scale = 1/lambda\n", + "dist = expon(scale=1/lambda0) # loc=0 по умолчанию\n", + "D_stat, p_value = kstest(data, dist.cdf)\n", + "\n", + "# Критическое значение для alpha=0.10 (асимптотическая формула)\n", + "critical_value = 1.22 / np.sqrt(n) # Для alpha=0.10\n", + "\n", + "print(f\"\\nКритерий Колмогорова-Смирнова:\")\n", + "print(f\" Статистика Dn: {D_stat:.4f}, Критическое значение: {critical_value:.4f}\")\n", + "print(f\" P-value: {p_value:.4f}\")\n", + "print(f\" Гипотеза {'отвергается' if D_stat > critical_value else 'не отвергается'}\")" + ] + }, + { + "cell_type": "markdown", + "id": "f9ef2691", + "metadata": {}, + "source": [ + "## Пункт f) Критерий χ² для проверки простой гипотезы\n", + "Критерий χ² основан на сравнении наблюдаемых и ожидаемых частот в интервалах:\n", + "$$\n", + "\\chi^2 = \\sum_{i=1}^{k} \\frac{(O_i - E_i)^2}{E_i}\n", + "$$\n", + "где $O_i$ — наблюдаемая частота в $i$-м интервале, $E_i$ — ожидаемая частота." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "4383629c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "χ² статистика: 14.4669\n", + "Критическое значение (α=0.1): 6.2514\n", + "p-значение: 0.002334\n", + "Степени свободы: 3\n", + "Гипотеза отвергается на уровне 0.1\n" + ] + } + ], + "source": [ + "from scipy.stats import chi2, expon\n", + "\n", + "# Гистограмма и ожидаемые частоты\n", + "observed, bin_edges = np.histogram(data, bins=bins)\n", + "expected = []\n", + "for i in range(len(bin_edges)-1):\n", + " lower = bin_edges[i]\n", + " upper = bin_edges[i+1]\n", + " prob = expon.cdf(upper, scale=1/lambda0) - expon.cdf(lower, scale=1/lambda0)\n", + " expected.append(prob * n)\n", + "expected = np.array(expected)\n", + "\n", + "# Объединение интервалов с expected < 5\n", + "while np.any(expected < 5):\n", + " min_idx = np.argmin(expected)\n", + " if min_idx == 0:\n", + " # Объединяем с следующим интервалом\n", + " expected[min_idx + 1] += expected[min_idx]\n", + " observed[min_idx + 1] += observed[min_idx]\n", + " else:\n", + " # Объединяем с предыдущим интервалом\n", + " expected[min_idx - 1] += expected[min_idx]\n", + " observed[min_idx - 1] += observed[min_idx]\n", + " # Удаляем объединенный интервал\n", + " expected = np.delete(expected, min_idx)\n", + " observed = np.delete(observed, min_idx)\n", + "\n", + "# Расчет статистики χ²\n", + "chi2_stat = np.sum((observed - expected)**2 / expected)\n", + "dof = len(expected) - 1\n", + "chi2_crit = chi2.ppf(1 - alpha2, dof)\n", + "p_value = 1 - chi2.cdf(chi2_stat, dof)\n", + "\n", + "# Вывод результатов\n", + "print(f\"χ² статистика: {chi2_stat:.4f}\")\n", + "print(f\"Критическое значение (α={alpha2}): {chi2_crit:.4f}\")\n", + "print(f\"p-значение: {p_value:.6f}\")\n", + "print(f\"Степени свободы: {dof}\")\n", + "if chi2_stat > chi2_crit:\n", + " print(f\"Гипотеза отвергается на уровне {alpha2}\")\n", + "else:\n", + " print(f\"Нет оснований отвергнуть гипотезу на уровне {alpha2}\")" + ] + }, + { + "cell_type": "markdown", + "id": "224852ad", + "metadata": {}, + "source": [ + "## Пункт g) Критерий χ² для проверки сложной гипотезы\n", + "При проверке сложной гипотезы параметр λ оценивается по выборке:" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "7456dc2c", + "metadata": {}, + "outputs": [], + "source": [ + "# # Критерий χ² для сложной гипотезы\n", + "# # Используем ОМП вместо λ0\n", + "# lambda_ml = 1 / mean\n", + "\n", + "# # Разбиваем данные на интервалы с шагом h\n", + "# bins = np.arange(0, max(data) + h, h)\n", + "# observed, bin_edges = np.histogram(data, bins=bins)\n", + "\n", + "# # Вычисляем теоретические вероятности для каждого интервала с λ_ml\n", + "# theoretical_prob = []\n", + "# for i in range(len(bin_edges) - 1):\n", + "# lower = bin_edges[i]\n", + "# upper = bin_edges[i+1]\n", + "# prob = np.exp(-lambda_ml * lower) - np.exp(-lambda_ml * upper)\n", + "# theoretical_prob.append(prob)\n", + "\n", + "# # Вычисляем ожидаемые частоты\n", + "# expected = np.array(theoretical_prob) * n\n", + "\n", + "# # Объединяем интервалы, где E_i < 5\n", + "# combined_observed = []\n", + "# combined_expected = []\n", + "# combined_bins = []\n", + "\n", + "# current_obs = 0\n", + "# current_exp = 0\n", + "# current_lower = bin_edges[0]\n", + "\n", + "# for i in range(len(observed)):\n", + "# current_obs += observed[i]\n", + "# current_exp += expected[i]\n", + " \n", + "# if current_exp >= 5 or i == len(observed) - 1:\n", + "# combined_observed.append(current_obs)\n", + "# combined_expected.append(current_exp)\n", + "# combined_bins.append((current_lower, bin_edges[i+1]))\n", + "# current_obs = 0\n", + "# current_exp = 0\n", + "# current_lower = bin_edges[i+1]\n", + "\n", + "# # Вычисляем статистику χ²\n", + "# chi2_stat = np.sum((np.array(combined_observed) - np.array(combined_expected))**2 / np.array(combined_expected))\n", + "\n", + "# # Степени свободы: число интервалов - 1 - 1 (для сложной гипотезы с одним оцененным параметром)\n", + "# df = len(combined_bins) - 1 - 1\n", + "\n", + "# # Критическое значение и p-значение\n", + "# chi2_crit = stats.chi2.ppf(1 - alpha2, df)\n", + "# p_value = 1 - stats.chi2.cdf(chi2_stat, df)\n", + "\n", + "# print(f\"Статистика χ² (сложная гипотеза): {chi2_stat:.4f}\")\n", + "# print(f\"Критическое значение (α={alpha2}): {chi2_crit:.4f}\")\n", + "# print(f\"p-значение: {p_value:.6f}\")\n", + "# print(f\"Степени свободы: {df}\")\n", + "\n", + "# if chi2_stat > chi2_crit:\n", + "# print(f\"Отвергаем H0 на уровне значимости {alpha2}\")\n", + "# else:\n", + "# print(f\"Нет оснований отвергнуть H0 на уровне значимости {alpha2}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "60c8dfd9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Оценка λ: 0.3586\n", + "\n", + "Критерий χ² для сложной гипотезы:\n", + " Статистика χ²: 10.9186\n", + " Критическое значение (α=0.1): 4.6052\n", + " p-значение: 0.0043\n", + " Степени свободы: 2\n", + "Гипотеза отвергается на уровне 0.1\n", + "\n", + "Таблица частот:\n", + "[0.00, 1.40): O=30, E=19.74\n", + "[1.40, 2.80): O=4, E=11.95\n", + "[2.80, 4.20): O=6, E=7.23\n", + "[4.20, 16.80): O=10, E=10.97\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from scipy.stats import chi2, expon\n", + "\n", + "# Данные\n", + "data = np.array([\n", + " 0.18, 0.10, 3.34, 0.67, 0.85, 1.17, 0.24, 0.15, 1.31, 0.00, 0.49, 2.37, 14.94, 2.44, 3.13, 0.06, 2.98, 9.25, 6.84, 3.96,\n", + " 0.07, 6.72, 11.83, 0.50, 0.11, 6.50, 0.29, 0.17, 0.03, 0.06, 1.02, 0.49, 15.68, 3.03, 0.24, 11.40, 0.53, 0.59, 4.55, 3.57,\n", + " 8.33, 0.12, 2.58, 2.77, 0.12, 1.11, 0.31, 0.36, 1.31, 0.57\n", + "])\n", + "\n", + "alpha2 = 0.10\n", + "h = 1.40\n", + "n = len(data)\n", + "\n", + "# Оценка параметра λ методом максимального правдоподобия\n", + "lambda_ml = 1 / np.mean(data)\n", + "print(f\"Оценка λ: {lambda_ml:.4f}\")\n", + "\n", + "# Построение интервалов с шагом h\n", + "max_value = np.max(data)\n", + "bins = np.arange(0, max_value + h, h)\n", + "observed, bin_edges = np.histogram(data, bins=bins)\n", + "\n", + "# Расчет теоретических вероятностей и ожидаемых частот\n", + "expected = []\n", + "for i in range(len(bin_edges) - 1):\n", + " lower = bin_edges[i]\n", + " upper = bin_edges[i+1]\n", + " prob = expon.cdf(upper, scale=1/lambda_ml) - expon.cdf(lower, scale=1/lambda_ml)\n", + " expected.append(prob * n)\n", + "expected = np.array(expected)\n", + "\n", + "# Объединение интервалов с expected < 5\n", + "observed_list = observed.tolist()\n", + "expected_list = expected.tolist()\n", + "bin_edges_list = bin_edges.tolist()\n", + "\n", + "i = 0\n", + "while i < len(expected_list):\n", + " if expected_list[i] < 5:\n", + " if i == 0 or i == len(expected_list) - 1:\n", + " # Объединяем с соседним интервалом\n", + " if i == 0:\n", + " expected_list[i+1] += expected_list[i]\n", + " observed_list[i+1] += observed_list[i]\n", + " del bin_edges_list[i+1]\n", + " else:\n", + " expected_list[i-1] += expected_list[i]\n", + " observed_list[i-1] += observed_list[i]\n", + " del bin_edges_list[i]\n", + " del expected_list[i]\n", + " del observed_list[i]\n", + " else:\n", + " # Объединяем с минимальным соседом\n", + " if expected_list[i-1] < expected_list[i+1]:\n", + " expected_list[i-1] += expected_list[i]\n", + " observed_list[i-1] += observed_list[i]\n", + " del bin_edges_list[i]\n", + " else:\n", + " expected_list[i+1] += expected_list[i]\n", + " observed_list[i+1] += observed_list[i]\n", + " del bin_edges_list[i+1]\n", + " del expected_list[i]\n", + " del observed_list[i]\n", + " else:\n", + " i += 1\n", + "\n", + "# Проверка минимального числа интервалов\n", + "if len(expected_list) < 2:\n", + " raise ValueError(\"Недостаточно интервалов после объединения!\")\n", + "\n", + "# Расчет статистики χ²\n", + "chi2_stat = np.sum((np.array(observed_list) - np.array(expected_list))**2 / np.array(expected_list))\n", + "\n", + "# Степени свободы: k - 1 - 1 (k — число интервалов, 1 оцененный параметр)\n", + "df = len(expected_list) - 2\n", + "chi2_crit = chi2.ppf(1 - alpha2, df)\n", + "p_value = 1 - chi2.cdf(chi2_stat, df)\n", + "\n", + "# Вывод результатов\n", + "print(f\"\\nКритерий χ² для сложной гипотезы:\")\n", + "print(f\" Статистика χ²: {chi2_stat:.4f}\")\n", + "print(f\" Критическое значение (α={alpha2}): {chi2_crit:.4f}\")\n", + "print(f\" p-значение: {p_value:.4f}\")\n", + "print(f\" Степени свободы: {df}\")\n", + "\n", + "if chi2_stat > chi2_crit:\n", + " print(f\"Гипотеза отвергается на уровне {alpha2}\")\n", + "else:\n", + " print(f\"Нет оснований отвергнуть гипотезу на уровне {alpha2}\")\n", + "\n", + "# Вывод таблицы с интервалами\n", + "print(\"\\nТаблица частот:\")\n", + "for i in range(len(bin_edges_list) - 1):\n", + " print(f\"[{bin_edges_list[i]:.2f}, {bin_edges_list[i+1]:.2f}): O={observed_list[i]}, E={expected_list[i]:.2f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "ab06e320", + "metadata": {}, + "source": [ + "## Пункт h) Наиболее мощный критерий\n", + "Для проверки простой гипотезы $H_0: \\lambda = \\lambda_0$ против альтернативы $H_1: \\lambda = \\lambda_1$ наиболее мощный критерий основан на отношении правдоподобия:\n", + "$$\n", + "\\Lambda = \\frac{L(\\lambda_0)}{L(\\lambda_1)} = \\frac{\\lambda_0^n e^{-\\lambda_0 \\sum_{i=1}^{n} x_i}}{\\lambda_1^n e^{-\\lambda_1 \\sum_{i=1}^{n} x_i}} = \\left(\\frac{\\lambda_0}{\\lambda_1}\\right)^n e^{-(\\lambda_0-\\lambda_1) \\sum_{i=1}^{n} x_i}\n", + "$$\n", + "Логарифмируя:\n", + "$$\n", + "\\ln \\Lambda = n \\ln\\left(\\frac{\\lambda_0}{\\lambda_1}\\right) - (\\lambda_0-\\lambda_1) \\sum_{i=1}^{n} x_i\n", + "$$\n", + "Критическая область имеет вид $\\ln \\Lambda < c$, где $c$ определяется уровнем значимости $\\alpha_2$." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "c0c3655a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Критическая область: sum_data > 179.54\n", + " Сумма данных: 139.43\n", + " Решение: Не отвергаем H0\n", + "\n", + "При замене гипотез местами:\n", + " Критическая область: sum_data < 294.14\n", + " Решение: Отвергаем H0\n" + ] + } + ], + "source": [ + "# lambda0 = 0.33\n", + "# lambda1 = 0.14\n", + "# # Наиболее мощный критерий\n", + "# # Вычисляем отношение правдоподобия\n", + "# log_lambda = n * np.log(lambda0/lambda1) - (lambda0 - lambda1) * np.sum(data)\n", + "\n", + "# # Критическое значение для уровня значимости alpha2\n", + "# # Для экспоненциального распределения можно показать, что критическая область имеет вид:\n", + "# # sum(x_i) > c, где c определяется из уровня значимости\n", + "# sum_data = np.sum(data)\n", + "# c = -np.log(alpha2) / (lambda0 - lambda1) + n * np.log(lambda0/lambda1) / (lambda0 - lambda1)\n", + "\n", + "# print(f\"Сумма наблюдений: {sum_data:.4f}\")\n", + "# print(f\"Критическое значение c: {c:.4f}\")\n", + "# print(f\"Логарифм отношения правдоподобия: {log_lambda:.4f}\")\n", + "\n", + "# if sum_data > c:\n", + "# print(f\"Отвергаем H0: λ = {lambda0} в пользу H1: λ = {lambda1}\")\n", + "# else:\n", + "# print(f\"Нет оснований отвергнуть H0: λ = {lambda0}\")\n", + "\n", + "# # Если поменять местами гипотезы\n", + "# log_lambda_reversed = n * np.log(lambda1/lambda0) - (lambda1 - lambda0) * np.sum(data)\n", + "# c_reversed = -np.log(alpha2) / (lambda1 - lambda0) + n * np.log(lambda1/lambda0) / (lambda1 - lambda0)\n", + "\n", + "# print(\"\\nЕсли поменять местами гипотезы:\")\n", + "# print(f\"Критическое значение c: {c_reversed:.4f}\")\n", + "# print(f\"Логарифм отношения правдоподобия: {log_lambda_reversed:.4f}\")\n", + "\n", + "# if sum_data < c_reversed:\n", + "# print(f\"Отвергаем H0: λ = {lambda1} в пользу H1: λ = {lambda0}\")\n", + "# else:\n", + "# print(f\"Нет оснований отвергнуть H0: λ = {lambda1}\")\n", + "\n", + "\n", + "# h) Наиболее мощный критерий\n", + "from scipy.stats import gamma\n", + "\n", + "alpha2 = 0.10\n", + "n = len(data)\n", + "sum_data = sum(data)\n", + "\n", + "# Для H0: λ=0.33, сумма данных ~ Gamma(n, 1/0.33)\n", + "c = gamma.ppf(1 - alpha2, n, scale=1/lambda0) # Квантиль уровня 1-α\n", + "\n", + "print(f\" Критическая область: sum_data > {c:.2f}\")\n", + "print(f\" Сумма данных: {sum_data:.2f}\")\n", + "print(f\" Решение: {'Отвергаем H0' if sum_data > c else 'Не отвергаем H0'}\")\n", + "\n", + "# Для обратной гипотезы (H0: λ=0.14 vs H1: λ=0.33)\n", + "c_reversed = gamma.ppf(alpha2, n, scale=1/lambda1) # Квантиль уровня α\n", + "print(f\"\\nПри замене гипотез местами:\")\n", + "print(f\" Критическая область: sum_data < {c_reversed:.2f}\")\n", + "print(f\" Решение: {'Отвергаем H0' if sum_data < c_reversed else 'Не отвергаем H0'}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "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.13.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}