Por que meu intervalo de inicialização tem uma cobertura terrível?

29

Eu queria fazer uma demonstração de classe em que comparasse um intervalo t com um intervalo de autoinicialização e calculasse a probabilidade de cobertura de ambos. Como eu queria que os dados viessem de uma distribuição assimétrica, decidi gerá-los como exp(rnorm(10, 0, 2)) + 1uma amostra do tamanho 10 de um lognormal alterado. Escrevi um script para desenhar 1000 amostras e, para cada amostra, calcular um intervalo t de 95% e um intervalo percentual de 95% de bootstrap com base em 1000 réplicas.

Quando executo o script, ambos os métodos fornecem intervalos muito semelhantes e ambos têm probabilidade de cobertura de 50 a 60%. Fiquei surpreso porque pensei que o intervalo de inicialização seria melhor.

Minha pergunta é, eu tenho

  • cometeu um erro no código?
  • cometeu um erro no cálculo dos intervalos?
  • cometeu um erro ao esperar que o intervalo de inicialização tivesse melhores propriedades de cobertura?

Além disso, existe uma maneira de construir um IC mais confiável nessa situação?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability
Solha
fonte
3
As pessoas costumam esquecer outro uso do bootstrap: para identificar e corrigir o viés . Suspeito que, se você incluir uma correção de viés no seu bootstrap, poderá obter um desempenho muito melhor do IC.
whuber
@ whuber: bom ponto, +1. Tanto quanto me lembro, os métodos de bootstrap e seus aplicativos da Davison & Hinkley oferecem uma introdução agradável e acessível à correção de viés e outras melhorias no bootstrap.
S. Kolassa - Restabelece Monica
1
Vale a pena tentar as outras variantes de autoinicialização, especialmente a autoinicialização básica.
Frank Harrell
3
Bootstrapping é um procedimento de amostra grande. não é grande, especialmente para dados log-normais . n=10
Cliff AB

Respostas:

16

Os diagnósticos e soluções de bootstrap de Canto, Davison, Hinkley & Ventura (2006) parecem ser um ponto de partida lógico. Eles discutem várias maneiras pelas quais o bootstrap pode ser quebrado e - mais importante aqui - oferecem diagnósticos e possíveis soluções:

  1. Outliers
  2. Modelo de reamostragem incorreto
  3. Não totalidade
  4. Inconsistência do método de autoinicialização

Não vejo problema com 1, 2 e 4 nessa situação. Vejamos 3. Como observa @Ben Ogorek (embora eu concorde com @Glen_b que a discussão sobre normalidade pode ser um arenque vermelho), a validade do bootstrap depende da dinâmica da estatística em que estamos interessados.

Seção 4 em Canty et al. sugere reamostragem dentro de reamostragens para obter uma medida de viés e variação para a estimativa de parâmetro em cada reamostragem de autoinicialização . Aqui está o código para replicar as fórmulas da p. 15 do artigo:

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

diagnóstico de autoinicialização

Observe as escalas de log - sem logs, isso é ainda mais flagrante. Vemos bem como a variação da estimativa média da auto-inicialização aumenta com a média da amostra da auto-inicialização. Para mim, isso parece uma arma de fumo suficiente para atribuir a culpa à não-centralidade como culpado pela baixa cobertura do intervalo de confiança.

No entanto, felizmente, admito que é possível acompanhar de várias maneiras. Por exemplo, podemos analisar como se o intervalo de confiança de uma replicação de bootstrap específica inclui a média verdadeira depende da média da replicação específica.

Quanto aos remédios, Canty et al. discutir transformações e os logaritmos vêm à mente aqui (por exemplo, autoinicialização e construção de intervalos de confiança, não pela média, mas pela média dos dados registrados), mas eu realmente não consegui fazê-la funcionar.

Canty et al. continue discutindo como é possível reduzir o número de bootstraps internos e o ruído restante por amostragem e suavização de importância, além de adicionar faixas de confiança às plotagens de pivô.

Este pode ser um projeto de tese divertido para um aluno inteligente. Eu apreciaria qualquer indicação de onde errei, bem como de qualquer outra literatura. E tomarei a liberdade de adicionar a diagnostictag a esta pergunta.

S. Kolassa - Restabelecer Monica
fonte
13

μ^-μ
μ^t
mμ^-μσ^

Então pensei um pouco mais sobre toda a configuração. Com apenas 10 observações e uma distribuição extremamente distorcida, não é basicamente impossível estimar não parametricamente a média e muito menos construir intervalos de confiança com a cobertura correta?

e2+1=8.39P(X2)=0,84XN(0 0,4)0,840,8410=0,178. Assim, em pouco menos de 18% dos casos, a maior observação é menor que a média. Para obter uma cobertura maior que 0,82, precisamos construir um intervalo de confiança para a média que se estende além da maior observação. É difícil imaginar como essa construção pode ser feita (e justificada) sem suposições anteriores de que a distribuição seja extremamente distorcida. Mas congratulo-me com todas as sugestões.

