% This plot shows the effect of a linear transform to a normal random
% variable.
sd_neighborhood = 5; % We'll plot +/- this many SDs.
% Set up X as N(5.5, 0.5) and Y as a log transform of X.
xMu = 5.5;
xSigma = 0.5;
yMu = log(xMu);
ySigma = xSigma/abs(xMu);
xMax = 2.2*xMu;
xValues = xMu-sd_neighborhood*xSigma:0.01:xMu+sd_neighborhood*xSigma;
xDensityValues = normpdf(xValues, xMu, xSigma);
yValues = log(xValues);
yDensityValues = normpdf(yValues, yMu, ySigma);
nValuesUsed = numel(xDensityValues);
% The next few lines scale the x and y density values so they
% appear nicely on the figure. The goal is to show how the log
% transform affects the width and location of the density, so the
% actual scale is not important here.
xIntegral = trapz(xDensityValues - min(xDensityValues)) / nValuesUsed;
xIntegral = trapz(yDensityValues - min(yDensityValues)) / nValuesUsed;
normalizedXDensities = (xDensityValues - min(xDensityValues)) / xIntegral;
normalizedYDensities = (yDensityValues-min(yDensityValues))/ yIntegral;
figureScaleXDensities = (log(xMu)*normalizedXDensities)/(2*max(normalizedXDensities));
figureScaleYDensities = (xMu*normalizedYDensities)/(2*max(normalizedYDensities));
% Plot both.
figure
orient landscape
% Plot the x density on the horizontal axis.
xplot = plot(xValues, figureScaleXDensities, 'k', 'LineWidth', 3);
hold on;
% Plot the y density on the vertical axis.
plot(figureScaleYDensities, yValues, 'k', 'LineWidth', 3)
% Plot a line showing the relationship of the means.
plot(1:0.01:xMax, log(1:0.01:xMax), '-k', 'LineWidth', 3)
% Show lines for the means connecting to the diagonal line showing
% their relationship.
line([xMu, xMu], [0, yMu], 'LineStyle', ':', ...
'Color', [0.8, 0.8, 0.8], 'LineWidth', 3)
line([0, xMu], [yMu, yMu], 'LineStyle', ':', ...
'Color', [0.8, 0.8, 0.8], 'LineWidth', 3)
line([0, xMax], [yMu-sign(xMu), xMax/abs(xMu)+yMu-sign(xMu)], ...
'Color', 'k', 'LineWidth', 3)
% Set axis style.
set(gca, 'Box', 'off', 'FontSize', 20, ...
'XColor', 'w', 'YColor', 'w', ...
'XLim', [-0.4, xMax], 'Ylim', [-0.03, log(xMax)], ...
'XTick', [], 'YTick', [])
set(gcf, 'Position', [600, 65, 1300, 920])
pause(1)
% Add LaTeX intrepreted labels. Locations are hard-coded here,
% which is not generally good practice.
meanEquation = '$y-\mu_y=\frac{1}{|\mu_x|}(x-\mu_x) \mathbf{\rightarrow}$'
text(4.6, 2.4, equation, 'FontSize', 22, 'Interpreter', 'LaTex')
variableEquation = '$\mathbf{\leftarrow} y = log(x)$'
text(9, 2.15, variableEquation , 'FontSize', 22, 'Interpreter', 'LaTex')
xlabel('$\it\mu_x$', 'FontSize', 22, 'Color', 'k', ...
'Interpreter', 'LaTex', ...
'Position', [xMu, -0.07])
ylabel('$\it\mu_y$', 'FontSize', 22, 'Color', 'k', ...
'Rotation', 0, 'Interpreter', 'LaTex', ...
'Position', [-0.25, 1.64])