%% Función Distribución. 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 de Distribución (FD o, en inglés, cdf: cumulative distribution function) de una variable aleatoria se puede estimar o aproximar a partir de un número suficientemente elevado de realizaciones de la variable aleatoria.
% Recuerda que si disponemos de N realizaciones de una v.a. X y denominamos n_x al número de resultados menores o iguales que un valor x, entonces
% lim_{N \rightarrow \infty} \frac{n_x}{N} = P(X \leq x) = F_X(x)
%% Generación de las realizaciones de la v.a.

N = 50;             % 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 Distribución
% Para construir la Función Distribución, basta con ordenar el vector de realizaciones y estimar la probabilidad (la frecuencia relativa) de que ocurra un valor menor o igual que cada valor del vector ordenado:

x_ordenado = sort(x,'ascend');  % Ordenamos las realizaciones
FD_estimada = (1:N)/N;         % Construimos un vector de probabilidades crecientes desde 1/N hasta N/N=1

x_grid = linspace(min(x)-1,max(x)+1,1000);  % Eje horizontal (valores de x) en los que evaluaremos la FD teórica
FD_teorica = normcdf(x_grid);               % FD gaussiana teórica usando la función de matlab normcdf

plot(x_ordenado,FD_estimada,'b',x_grid,FD_teorica,'r');grid;title('Función Distribución. Interpretación Frecuencial');legend('Estimada','Teórica','Location','northwest');xlabel('x');ylabel('P(X \leq x)')

%% Representación gráfica
% Le damos forma escalonada a la FD estimada. Para ello simplemente hay que duplicar convenientemente tanto los valores del eje horizontal como de la FD

FD_escalonada = [0 0 FD_estimada(round(0.5:0.5:end))];
x_escalonada = [x_ordenado(1)-1 x_ordenado(round(0.5:0.5:end)) x_ordenado(end)+1];

plot(x_escalonada,FD_escalonada,'b',x_grid,FD_teorica,'r');grid;title('Función Distribución. Interpretación Frecuencial');legend('Estimada','Teórica','Location','northwest');xlabel('x');ylabel('P(X \leq x)')

%% Prueba tú ahora
% Prueba a aumentar o disminuir el número, N, de realizaciones. Comprueba qué efecto tiene en la precisión y variabilidad de la estima de la Función Distribución. Recuerda la definición frecuencial de probabilidad.
% 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 FD_teorica).