Вірогідність покриття базового інтервалу надійності завантаження


11

У мене є питання щодо курсу, над яким я працюю:

Проведіть дослідження в Монте-Карло, щоб оцінити ймовірність покриття стандартного нормального довірчого інтервалу завантаження та основного довірчого інтервалу завантажувальної стрічки. Вибірка з нормальної сукупності та перевірка рівня емпіричного покриття для середньої вибірки.

Ймовірності покриття для звичайного звичайного інтерфейсу завантаження:

n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);

LNorm = numeric(B);
UNorm = numeric(B);

for(j in 1:B)
{
    smpl = x[sample(1:n, size = n, replace = TRUE)];
    xbar = mean(smpl);
    s = sd(smpl);

    LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
    UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}

mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail

З того, що я викладав на цьому курсі, основний інтервал довіри завантаження можна обчислити так:

# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);

Що має сенс. Я не розумію, як обчислити ймовірність покриття для базового CI завантаження. Я розумію, що ймовірність покриття буде представляти кількість разів, коли CI містить справжнє значення (у цьому випадку mu). Чи просто я запускаю bootфункцію багато разів?

Як я можу по-різному підійти до цього питання?


Ваш size=100друкарський помилок? Я не вірю, що ви отримуєте правильну верхню та нижню межі, оскільки неявний розмір вибірки становить 1000, коли ви обчислюєте свої CI в циклі (оскільки ви використовуєте sqrt.nдля обчислення). Крім того, чому ви порівнюєте з, muа не 0 безпосередньо (останній є справжньою середньою)?
кардинал

Також smpl = x[sample(1:n, size = 100, replace = TRUE)]; можна спростити smpl = sample(x, size=100, replace=TRUE).
кардинал

@cardinal - Так, це був помилковий помилок і те саме, що muдорівнює 0. Нормальний CI працює нормально, це основний CI завантажувача, з яким у мене виникають труднощі.
TheCloudlessSky

Відповіді:


16

Термінологія, ймовірно, не використовується послідовно, тому далі лише те, як я розумію початкове питання. Наскільки я розумію, звичайні КС, які ви обчислили, - це не те, що просили. Кожен набір реплік завантаження дає один довірчий інтервал, не багато. Спосіб обчислення різних типів CI з результатів набору реплик завантаження полягає в наступному:

B    <- 999                  # number of replicates
muH0 <- 100                  # for generating data: true mean
sdH0 <- 40                   # for generating data: true sd
N    <- 200                  # sample size
DV   <- rnorm(N, muH0, sdH0) # simulated data: original sample

Оскільки я хочу порівнювати обчислення з результатами пакету boot, я спочатку визначаю функцію, яка буде викликана для кожної копії. Його аргументами є оригінальний зразок та індексний вектор, що вказує випадки на одну репліку. Він повертає , оцінку плагіну для , а також , оцінку плагіна для дисперсії середнього значення . Останнє знадобиться лише для завантажувальної програми -CI. μ S 2 M σ 2 M tМмкSM2σM2т

> getM <- function(orgDV, idx) {
+     bsM   <- mean(orgDV[idx])                       # M*
+     bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N    # S^2*(M)
+     c(bsM, bsS2M)
+ }

> library(boot)                                       # for boot(), boot.ci()
> bOut <- boot(DV, statistic=getM, R=B)
> boot.ci(bOut, conf=0.95, type=c("basic", "perc", "norm", "stud"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL : 
boot.ci(boot.out = bOut, conf = 0.95, type = c("basic", "perc", "norm", "stud"))

Intervals : 
Level      Normal            Basic         Studentized        Percentile    
95%   ( 95.6, 106.0 )   ( 95.7, 106.2 )  ( 95.4, 106.2 )   ( 95.4, 106.0 )  
Calculations and Intervals on Original Scale

Без використання пакету bootви можете просто скористатися, replicate()щоб отримати набір реплік для завантаження.

boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))

Але давайте дотримуватимемося результатів, boot.ci()щоб мати посилання.

boots   <- bOut$t                     # estimates from all replicates
M       <- mean(DV)                   # M from original sample
S2M     <- (((N-1)/N) * var(DV)) / N  # S^2(M) from original sample
Mstar   <- boots[ , 1]                # M* for each replicate
S2Mstar <- boots[ , 2]                # S^2*(M) for each replicate
biasM   <- mean(Mstar) - M            # bias of estimator M

Основні, перцентильні та -CI покладаються на емпіричний розподіл оцінок завантаження. Для отримання та , ми знаходимо відповідні індекси до відсортованого вектора оцінок завантажувального коду (зауважте, що буде зроблено складнішу інтерполяцію для пошуку емпіричних квантилів, коли індекси не є натуральними числами) .α / 2 1 - α / 2тα/21-α/2boot.ci()

(idx <- trunc((B + 1) * c(0.05/2, 1 - 0.05/2)) # indices for sorted vector of estimates
[1] 25 975

> (ciBasic <- 2*M - sort(Mstar)[idx])          # basic CI
[1] 106.21826  95.65911

> (ciPerc <- sort(Mstar)[idx])                 # percentile CI
[1] 95.42188 105.98103

Для -CI нам потрібні оцінки завантаження для обчислення критичних значень. Для стандартної нормальної CI критичним значенням буде просто -значення від стандартного нормального розподілу.t t zтттz

# standard normal CI with bias correction
> zCrit   <- qnorm(c(0.025, 0.975))   # z-quantiles from std-normal distribution
> (ciNorm <- M - biasM + zCrit * sqrt(var(Mstar)))
[1] 95.5566 106.0043

> tStar <- (Mstar-M) / sqrt(S2Mstar)  # t*
> tCrit <- sort(tStar)[idx]           # t-quantiles from empirical t* distribution
> (ciT  <- M - tCrit * sqrt(S2M))     # studentized t-CI
[1] 106.20690  95.44878

Для того, щоб оцінити ймовірність покриття цих типів CI, вам доведеться запускати це моделювання багато разів. Просто загорніть код у функцію, поверніть список із результатами CI і запустіть його, replicate()як показано в цьому суті .


Оце Так! - Дивовижне пояснення того, що я робив не так. Також - дякую за кодові поради! Це прекрасно працює!
TheCloudlessSky

Добре одне останнє запитання: коли я намагаюся повторити цю інформацію, я створив функцію computeCIsі подзвонив results = replicate(500, computeCIs());. В кінці computeCIsвона повертається c(ciBasic, ciPerc). Щоб перевірити ймовірність покриття, чи не слід я тестувати тест на те, mean(results[1, ] < 0 & results[2, ] > 0)щоб усі базові CI містили справжню середню (ймовірність покриття)? Коли я запускаю це, я отримую, 1коли думаю, що повинен отримати 0.95.
TheCloudlessSky

@TheCloudlessSky Для повної функції та повного моделювання з очікуваними результатами щодо частоти покриття див. Pastebin.com/qKpNKK0D
каракал

Так, я ідіот:) ... Я зробив друкарську помилку під час копіювання коду в R ... дякую за всю вашу допомогу! :)
TheCloudlessSky

Дякую @caracal за гарну відповідь. Посилання pastebin.com/qKpNKK0Dрозірвано. Будемо вдячні, якщо ви оновите його та забезпечите повну функцію та повне моделювання. Спасибі
MYaseen208
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.