Phystech@DataScience ¶

In [ ]:
# Bot check

# HW_ID: phds_sem7
# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.

# Status: not final
# Перед отправкой в финальном решении удали "not" в строчке выше.
# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.
# Никакие значения в этой ячейке не влияют на факт сдачи работы.
In [ ]:
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$. В этой задаче вам необходимо визуализировать данные свойства.

В чем заключается смысл свойства асимптотической нормальности?

Ответ:

Возьмем функцию визуализации с прошлой практики.

In [ ]:
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));

Зададим параметры эксперимента

In [ ]:
theta = 2  # истинное значение параметра
sample_size = 300  # размер выборок
sample_count = 500  # количество выборок
n_range = (np.arange(sample_size) + 1)  # размеры подвыборок

Сгенерируем множество выборок (количество выборок - sample_count, размер каждой выборки - sample_size)

In [ ]:
# генерируем множество выборок,
# параметр theta является обратным к параметру масштаба
samples = <...>

Вычислим оценки в зависимости от размера выборки, усредняем по последней оси

In [ ]:
estimation = <...>

Добавим доверительный интервал для нашей оценки.

In [ ]:
right = <...>
left = <...>
In [ ]:
est_plot(estimation, sample_count, sample_size, left=left, right=right)

Вывод: <...>

Приблизим этот график в области малых размеров выборки (до 50). Какой вывод вы можете сделать?

In [ ]:
est_plot(estimation, sample_count, sample_size, left=left, right=right, xlim = 50)

Вывод: <...>