%% Función Densidad de Probabilidad. Interpretación frecuencial
% Copyright (c) 2023 G.T.A.S. (Grupo Tratamiento Avanzado de Señal). Universidad de Cantabria.
% Métodos Matemáticos para Telecomunicaciones.
%
% En este ejemplo se comprueba cómo la Función Densidad de Probabilidad (fdp o, en inglés, pdf: probability density function) de una variable aleatoria se puede estimar o aproximar a partir de un número suficientemente elevado de realizaciones de la variable aleatoria mediante un histograma.
% Recuerda que si disponemos de N realizaciones de una v.a. X y denominamos n_x al número de resultados pertenecientes a un intervalo de longitud \Delta x, entonces
% P_X(x < X \leq x+\Delta x) \simeq f_X(x) \Delta x \simeq \frac{n_x}{N}
%% Generación de las realizaciones de la v.a.

N = 100000;         % Número de realizaciones
x = randn(1,N);     % Vector (matriz 1xN) con N realizaciones de la v.a. En este caso normal o gaussiana (con media 0 y varianza 1)

%% Estimación de la Función Densidad de Probabilidad
% Para construir la fdp, basta con realizar un histograma cuidando de escalar el eje vertical adecuadamente, para lo cual deberemos representar barras verticales cuyo área sea igual a la probabilidad del intervalo, es decir, barras de anchura \Delta x y de altura \frac{n_x}{N \Delta x}  \simeq  P_X(x \leq X \leq x+\Delta x) / \Delta x  \simeq f_X(x):

Delta_x = 0.2;  % Anchura de los intervalos del histograma
min_x = -4;     % Valor mínimo del eje x en las gráficas e histogramas
max_x = 4;      % Valor máximo del eje x en las gráficas e histogramas

[n_x,eje_x] = hist(x,[min_x:Delta_x:max_x]);    % Obtenemos un histograma a partir del vector de realizaciones x
fdp_estimada = n_x/(N*Delta_x);                 % Construimos la fdp estimada. La representaremos como un histograma usando la función bar

x_grid = linspace(min_x,max_x,1000);            % Eje horizontal (valores de x) en los que evaluaremos la fdp teórica
fdp_teorica = 1/sqrt(2*pi)*exp(-x_grid.^2/2);   % fdp teórica (gaussiana en este ejemplo. se podría usar la función de matlab normpdf)

bar(eje_x,fdp_estimada);hold on
plot(x_grid,fdp_teorica,'r','LineWidth',2);hold off
grid on;title('Función Densidad de Probabilidad. Interpretación Frecuencial');legend('Estimada','Teórica','Location','northwest');xlabel('x');ylabel('n_x/(N \Deltax)')

%% Prueba tú ahora
% Prueba a aumentar o disminuir el número, N, de realizaciones. Comprueba qué efecto tiene en la precisión de la estima de la fdp. Ejecuta el programa varias veces para cada valor de N para observar la variabilidad estadística. Recuerda la definición frecuencial de probabilidad.
% Prueba a aumentar y disminuir la anchura de los intervalos del histograma, \Delta x.
% Prueba a cambiar la varianza y/o la media de la v.a. X sin más que multiplicar al vector x por cierta constante y/o sumarle otra constante. Cuidado, deberás modificar en consecuencia la expresión de fdp_teorica y, quizás, los rangos de las gráficas (min_x y max_x)
% Intenta repetir el ejercicio con variables aleatorias distintas a la normal o gaussiana modificando la segunda línea en la que se genera el vector x de realizaciones de la v.a. (también será necesario modificar la instrucción donde se evalúa el vector fdp_teorica).