[Math] Monte Carlo – Control Variates & Antithetic method

monte carlonumerical methodsprobabilitysimulation

Supposing $g(x)=\sqrt[3]{x}$, I want to calculate the expected value of g, $E(\sqrt[3]{x})$, using Monte Carlo method, by generating $x_i$ from a Weibull distribution with parameters $(1,5)$.

After that, I want to use the control variates method and the antithetic method in order to to reduce the variance of my estimator, which I found with the simple Monte Carlo. And here is my problem, I do not know how to do these methods.

I would appreciate if someone could help me do that or give any tip/help.Thank you very much for your concern, in advance.

What I have done so far

Supposing $S$ is our estimator, then we know that $S=(\sum \limits_{i=1}^{N} g(x_i))/N$.

Using Matlab, I found the expected value $S$ by generating 1000 random numbers from the weibull(1,5) distribution and calculate the sum. Here, is my algorithm:

N=1000

sum=0;

for i=1:N;

X = wblrnd(1,5);

res(i)=X.^(1/3);

sum=sum+res(i);

end

S=sum/N

Best Answer

The wikipedia pages for the control variates method and the antithetic method are a pretty good start to learn about them.

The antithetic method seems the easiest to implement. What you should do is sample random numbers from your distribution (here the Weibull distribution) and for each of those numbers create another number according to a procedure that makes the new numbers be realizations of a random variable with negative covariance with respect to the original Weibull variable that is used for generating the first sequence of numbers. This way, you reduce the total variance on your estimate of the expected value.

Practically, I think the following should do the trick (I'm using R code):

n<-10000;
x<-rweibull(n,1,5); # Generate n random numbers 
                    # distributed according to Weib(1,5)
y<-qweibull(1-pweibull(x,1,5),1,5); # Generate n numbers fom the previous ones 
                                    # to be "in the opposite quantile".
z<-c(x,y);
sum(z^(1/3))/(2*n); # Compute the mean

Maybe it's more efficient to generate uniformly distributed random numbers $u_i$, take their complements $1-u_i$ and from these generate the Weibull distributed variables using qweibull. Also this might not be the best choice to minimize the variance.

Related Question