NRH
fonte
Eu concordo com você. Eu realmente queria pensar sobre isso do ponto de vista de alguém que tenha uma amostra dessa distribuição. Como eu saberia que não é seguro usar alegremente o bootstrap nesse caso? A única coisa em que consigo pensar é que eu poderia ter feito registros antes de fazer a análise, mas um dos outros respondentes diz que isso realmente não ajuda.
quer
1
Você não saberá se é seguro ou não somente a partir dos 10 pontos de dados. Se você suspeitar de distorção ou caudas pesadas, a solução pode ser o foco em um parâmetro diferente da média. Por exemplo, o log-mean ou a mediana. Isso não fornecerá uma estimativa (ou intervalo de confiança para) da média, a menos que você faça suposições adicionais, mas pode ser uma idéia melhor concentrar-se em um parâmetro menos sensível aos detalhes da distribuição.
NRH 07/04
6

Os cálculos estavam corretos, verifiquei com a bem conhecida inicialização do pacote . Além disso, adicionei o intervalo BCa (da Efron), uma versão corrigida do viés do intervalo de autoinicialização do percentil:

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

Presumo que os intervalos seriam muito melhores se o tamanho da amostra original for maior que 10, digamos 20 ou 50.

Além disso, o método bootstrap-t geralmente leva a melhores resultados para estatísticas distorcidas. No entanto, ele precisa de um loop aninhado e, portanto, mais de 20 vezes mais tempo computacional.

Para o teste de hipóteses, também é muito importante que as coberturas unilaterais sejam boas. Portanto, olhar apenas para as coberturas frente e verso muitas vezes pode ser enganador.

lambruscoAcido
fonte
1
Além do seu comentário sobre o tamanho da amostra: Bom, em Resampling Methods (3a ed., 2006, p. 19), observa que o bootstrap pode ser instável para tamanhos de amostran<100. Infelizmente, eu não tenho o livro em mãos, então não posso procurar sua argumentação ou qualquer referência.
S. Kolassa - Restabelece Monica
5

Eu também estava confuso sobre isso e passei muito tempo nos intervalos de confiança de Bootstrap de 1996 de DiCiccio e Efron , sem muito o que mostrar.

Na verdade, isso me levou a pensar menos no bootstrap como um método de uso geral. Eu costumava pensar nisso como algo que o tiraria de um engarrafamento quando você estava realmente preso. Mas eu aprendi seu pequeno segredo sujo: os intervalos de confiança de inicialização são todos baseados na normalidade de uma maneira ou de outra. Permita-me explicar.

O bootstrap fornece uma estimativa da distribuição de amostragem do estimador, que é tudo o que você poderia esperar, certo? Mas lembre-se de que o elo clássico entre a distribuição da amostra e o intervalo de confiança se baseia em encontrar uma quantidade essencial . Para quem está enferrujado, considere o caso em que

xN(μ,σ2)
e σé conhecido. Então a quantidade
z=x-μσN(0 0,1)
é crucial, ou seja, sua distribuição não depende de μ. Assim sendo,Pr(-1,96x-μσ1,96)=0,95 E o resto é história.

Quando você pensa sobre o que justifica que os percentis da distribuição normal estejam relacionados a intervalos de confiança, ela é inteiramente baseada nessa quantidade dinâmica conveniente. Para uma distribuição arbitrária, não existe um vínculo teórico entre os percentis da distribuição de amostragem e os intervalos de confiança , e tomar proporções brutas da distribuição de amostragem de autoinicialização não é suficiente.

Portanto, os intervalos BCa (corrigidos pela polarização) do Efron usam transformações para chegar à normalidade aproximada e os métodos de bootstrap-t dependem das estatísticas t resultantes serem aproximadamente essenciais. Agora, o bootstrap pode estimar o máximo possível de momentos, e você sempre pode assumir a normalidade e usar o padrão +/- 2 * SE. Mas, considerando todo o trabalho que foi feito não paramétrico com o bootstrap, isso não parece muito justo, não é?

Ben Ogorek
fonte
2
É possível que eu tenha perdido algo, mas o fato de o bootstrapping estar associado a quantidades pivotais ou quase pivotais não implica, por si só, qualquer associação com a normalidade. Quantidades centrais podem ter todo tipo de distribuição em circunstâncias particulares. Também não vejo como se segue a frase em itálico no seu segundo último parágrafo.
Glen_b -Reinstala Monica
1
Como, então, segue a afirmação relativa à normalidade?
Glen_b -Reinstala Monica
1
Como toda distribuição contínua F tem uma transformação exata em normalidade (Φ-1[F(X)]é sempre normal normal), parece que você acabou de excluir todas as distribuições contínuas por estarem enraizadas em uma aproximação normal.
Glen_b -Reinstala Monica
2
Não é trivial identificar Fse ainda não sabemos; a questão era simplesmente que tais transformações existem claramente. Efron está tentando obter melhores intervalos; só porque ele passa por transformar-para-aproximadamente-normal / fazer-um-intervalo / transformar-voltar não significa que ele esteja assumindo alguma conexão especial com a normalidade.
Glen_b -Reinstala Monica
2
Para adicionar ao @Glen_b: a transformação em uma distribuição normal só precisa existir para provar que o método está correto. Você não precisa encontrá-lo para usar o método Além disso, se você não gostar de distribuições normais, poderá reescrever a prova inteira com alguma outra distribuição contínua e simétrica. O uso de distribuições normais é tecnicamente útil, mas não estritamente necessário, não diz nada sobre a fonte dos dados ou a média da amostra.
Peter