Bootstrap CI覆盖属性的R编码功能

时间:2019-05-10 02:02:52

标签: r simulation simulator

我需要编写一个函数来执行仿真,以评估正态分布中n个样本的方差的自举置信区间的覆盖范围。以下是我尝试过的操作,但是对于CI范围内的样本数量,它始终返回0或0.002的平均值。

Var_CI_Coverage <- function(true_mean,true_var, nsim, nboot, alpha, nsamples){
    cover = NULL
    for(k in 1:nsim){
        Var = as.numeric()
        y <- rnorm(1, mean = true_mean, sd = sqrt(true_var))
        for(i in 1:nboot){
            resample_y <- sample(y, size = nsamples, replace = TRUE)
            Var[i] <- var(resample_y)
        }
        LB <- quantile(Var, probs=c(alpha/2))
        UB <- quantile(Var, probs=c(1 - (alpha/2)))
        cover[k] <- ifelse(LB <= true_var & UB >= true_var, 1, 0)
    }
    return(mean(cover))
}

Var_CI_Coverage(true_mean= 0, true_var = 4, nsim = 500, nboot = 1000, alpha = 0.05, nsamples = 10)

1 个答案:

答案 0 :(得分:2)

主要问题是您使用生成y

y <- rnorm(1, mean = true_mean, sd = sqrt(true_var))

,这意味着y是一个单一值,您所有的引导程序样本都只是重复y次的那个单一nsamples值。您需要

y <- rnorm(nsamples, mean = true_mean, sd = sqrt(true_var))

然后,您将获得具有实际方差的样本,并且得到的覆盖范围估计值在正确的范围内看起来会更多(没有评论它是否正确,我没有尝试检查)。