蒙特卡洛实验估计覆盖概率

机器算法验证 r 自习 蒙特卡洛 模拟
2022-04-04 07:51:11

我正在为我正在审核的课程解决以下问题:

假设应用 95% 的对称 t 区间来估计平均值,但样本数据是非正态的。那么置信区间覆盖均值的概率不一定等于 0.95。使用 Monte Carlo 实验来估计 数据的随机样本的 t 区间的覆盖概率χ2(2)n=20

这是我的 R 代码的当前状态:

alpha = 0.05;
n = 20;
m = 1000;

UCL = numeric(m);
LCL = numeric(m);

for(i in 1:m)
{
    x = rchisq(n, 2);
    LCL[i] = mean(x) - qt(alpha / 2, lower.tail = FALSE) * sd(x);
    UCL[i] = mean(x) + qt(alpha / 2, lower.tail = FALSE) * sd(x);
}

# This line below is wrong...
mean(LCL > 0 & UCL < 0);

问题是结果是我是否错误地处理了这个问题?覆盖概率究竟是什么意思...?0

2个回答

我不同意亨利 - 我认为你应该除以 sqrt(n),因为它是平均值的置信区间。您还必须为df = n-1您的 qt 调用添加一个参数。

最后一行应该是mean(LCL < 2 & UCL > 2). 这是因为 2 是真实均值,并且您对 2 在置信区间内的条件感兴趣。

您的代码有几个问题:

  1. mean(UCL < 0 & LCL > 0)的情况很奇怪,尤其是失败了,因为 UCL 的结果是积极的,所以你取的是空集的平均值。分布只取正值χ2
  2. (自已解决)您的 UCL 小于 LCL,这是对上层下层的稍微奇怪的使用
  3. R 中不需要分号,除非您想在同一行上使用多个指令
  4. (错误 - 正如 mark999 所指出的)您正在除以sqrt(n)这错误地缩小了您的置信区间:它是为了找到平均值的标准误差,但您关心原始分布。
  5. 该问题告诉您使用“t-interval”,但您使用的是正态分布。您可以尝试输入?qtR

尝试这个

alpha = 0.05
n = 20
m = 1000

UCL = numeric(m)
LCL = numeric(m)

for(i in 1:m)
{
    x = rchisq(n, 2) # compare with x = rnorm(n) + 2
    LCL[i] = mean(x) - qt(alpha / 2, df=n-1, lower.tail = FALSE)*sd(x)/sqrt(n)
    UCL[i] = mean(x) + qt(alpha / 2, df=n-1, lower.tail = FALSE)*sd(x)/sqrt(n)
}

mean(LCL < 2 & UCL > 2)