# Asymptotic distribution of MLEs¶

In class, we have seen that the asymptotic distribution of a maximum likelihood estimator $$\hat{\theta}_{MLE}$$ for a parameter $$\theta$$ is $$\hat{\theta}_{MLE} \sim N(\theta, CRLB)$$. In class, we have shown that the maximum likelihood estimator $$\hat{\theta}_{MLE}$$ for the scale parameter $$\theta$$ of Gamma distribution, when the shape parameter $$\kappa$$ is known is: $$\hat{\theta}_{MLE}=\frac{\bar{X}}{\kappa}$$, where its asymptotic distribution is normal distribution with mean $$\theta$$ and variance $$\frac{\theta^{2}}{n\kappa}$$. Let’s investigate how the asymptotic distribution of $$\hat{\theta}_{MLE}$$ changes with respec to sample size $$n$$, when $$\kappa=1$$.

# import required libraries
import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import display

# define a function
def mle_gamma_dist_theta(teta = 1, n = 100):

np.random.seed(123) # set a random seed
#n = 100  #sample size default = 100
N = 100000  #number of repeatitions (repeated sampling)
k = 1  #true population shape parameter, fixed over the simulation
# when k = 1, thetahat = xbar
#theta = 1  #true population scale parameter, default = 1
#generate true population under these settings
pop_data = np.random.gamma(shape = k, scale = teta, size = N)
#generate N different samples with size of n under these settings
data = np.random.choice(pop_data, size = (n, N))

xbar = data.mean(axis = 0)  #calculates xbar for each N sample
grand_avg = xbar.mean() #find the mean of N xbar estimates
grand_var = xbar.var(ddof=1)  #find the the sample variance of N xbar estimates

fig, ax = plt.subplots(figsize = (10, 10))

# Plot the histogram of true population
plt.subplot(1, 2, 1)
plt.hist(pop_data, bins=25, density=True, alpha=0.5, color='b')
plt.title(r'True population: Gamma dist. with $\theta=%.1f, \kappa=%.1f$' % (teta,k))
plt.xlabel(r'$x$')

# Plot the histogram of sample means
plt.subplot(1, 2, 2)
plt.hist(xbar, bins=25, density=True, alpha=0.5, color='b')
plt.title(r"Asymptotic distribution of $\hat{\theta}_{MLE}=\frac{\bar{X}}{\kappa}$")
plt.xlabel(r'$\frac{\bar{x}}{\kappa}$')
#plt.ylim(0, 2) ######i need to work on upper ylim and coordinates of plt.text later######

#mle_gamma_dist_theta(theta = 1, n = 10)

theta_wid = widgets.IntSlider(min = 1, max = 10, step=1, value=1, description = r'$\theta$')

widgets.interact(mle_gamma_dist_theta, teta = theta_wid, n = sample_size_wid);