1

I am trying to prove the equality of $$\rm MSE(\langle I\rangle)=Var(\langle I \rangle)+Bias(\langle I \rangle)^2$$ but obviously I got something wrong as they don't equal in my calculation:

So here is the example. I use monte carlo to estimate this integral:

$$I = \int_0^1 5x^4~\mathrm dx$$

The value of this integral is 1. Assuming samples are computed from a uniform probability distribution my estimator is:

$$\langle I\rangle = \frac1N\sum _1^N 5x_i^4$$

And the variance of the estimator can be analytically computed as:$$ \textrm{Var}(\langle I\rangle )= \frac1N\int _0^1(5x^4-1) ^2~\mathrm dx=\frac{16}{9N}$$

So Var here is the variance of the estimator, is that right? where, up to each iteration I calculate it as:

$$ \textrm{Var}(\langle I\rangle )= {(\mathrm E[\langle I\rangle ^2] - \mathrm E[\langle I\rangle]^2) }$$

and in the code:

float Ie = sum / (i + 1); //estimator
float avg2 = sum2 / (i + 1);
float var = avg2 - (Ie * Ie);
var /= i + 1;

and the bias is simply:

float bias2 = (trueValue - Ie);
bias2 *= bias2;

Here is the full code:

#include <iostream>

const int nsamp = 100;

int main() { float trueValue = 1; float data[nsamp]; float sum = 0; float sum2=0; float mse = 0; float sqErr=0;

for (int i = 0; i &lt; nsamp; i++)
{
    float x = rand1();
    data[i] = 5 * x*x*x*x;
    sum += data[i];
    sum2 += data[i] * data[i]; 

    float Ie = sum / (i + 1); //estimator
    float avg2 = sum2 / (i + 1);
    float var = avg2 - (Ie * Ie);
    var /= i + 1;

    float bias2 = (trueValue - Ie);
    bias2 *= bias2;

    sqErr += (trueValue - Ie) * (trueValue - Ie);
    mse = sqErr / (i+1);

    printf(&quot;\nI=%f Var=%f Bias2=%f MSE=%f&quot;, Ie, var, bias2, mse);
}

}

And the output where the mse doesn't equal var+bias2:

I=0.000000 Var=0.000000 Bias2=1.000000 MSE=1.000000
I=0.252220 Var=0.031807 Bias2=0.559176 MSE=0.779588
I=0.170473 Var=0.018592 Bias2=0.688114 MSE=0.749097
I=0.662600 Var=0.192099 Bias2=0.113839 MSE=0.590282
I=0.647206 Var=0.123133 Bias2=0.124464 MSE=0.497118
I=0.583528 Var=0.088888 Bias2=0.173449 MSE=0.443174
I=0.510921 Var=0.069824 Bias2=0.239198 MSE=0.414034
.
.
.
I=0.984586 Var=0.001662 Bias2=0.000238 MSE=0.005417
I=0.983600 Var=0.001659 Bias2=0.000269 MSE=0.005411
I=0.982616 Var=0.001657 Bias2=0.000302 MSE=0.005406
I=0.985189 Var=0.001660 Bias2=0.000219 MSE=0.005401
I=0.984248 Var=0.001658 Bias2=0.000248 MSE=0.005396
I=0.983362 Var=0.001655 Bias2=0.000277 MSE=0.005391
ali
  • 143
  • Your formula for the variance is incorrect. It assumes the mean is $1,$ but it obviously cannot be. It is unclear what your variance formulas are intended to represent. – whuber Aug 27 '22 at 15:48
  • I changed it the formula. But the code was correct. It was subtracting from the mean not 1. And so the results are still not coming as expected :( – ali Aug 27 '22 at 16:08
  • You must fix the English and mathematical part of your question before we can proceed. Otherwise, your question comes down to "don't believe what I have written because I know it's wrong--just tell me why my code doesn't work." We can't answer that and it's off-topic anyway. – whuber Aug 27 '22 at 16:13
  • Yes I did change it. – ali Aug 27 '22 at 16:14
  • 1
    Hi: Your code is confusing because everything is in terms of x but the random variable itself is a function of x. Also, if you know R, it's a lot easier to do these types of things in R. One part that seems wrong to me is the calculation of E(I^2). This is the expectation of a (summation) squared so it seems to me a lot more complicated than what you are doing with avg2. Every term in that sum is squared whereas you are only squaring each term with the same $i$. Maybe if you fix that and re-do everything in R, things will become clearer for yourself and anyone who is reading this thread. – mlofton Aug 28 '22 at 00:19

0 Answers0