Uso de erro padrão da distribuição de bootstrap

19

(ignore o código R, se necessário, pois minha pergunta principal é independente do idioma)

Se eu quiser olhar para a variabilidade de uma estatística simples (ex: média), sei que posso fazê-lo via teoria como:

x = rnorm(50)

# Estimate standard error from theory
summary(lm(x~1))
# same as...
sd(x) / sqrt(length(x))

ou com o bootstrap como:

library(boot)

# Estimate standard error from bootstrap
(x.bs = boot(x, function(x, inds) mean(x[inds]), 1000))
# which is simply the standard *deviation* of the bootstrap distribution...
sd(x.bs$t)

No entanto, o que eu quero saber é: pode ser útil / válido (?) Procurar o erro padrão de uma distribuição de inicialização em determinadas situações? A situação com a qual estou lidando é uma função não linear relativamente barulhenta, como:

# Simulate dataset
set.seed(12345)
n   = 100
x   = runif(n, 0, 20)
y   = SSasymp(x, 5, 1, -1) + rnorm(n, sd=2)
dat = data.frame(x, y)

Aqui, o modelo nem converge usando o conjunto de dados original,

> (fit = nls(y ~ SSasymp(x, Asym, R0, lrc), dat))
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

portanto, as estatísticas nas quais estou interessado são estimativas mais estabilizadas desses parâmetros nls - talvez seus meios em várias replicações de autoinicialização.

# Obtain mean bootstrap nls parameter estimates
fit.bs = boot(dat, function(dat, inds)
              tryCatch(coef(nls(y ~ SSasymp(x, Asym, R0, lrc), dat[inds, ])),
                       error=function(e) c(NA, NA, NA)), 100)
pars = colMeans(fit.bs$t, na.rm=T)

Aqui estão, de fato, no parque de bolas do que eu costumava simular os dados originais:

> pars
[1]  5.606190  1.859591 -1.390816

Uma versão plotada se parece com:

# Plot
with(dat, plot(x, y))

newx = seq(min(x), max(x), len=100)
lines(newx, SSasymp(newx, pars[1], pars[2], pars[3]))

lines(newx, SSasymp(newx, 5, 1, -1), col='red')
legend('bottomright', c('Actual', 'Predicted'), bty='n', lty=1, col=2:1)

insira a descrição da imagem aqui

Agora, se eu quiser a variabilidade dessas estimativas de parâmetros estabilizados , acho que posso, assumindo a normalidade dessa distribuição de bootstrap, apenas calcular seus erros padrão:

> apply(fit.bs$t, 2, function(x) sd(x, na.rm=T) / sqrt(length(na.omit(x))))
[1] 0.08369921 0.17230957 0.08386824

Essa é uma abordagem sensata? Existe uma abordagem geral melhor para inferência sobre os parâmetros de modelos não-lineares instáveis ​​como este? (Suponho que eu poderia fazer uma segunda camada de reamostragem aqui, em vez de confiar na teoria do último bit, mas isso pode levar muito tempo dependendo do modelo. Mesmo assim, não tenho certeza se esses erros padrão ser útil para qualquer coisa, pois eles se aproximariam de 0 se eu apenas aumentasse o número de replicações de inicialização.)

Muito obrigado e, a propósito, sou engenheiro, por favor, perdoe-me sendo um novato por aqui.

John Colby
fonte

Respostas:

13

Existem vários problemas nesta questão. Primeiro, há a questão de saber se as médias de inicialização serão estimadores sensíveis, mesmo quando alguns dos estimadores de inicialização individuais não são computáveis ​​(falta de convergência, inexistência de soluções). Segundo, dado que os estimadores de inicialização são sensíveis, há uma questão de como obter intervalos de confiança ou talvez apenas erros padrão para essas estimativas.

A idéia de calcular a média das estimativas de inicialização está intimamente relacionada a, se não a mesma, agregação ou ensacamento de inicialização, usada no aprendizado de máquina para melhorar o desempenho de previsão de preditores fracos. Veja ESL , Seção 8.7. Em certos casos também para estimar parâmetros a média das estimativas de autoinicialização pode reduzir a variação do estimador resultante em comparação com apenas o uso do estimador no conjunto de dados original.--

O objetivo da pergunta é, no entanto, produzir estimativas mesmo nos casos em que o algoritmo para calcular as estimativas pode falhar ocasionalmente ou quando o estimador é ocasionalmente indefinido. Como abordagem geral, há um problema:

  • A média calculada das estimativas de inicialização, enquanto joga fora cegamente as amostras de inicialização para as quais as estimativas não são computáveis, em geral, fornecerá resultados tendenciosos.

A gravidade do problema geral depende de várias coisas. Por exemplo, com que frequência a estimativa não é computável e se a distribuição condicional da amostra, considerando que a estimativa não é computável, difere da distribuição condicional da amostra, considerando que a estimativa é computável. Eu não recomendaria usar o método

Para a segunda parte da pergunta, precisamos de uma pequena anotação. Se denota nosso conjunto de dados original, nosso estimador (assuma por simplicidade que seja real e permitido que o valor NA) seja tal que seja a estimativa para os dados originais definido e denota uma única amostra de inicialização, a média da inicialização é efetivamente computando o estimador que indica o evento, dependendo de , sobre o qual . Ou seja, calculamos a expectativa condicional do estimador em uma amostra de inicializaçãoXθ^θ^(X)Y

θ~(X)=E(θ^(Y)X,UMA(X))
UMA(X)Xθ^(Y)N / D-condicionar a amostra original e o evento que o estimador é computável para a amostra inicializada. O cálculo atual do bootstrap é uma aproximação baseada em amostragem de .XUMA(X)θ~(X)

A sugestão na pergunta é calcular o desvio padrão empírico dos estimadores de inicialização, que é uma estimativa do desvio padrão de condicionalmente em e . O desvio padrão desejado, o erro padrão, é o desvio padrão de . Você não pode obter o último do primeiro. Não vejo outra maneira óbvia e geral a não ser usar uma segunda camada de inicialização para obter uma estimativa confiável do erro padrão.θ^(Y)XUMA(X)θ~(X)

A discussão sobre a estimativa do erro padrão é independente de como o condicionamento em afeta o viés do estimador . Se o efeito for grave, mesmo com estimativas corretas do erro padrão, um intervalo de confiança será enganoso. UMA(X)θ~(X)

Editar :

O excelente artigo Estimação e precisão após a seleção de modelos da Efron fornece um método geral para estimar o erro padrão de um estimador ensacado sem usar uma segunda camada de inicialização. O artigo não lida explicitamente com estimadores que ocasionalmente não são computáveis.

NRH
fonte
Obrigado pela resposta fantástica. A questão do viés é especialmente bem aceita. Você pode imaginar um caso extremo em que a nuvem de pontos é totalmente uniforme, exceto por um único conjunto de pontos distantes que se encaixam perfeitamente no modelo. A grande maioria dos nlsajustes pode falhar, mas, dentre os que convergirem, o viés será enorme e os erros / ICs padrão previstos espuriosamente pequenos. nlsBootusa um requisito ad hoc de 50% de ajustes bem-sucedidos, mas concordo com você que a (des) semelhança das distribuições condicionais é igualmente uma preocupação.
John Colby
(Vou tentar dar-lhe um futuro de bônus se este site me permite, como SO)
John Colby