Question 3 This questions requires you to examine computational differences for methods used to calculate sample variation. You will implement three approaches. You should find that two of these approaches calculate the sample variation more accurately than the other approach. Note that the values provided in part a. coincide with a large mean and a small variance. This scenario can be particularly problematic computationally when calculating sample variance. a. Add code to H4_Q3 that declares an array of doubles named values initialized with the following: {100000000.6,99999999.8,100000002.8,99999998.5,100000001.3 }. b. Add code to H4_Q3 that determines the sample variance using the following equation: S = Pn−1 i=0 (xi − x¯) 2 n − 1 where x¯ = Pn−1 i=0 xi n . The individual xi values are given as {10,000.6, 9,999.8, 10,002.8, 9,998.5, 10,001.3 } so that n = 5 with x indexed as i = 0, . . . , 4. c. Add code to H4_Q3 that determines the sample variance using the following equation: 2 S =   Pn−1 i=0 x 2 i n − Pn−1 i=0 xi n !2   × n n − 1 with xi given in b. d. Add code to H4_Q3 that calculates the sample variance using the following method: Algorithm 1: Sample Variance Algorithm: Part d Result: Sample Variance: Sn−1 n−1 initialization: Set M0 = x0; S0 = 0 and i = 1; while i ≤ n − 1 do Mi = Mi−1 + xi−Mx−1 i+1 ; Si = Si−1 + (xk − Mk−1) ∗ (xk − Mk) end with xi given in b. This approach to calculating sample variance is known as the Welford method.

Respuesta :

Answer:

sigma formulas are executed by using for loop to sum all the values.

public class H4_Q3{

public static void main(String[] args)

{

//Part a

double[] values = {100000000.6, 99999999.8, 100000002.8, 99999998.5, 100000001.3};

int n = values.length;

//Part b;

double sum = 0;

double sample_average = 0;

double sample_variance = 0;

int i = 0;

for(i = 0; i < n; i++)

{

sum = sum + values[i];

}

sample_average = sum/n;

for(i = 0; i < n; i++)

{

sample_variance = sample_variance + (Math.sqrt(values[i]) - sample_average);

}

System.out.println("Sample variance (Part b formula): "+sample_variance);

//Part c

double sum_squared = 0;

double sum_values = sample_average;

for(i = 0; i < n; i++)

{

sum_squared = sum_squared + Math.sqrt(values[i]);

}

sum_squared = sum_squared/n;

sample_variance = (sum_squared - Math.sqrt(sum_values)) * (n/ (n - 1));

System.out.println("Sample variance (Part c formula): "+sample_variance);

//Part d

sample_variance = 0;

double[] M = new double[n];

double[] S = new double[n];

M[0] = values[0];

S[0] = 0;

i = 1;

while(i < n)

{

M[i] = M[i-1] + ((values[i] - M[i-1])/i+1);

S[i] = S[i-1] + (values[i] - M[i-1]) * (values[i] - M[i]);

i++;

}

System.out.println("Sample variance (Part d formula): "+S[n-1]/n);

}

}