Uso dell'errore standard della distribuzione bootstrap


19

(ignora il codice R se necessario, poiché la mia domanda principale è indipendente dalla lingua)

Se voglio esaminare la variabilità di una statistica semplice (es: media), so di poterlo fare tramite una teoria come:

x = rnorm(50)

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

o con il bootstrap come:

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)

Tuttavia, ciò che mi chiedo è, può essere utile / valido (?) Guardare l' errore standard di una distribuzione bootstrap in determinate situazioni? La situazione con cui ho a che fare è una funzione non lineare relativamente rumorosa, come ad esempio:

# 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)

Qui il modello non converge nemmeno utilizzando il set di dati originale,

> (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

quindi le statistiche che mi interessano sono invece stime più stabilizzate di questi parametri nls - forse i loro mezzi attraverso una serie di repliche bootstrap.

# 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)

Qui questi sono, in effetti, nel parco giochi di ciò che ho usato per simulare i dati originali:

> pars
[1]  5.606190  1.859591 -1.390816

Una versione stampata assomiglia a:

# 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)

inserisci qui la descrizione dell'immagine

Ora, se voglio la variabilità di queste stime di parametri stabilizzati , penso di poter, ipotizzando la normalità di questa distribuzione bootstrap, solo calcolare i loro errori standard:

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

È un approccio sensato? Esiste un approccio generale migliore all'inferenza sui parametri di modelli non lineari instabili come questo? (Suppongo che potrei invece fare un secondo livello di ricampionamento qui, invece di fare affidamento sulla teoria per l'ultimo bit, ma ciò potrebbe richiedere molto tempo a seconda del modello. Tuttavia, non sono sicuro che questi errori standard sarebbero essere utile a tutto, dato che si avvicinerebbero a 0 se solo aumentassi il numero di repliche bootstrap.)

Molte grazie e, a proposito, sono un ingegnere, quindi ti prego di perdonarmi di essere un novizio relativo qui intorno.

Risposte:


13

Ci sono diversi problemi in questa domanda. In primo luogo, vi è la questione se le medie bootstrap saranno stimatori sensibili anche quando alcuni dei singoli stimatori bootstrap non sono calcolabili (mancanza di convergenza, inesistenza di soluzioni). In secondo luogo, dato che gli stimatori avviati sono sensibili, c'è una domanda su come ottenere intervalli di confidenza o forse solo errori standard per queste stime.

--

Lo scopo della domanda è, tuttavia, produrre stime anche nei casi in cui l'algoritmo per il calcolo delle stime può fallire occasionalmente o quando lo stimatore è occasionalmente non definito. Come approccio generale c'è un problema:

  • La media delle stime avviate dal boot mentre gettando alla cieca i campioni sottoposti al bootstrap per i quali le stime non sono calcolabili in generale darà risultati distorti.

La gravità del problema generale dipende da diverse cose. Ad esempio, la frequenza con cui la stima non è calcolabile e se la distribuzione condizionale del campione dato che la stima non è calcolabile differisce dalla distribuzione condizionale del campione dato che la stima è calcolabile. Non consiglierei di usare il metodo.

Xθ^θ^(X)~ θ ( X ) = E ( θ ( Y ) | X , A ( X ) ) A ( X ) X θ ( Y ) NA - X A ( X ) ~ θ ( X )Y

θ~(X)=E(θ^(Y)|X,UN(X))
UN(X)Xθ^(Y)N / A. Ossia, calcoliamo l'aspettativa condizionale dello stimatore su un campione bootstrap condizionando il campione originale e l'evento , che lo stimatore è calcolabile per il campione bootstrap. Il calcolo effettivo del bootstrap è un'approssimazione basata sul campionamento di .-XUN(X)θ~(X)

Il suggerimento nella domanda è di calcolare la deviazione standard empirica degli stimatori bootstrap, che è una stima della deviazione standard di condizionale su e . La deviazione standard desiderata, l'errore standard, è la deviazione standard di . Non puoi ottenere il secondo dal primo. Non vedo altro modo ovvio e generale se non quello di utilizzare un secondo livello di bootstrap per ottenere una stima affidabile dell'errore standard.XA(X) ~ θ (X)θ^(Y)XUN(X)θ~(X)

UN(X)θ~(X)

Modifica :

Il bellissimo documento Stima e accuratezza dopo la selezione del modello di Efron fornisce un metodo generale per stimare l'errore standard di uno stimatore in sacchi senza utilizzare un secondo livello di bootstrap. Il documento non tratta esplicitamente di stimatori che a volte non sono calcolabili.


Grazie per la risposta eccezionale. Il punto sulla distorsione è particolarmente ben preso. Puoi immaginare un caso estremo in cui la nuvola di punti è totalmente uniforme, salvo un singolo set di punti distanti che si adattano molto bene al modello. La stragrande maggioranza degli nlsattacchi potrebbe fallire, ma, di quelli che convergono, il pregiudizio sarà enorme e gli errori / IC standard previsti sono spuratamente piccoli. nlsBootutilizza un requisito ad hoc di accoppiamenti riusciti al 50%, ma sono d'accordo con te sul fatto che la (dis) somiglianza delle distribuzioni condizionate sia ugualmente preoccupante.
John Colby,

(Proverò a darti un bonus domani se questo sito me lo permette SO)
John Colby
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.