In this example, we use Chebfun to solve some probability distribution problems from [1].
1. Expectation of a random variable
We use Problem 3.4 from p. 86 of [1] to motivate this example.
Suppose a continuous random variable $X$ has the probability density function
$$ f(x) = 2e^{-2x},~~ x \ge 0, \qquad f(x) = 0, ~~ x < 0. $$
What are: (a) $E(X)$ and (b) $E(X^2)$?
(a) In order to compute the expectation $E(X)$, we first define a chebfun for $X$. This can be done over the semi-infinite interval $[0,\infty)$, but the resulting integrals lose a few digits of precision. Instead, since $\exp(-x)$ decreases so quickly, we take the interval to be $[0,40]$.
x = chebfun('x',[0 40]);
Next we approximate the density function.
f = 2*exp(-2*x); figure('Position',[100 200 520 180]) LW = 'linewidth'; lw = 1.6; plot(f,LW,lw), grid on ylim([-0.2 2.2]) xlabel('x'), ylabel('f(x)','rotation',0)
If $f$ is a density function, its integral should be $1$, and we find that this is indeed the case to within rounding errors.
sum(f)
ans = 1.000000000000001
The expectation of a continuous random variable is defined as the integral over of $xf(x)$.
xf = x.*f; plot(xf,LW,lw), grid on ylim([-0.05 0.4]) xlabel('x'), ylabel(sprintf('x f(x)\n'),'rotation',0)
We can use the chebfun command sum
to compute this integral The correct answer in this case is $1/2$.
format long sum(xf)
ans = 0.500000000000006
b) For $E(X^2)$, the answer is again $1/2$ and we compute this in the same way as before.
xxf = x.^2.*f; plot(xxf,LW,lw), grid on ylim([-0.03 0.31]) xlabel('x'), ylabel('x^2 f(x)','rotation',0)
sum(xxf)
ans = 0.500000000000144
2. Mean, median and mode of a probability distribution
This example is motivated by problem 3.33 on p. 94 of [1].
The probability density function of a continuous random variable $X$ is
$$ g(x) = 4x(9-x^2)/81, ~~ 0\le x\le 3, $$
and zero otherwise. Find: a) the mean, b) the median, and c) the mode.
First, we define an appropriate Chebfun variable and the pdf:
x = chebfun('x',[0 3]); g = 4*x.*(9-x.^2)/81; plot(g,LW,lw), grid on ylim([-0.01 0.61]) xlabel('x'), ylabel('g(x)','rotation',0)
a) Computing the mean is simply a matter of computing the expectation as in the previous question. The exact answer is $1.6$ and this is what we find using Chebfun.
mean = sum(x.*g)
mean = 1.600000000000000
b) The median is the value $a$ for which $P(X\le a) = 1/2$. In order to solve this problem we need to work with the cumulative distribution function, which is simply the indefinite integral of the probability density. This can be computed with the chebfun command cumsum
.
G = cumsum(g); plot(G,LW,lw), grid on xlabel('x'), ylabel(sprintf('G(x)\n'),'rotation',0)
Note again that as we would expect for any pdf, the integral is $1$. Here is the median $a$:
median = roots(G-0.5) median_exact = sqrt(9-9*sqrt(2)/2)
median = 1.623588300438591 median_exact = 1.623588300438591
c) For the mode, we are looking for the position of the global maximum of the probability distribution. This is easily computed with the Chebfun command max
.
[gmax,mode] = max(g); display(mode)
mode = 1.732050807568878
Again, this matches the exact result
mode_exact = sqrt(3)
mode_exact = 1.732050807568877
Here is a graph showing the three computed values:
plot(g,LW,lw), grid on, hold on plot([mean mean],[0 g(mean)],'-r',LW,lw) plot([median median],[0 g(median)],'-m',LW,lw) plot([mode mode],[0 g(mode)],'-k',LW,lw) text(0.2,0.55,sprintf('mean = %1.2f',mean),'color','r') text(1.2,0.55,sprintf('median = %1.2f',median),'color','m') text(2.2,0.55,sprintf('mode = %1.2f',mode),'color','k') hold off, ylim([-0.01 0.61]) xlabel('x'), ylabel('g(x)','rotation',0)
Reference
- M. Spiegel, J. Schiller, and R. Srinivasan, Schaum's Outlines: Probability and Statistics, 3rd. ed., 2009.