% Script runs 1,000 simulations drawing a sample of size 100 from a
% Poisson distribution, and then plots histograms of the estimated
% means and estimated variances.
%
% Figure caption: Histograms siaplaying distributions of X-bar and S
% squared based on 1,000 randomly generated samples of size n = 100
% froma Poisson distribution with mean parameter mu = 10. In these
% repeated samples, both X-bat and S squared have distributions that
% are approximately normal. Both distributions are centered at 10
% (both estimators are unbiased) but the values of S squared
% fluctuate much more than do the values of X-bar.
nSimulations = 1000;
nSamples = 100;
lambda = 10;
% To obtain 1000 samples of size 100, we sample a matrix with 100
% rows and 1000 columns. Each column is a simulation.
psample = poissrnd(10, 100, 1000);
% mean and var, when the input is a matrix, by default takes the
% mean (or variance) across a column.
sampleMeans = mean(psample);
sampleVariances = var(psample);
x_vals = 4:0.01:16;
x_vals1 = 4.1:0.2:15.9;
x_vals2 = 4.5:1:15.5;
%% Histogram of sample means %%
subplot(1, 2, 1)
bar(x_vals1, hist(sampleMeans, x_vals1)./trapz(x_vals1, hist(sampleMeans, x_vals1)), 'style', 'hist')
set(gca, 'Box', 'off', 'FontSize', 20, ...
'XLim', [4, 16], ...
'XTick', 4:2:16, 'YTick', [], 'TickDir', 'out')
% Set faces to be white.
meanhist = findobj(gca, 'Type', 'patch');
set(meanhist, 'FaceColor', 'w')
y_vals1 = normpdf(x_vals, lambda, sqrt(lambda/nSamples));
hold on;
plot(x_vals, y_vals1, '-k', 'LineWidth', 2)
xlabel({''; '$\bar{X}$'}, 'Interpreter', 'LaTex', 'FontSize', 20)
% Position the device.
set(gcf, 'Position', [100, 100, 1800, 800])
set(gca,'OuterPosition',get(gca,'OuterPosition')+[-0.05, 0.025, 0.05, 0.025])
%% Histogram of sample variances %%
subplot(1, 2, 2)
bar(x_vals2, hist(sampleVariances, x_vals2)./trapz(x_vals2, hist(sampleVariances, x_vals2)), 'style', 'hist')
set(gca, 'Box', 'off', 'FontSize', 20, ...
'XLim', [4, 16], ...
'XTick', 4:2:16, 'YTick', [], 'TickDir', 'out')
% Set faces to be white.
varhist = findobj(gca, 'Type', 'patch');
set(varhist, 'FaceColor', 'w')
y_vals2 = normpdf(x_vals, lambda, sqrt((lambda/nSamples)+2*(lambda^2/(nSamples-1))));
hold on;
plot(x_vals, y_vals2, '-k', 'LineWidth', 2)
xlabel({''; '$S^2$'}, 'Interpreter', 'LaTex', 'FontSize', 20)
set(gca,'OuterPosition',get(gca,'OuterPosition')+[-0.05, 0.025, 0.05, 0.025])