# Question 1a

a = c(3,6,9,12,15,18,21,24,27,30)

pop_mean = mean(a)
print("Population Mean = ")
## [1] "Population Mean = "
print(pop_mean)
## [1] 16.5
# Question 1b

a = c(3,6,9,12,15,18,21,24,27,30)

pop_var = 0

for (i in 1:10) {
  diff_sq = (a[i] - pop_mean)^2
  pop_var = pop_var + diff_sq
}
pop_var = pop_var / 10

print("Population Variance = ")
## [1] "Population Variance = "
print(pop_var)
## [1] 74.25
# Question 1c

X=c(3,6,9,12,15,18,21,24,27,30)
d=expand.grid(X,X,X,X) #You can continue your calculations using this "d"


# Question 1d

d$X_bar = apply(d[, 1:4], 1, mean)


# Question 1e

freq_X_bar = table(d$X_bar)
proportion = prop.table(freq_X_bar)
print(proportion)
## 
##      3   3.75    4.5   5.25      6   6.75    7.5   8.25      9   9.75   10.5 
## 0.0001 0.0004 0.0010 0.0020 0.0035 0.0056 0.0084 0.0120 0.0165 0.0220 0.0282 
##  11.25     12  12.75   13.5  14.25     15  15.75   16.5  17.25     18  18.75 
## 0.0348 0.0415 0.0480 0.0540 0.0592 0.0633 0.0660 0.0670 0.0660 0.0633 0.0592 
##   19.5  20.25     21  21.75   22.5  23.25     24  24.75   25.5  26.25     27 
## 0.0540 0.0480 0.0415 0.0348 0.0282 0.0220 0.0165 0.0120 0.0084 0.0056 0.0035 
##  27.75   28.5  29.25     30 
## 0.0020 0.0010 0.0004 0.0001
# Question 1f

plot(proportion, type = "o")

# Question 1g

X_bar_mean = mean(d$X_bar)
print("Mean of 10000 numbers = ")
## [1] "Mean of 10000 numbers = "
print(X_bar_mean)
## [1] 16.5
# Question 1h

X_bar_var = 0

for (i in 1:10000) {
  diff_sq = (d$X_bar[i] - X_bar_mean)^2
  X_bar_var = X_bar_var + diff_sq
}
X_bar_var = X_bar_var / 10000

print("Variance of 10000 numbers = ")
## [1] "Variance of 10000 numbers = "
print(X_bar_var)
## [1] 18.5625
# Question 2a

sample_var_S_sq = apply(d[, 1:4], 1, var)
sample_var_sigma_sq = sample_var_S_sq * 3 / 4

given_pop_var = 74.25

expect_S_sq = mean(sample_var_S_sq)
expect_sigma_sq = mean(sample_var_sigma_sq)

bias_S_sq = expect_S_sq - given_pop_var
print("Bias[S^2] = ")
## [1] "Bias[S^2] = "
print(bias_S_sq)
## [1] 0
bias_sigma_sq = expect_sigma_sq - given_pop_var
print("Bias[sigma^2] = ")
## [1] "Bias[sigma^2] = "
print(bias_sigma_sq)
## [1] -18.5625
# Question 2b

variance_S_sq = 0
for (i in 1:10000) {
  variance_S_sq = variance_S_sq + (sample_var_S_sq[i] - expect_S_sq)^2
}
variance_S_sq = variance_S_sq / 10000

print("Var[S^2] = ")
## [1] "Var[S^2] = "
print(variance_S_sq)
## [1] 1988.044
mse_S_sq = variance_S_sq + (bias_S_sq^2)
print("MSE[S^2] = ")
## [1] "MSE[S^2] = "
print(mse_S_sq)
## [1] 1988.044
variance_sigma_sq = 0
for (i in 1:10000) {
  variance_sigma_sq = variance_sigma_sq + (sample_var_sigma_sq[i] - expect_sigma_sq)^2
}
variance_sigma_sq = variance_sigma_sq / 10000

print("Var[sigma^2] = ")
## [1] "Var[sigma^2] = "
print(variance_sigma_sq)
## [1] 1118.275
mse_sigma_sq = variance_sigma_sq + (bias_sigma_sq^2)
print("MSE[sigma^2] = ")
## [1] "MSE[sigma^2] = "
print(mse_sigma_sq)
## [1] 1462.841
# Question 3a

sample_unif_2=function(){
  s=runif(2,min=0,max=5)
  return(mean(s))
}
X_bar=replicate(10000,sample_unif_2())
plot(density(X_bar))

# Question 3b

sample_unif_5=function(){
  s=runif(5,min=0,max=5)
  return(mean(s))
}
X_bar=replicate(10000,sample_unif_5())
plot(density(X_bar))

# Question 3c

sample_chi_sq_1_5=function(){
  s=rchisq(5,df=1)
  return(mean(s))
}
X_bar=replicate(10000,sample_chi_sq_1_5())
plot(density(X_bar))

# Question 3d

sample_chi_sq_1_60=function(){
  s=rchisq(60,df=1)
  return(mean(s))
}
X_bar=replicate(10000,sample_chi_sq_1_60())
plot(density(X_bar))

# Question 3e

sample_chi_sq_60_5=function(){
  s=rchisq(5,df=60)
  return(mean(s))
}
X_bar=replicate(10000,sample_chi_sq_60_5())
plot(density(X_bar))