# Bot check
# HW_ID: phds_sem7
# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.
# Status: not final
# Перед отправкой в финальном решении удали "not" в строчке выше.
# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.
# Никакие значения в этой ячейке не влияют на факт сдачи работы.
import numpy as np
import scipy.stats as sps
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
%matplotlib inline
sns.set_style("whitegrid")
Асимптотическая нормальность оценки¶
Пусть $X_1, ..., X_n$ — выборка из распределения $Exp(\theta)$. Как известно из теории, оценка $\widehat{\theta} = 1/\overline{X}$ является состоятельной и асимтотически нормальной оценкой параметра $\theta$ с асимптотической дисперсией $\theta^2$. В этой задаче вам необходимо визуализировать данные свойства.
В чем заключается смысл свойства асимптотической нормальности?
Ответ:
Возьмем функцию визуализации с прошлой практики.
def est_plot(estimation, sample_count, sample_size, left=None, right=None, xlim = sample_size):
'''
estimation -- массив оценок от размера выборки
sample_count -- количество генерируемых выборок
sample_size -- размер каждой выборки
left, rigth -- границы доверительного интеравала, нужны будут далее
xlim = область по x
'''
plt.figure(figsize=(15, 7))
for i in range(sample_count):
plt.plot(np.arange(sample_size) + 1, estimation[i], color='blue', alpha=0.05)
if type(left) and type(right) is np.ndarray:
plt.plot(np.arange(sample_size) + 1, left, color='black')
plt.plot(np.arange(sample_size) + 1, right, color='black')
labels = [r'$\hat{\theta}$', r'$\theta$',
'Границы доверительного интервала']
handels = [Line2D([0], [0], color='blue', lw=2),
Line2D([0], [0], color='red', lw=2),
Line2D([0], [0], color='black', lw=2)]
else:
labels = [r'$\hat{\theta}$', r'$\theta$']
handels = [Line2D([0], [0], color='blue', lw=2),
Line2D([0], [0], color='red', lw=2),]
plt.hlines(theta, 0 ,sample_size, color='red')
plt.title('Поведение оценки для разных реализаций')
plt.xlabel('Размер выборки')
plt.ylim((0, 5))
plt.legend(handels, labels)
plt.xlim((0, xlim));
Зададим параметры эксперимента
theta = 2 # истинное значение параметра
sample_size = 300 # размер выборок
sample_count = 500 # количество выборок
n_range = (np.arange(sample_size) + 1) # размеры подвыборок
Сгенерируем множество выборок (количество выборок - sample_count
, размер каждой выборки - sample_size
)
# генерируем множество выборок,
# параметр theta является обратным к параметру масштаба
samples = <...>
Вычислим оценки в зависимости от размера выборки, усредняем по последней оси
estimation = <...>
Добавим доверительный интервал для нашей оценки.
right = <...>
left = <...>
est_plot(estimation, sample_count, sample_size, left=left, right=right)
Вывод: <...>
Приблизим этот график в области малых размеров выборки (до 50). Какой вывод вы можете сделать?
est_plot(estimation, sample_count, sample_size, left=left, right=right, xlim = 50)
Вывод: <...>