%% Variable Aleatoria Bidimensional
% 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 representan gráficamente la función densidad de probabilidad conjunta y la función de distribución conjunta de diversas variables aleatorias bidimensionales. También se representan las distintas marginales y su relación con la conjunta.
%% Generación de las realizaciones de la v.a. bidimensional
% Puede modificar el tipo de variable aleatoria bidimensional que se generará sin más que modificar el código de la función matlab denominada genera_va_bidimensional que se encuentra al final del Live Script.

N = 100000;     % Número de realizaciones
[x,y] = genera_va_bidimensional(N);   % Vectores con N realizaciones de la v.a. bidimensional

%% Estimación de la Función Densidad de Probabilidad
% Se estima la fdp a partir del histograma bidimensional

histogram2(x,y,'Normalization','pdf');
xlabel('x');ylabel('y');zlabel('estima f_X_Y(x,y)');title('Función Densidad de Probabilidad Conjunta')

% También es posible representar los histogramas de las variables individuales, es decir, las fdp's marginales.

subplot(211);histogram(x,'Normalization','pdf');
xlabel('x');ylabel('estima f_X(x)');title('Función Densidad de Probabilidad Marginal de X')
subplot(212);histogram(y,'Normalization','pdf');
xlabel('y');ylabel('estima f_Y(y)');title('Función Densidad de Probabilidad Marginal de Y')

% Nótese que la marginal de X se puede calcular como la integral de la fdp conjunta desde y=-\infty hasta y=+\infty para cada valor x, es decir:
% f_X(x)=\int_{-\infty}^{+\infty}f_{XY}(x,y)dy
% Observe en la figura inferior (fdp conjunta representada como mapa de calor) cómo la marginal deX para un valor concretox se puede obtener integrando dicha fdp conjunta a lo largo de la línea vertical que pasa por dicho valor de x.

subplot(111);histogram2(x,y,'Normalization','pdf','DisplayStyle','tile');
xlabel('x');ylabel('y');title('Función Densidad de Probabilidad Conjunta');colorbar

%% Estimación de la Función de Distribución
% Se estima la Función de Distribución conjunta a partir del histograma acumulativo bidimensional

subplot(111);histogram2(x,y,'Normalization','cdf');
xlabel('x');ylabel('y');zlabel('estima F_X_Y(x,y)');title('Función de Distribución Conjunta')

% También es posible representar los histogramas acumulativos de las variables individuales, es decir, las funciones de distribución marginales.

subplot(211);histogram(x,'Normalization','cdf','DisplayStyle',"stairs");
xlabel('x');ylabel('estima F_X(x)');title('Función de Distribución Marginal de X')
subplot(212);histogram(y,'Normalization','cdf','DisplayStyle',"stairs");
xlabel('y');ylabel('estima F_Y(y)');title('Función de Distribución Marginal de Y')

% Nótese que la función distribución marginal de X se puede calcular como la función de distribución conjunta particularizada en y=+\infty, es decir, F_X(x)=F_{XY}(x,+\infty)
% Puede comprobarlo girando la figura de la función de distribución conjunta hasta que desdaparezca el eje y y se observe de frente el eje x. En esa posición se observará la la función distribución marginal de X.

return

%
%% Función matlab genera_va_bidimensional
% Modifique el código de esta función para generar la variable aleatoria bidimensional deseada.

function [x,y] = genera_va_bidimensional(N)
% Función de deneración de variables aleatorias bidimensionales
% Modifique el código para generar la variable aleatoria bidimensional deseada
    
    z = randn(1,N); % v.a. N(0,1)
    u = rand(1,N);w = (log(2*u)/2+1).*(u<=1/2) + (-log(2-2*u)/2+1).*(u>1/2);    % v.a. Laplace con c=2 y media=4
    x = z + 2*w;
    y = -3*z - w;

%     x = 10*rand(1,N);y = rand(1,N).*(10-x); % Problema 4 Tema 4           
end