Tenho a seguinte pergunta para um curso em que estou trabalhando:
Conduza um estudo de Monte Carlo para estimar as probabilidades de cobertura do intervalo de confiança normal de auto-inicialização e do intervalo básico de confiança. Amostra de uma população normal e verifique as taxas de cobertura empírica para a média da amostra.
As probabilidades de cobertura para o IC de inicialização normal padrão são fáceis:
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
Pelo que aprendi neste curso, o intervalo de confiança básico de autoinicialização pode ser calculado assim:
# 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);
Isso faz sentido. O que não entendo é como calcular probabilidades de cobertura para o IC básico de autoinicialização. Entendo que a probabilidade de cobertura representaria o número de vezes que o IC contém o valor verdadeiro (neste caso mu
). Simplesmente executo a boot
função várias vezes?
Como posso abordar essa questão de maneira diferente?
fonte
size=100
um erro de digitação? Não acredito que você esteja obtendo os limites superior e inferior certos, pois o tamanho implícito da amostra parece ser 1000 quando você calcula seus ICs no loop (desde que você usesqrt.n
o cálculo). Além disso, por que você está comparandomu
e não 0 diretamente (este último é a verdadeira média)?smpl = x[sample(1:n, size = 100, replace = TRUE)];
pode ser simplificado parasmpl = sample(x, size=100, replace=TRUE)
.mu
0. O IC normal funciona bem, é o IC básico do bootstrap com o qual estou tendo dificuldades.Respostas:
A terminologia provavelmente não é usada de forma consistente, portanto, a seguir, é apenas como eu entendo a pergunta original. Pelo meu entendimento, os ICs normais que você calculou não foram solicitados. Cada conjunto de réplicas de autoinicialização fornece um intervalo de confiança, não muitos. A maneira de calcular diferentes tipos de IC a partir dos resultados de um conjunto de réplicas de autoinicialização é a seguinte:
Como desejo comparar os cálculos com os resultados do pacoteM⋆ μ S2 ⋆M σ2M t
boot
, primeiro defino uma função que será chamada para cada replicação. Seus argumentos são a amostra original e um vetor de índice que especifica os casos para uma única replicação. Ele retorna , a estimativa de plug-in para , bem como , a estimativa de plug-in para a variação da média . Este último será necessário apenas para o bootstrap -CI. u S 2 ⋆ M σ 2 H tSem usar o pacote,
boot
você pode simplesmente usarreplicate()
para obter um conjunto de réplicas de autoinicialização.Mas vamos nos ater aos resultados de
boot.ci()
ter uma referência.boot.ci()
Para estimar as probabilidades de cobertura desses tipos de IC, você precisará executar essa simulação várias vezes. Apenas envolva o código em uma função, retorne uma lista com os resultados do IC e execute-a
replicate()
como demonstrado nesta essência .fonte
computeCIs
e ligueiresults = replicate(500, computeCIs());
. No final,computeCIs
ele retornac(ciBasic, ciPerc)
. Para testar as probabilidades de cobertura, não devo testarmean(results[1, ] < 0 & results[2, ] > 0)
todos os ICs básicos que contêm a média verdadeira (a probabilidade de cobertura)? Quando executo isso, recebo1
quando penso que deveria0.95
.pastebin.com/qKpNKK0D
está quebrado. Gostaria de atualizá-lo e fornecer a função completa e simulação completa. Graças