L'approssimazione a sella di una funzione di densità di probabilità (funziona allo stesso modo per le funzioni di massa, ma parlerò qui solo in termini di densità) è un'approssimazione sorprendentemente ben funzionante, che può essere vista come un perfezionamento del teorema del limite centrale. Pertanto, funzionerà solo in contesti in cui esiste un teorema limite centrale, ma necessita di presupposti più forti.
Partiamo dal presupposto che la funzione generatrice del momento esiste ed è due volte differenziabile. Ciò implica in particolare che tutti i momenti esistono. Sia una variabile casuale con funzione di generazione del momento (mgf)
e cgf (funzione di generazione cumulativa) (dove \ log indica il logaritmo naturale). Nello sviluppo seguirò da vicino Ronald W Butler: "Saddlepoint Approximations with Applications" (CUP). Svilupperemo l'approssimazione del punto di sella usando l'approssimazione di Laplace a un certo integrale. Scrivi
XM(t)=EetX
K(t)=logM(t)logeK(t)=∫∞−∞etxf(x)dx=∫∞−∞exp(tx+logf(x))dx=∫∞−∞exp(−h(t,x))dx
dove
h(t,x)=−tx−logf(x) . Ora Taylor espanderàh(t,x) inx considerandot come costante. Questo dà
h ( t , x ) = h ( t , x0) + h'( t , x0) ( x - x0) + 12h''( t , x0) ( x - x0)2+ ⋯
dove' indica la differenziazione rispetto aX . Notare che
h'( t , x ) = - t - ∂∂Xlogf( x )h''( t , x ) = - ∂2∂X2logf( x ) > 0
(l'ultima disuguaglianza per ipotesi in quanto è necessaria affinché l'approssimazione funzioni). LasciaXtsii la soluzione per h'( t , xt) = 0 . Supponiamo che questo dia un minimo per h ( t , x ) in funzione di X . Usando questa espansione nell'integrale e dimenticando la parte ⋯ , si ottiene
eK( t )≈ ∫∞- ∞exp( - h ( t , xt) - 12h''( t , xt) ( x - xt)2)dX= e−h(t,xt)∫∞−∞e−12h′′(t,xt)(x−xt)2dx
che è un integrale gaussiano, che dà
eK(t)≈e−h(t,xt)2πh′′(t,xt)−−−−−−−√.
Questo fornisce (una prima versione) dell'approssimazione del punto di sella come
f( xt) ≈ h''( t , xt)2 π-------√exp( K( t ) - t xt)(*)
Si noti che l'approssimazione ha la forma di una famiglia esponenziale.
Ora dobbiamo fare un po 'di lavoro per ottenere questo in una forma più utile.
Da otteniamo
La differenziazione rispetto a dà
(secondo i nostri presupposti), quindi la relazione tra e è monotona, quindi è ben definita. Abbiamo bisogno di un'approssimazione a . A tal fine, otteniamo risolvendo dah'( t , xt) = 0t = - ∂∂Xtlogf( xt) .
Xt∂t∂Xt= - ∂2∂X2tlogf( xt) > 0
txtxt∂∂xtlogf(xt)(*)
logf(xt)=K(t)−txt−12log2π−∂2∂x2tlogf(xt).(**)
Supponendo che l'ultimo termine sopra dipenda solo debolmente da , quindi la sua derivata rispetto a è approssimativamente zero (torneremo a commentare questo), otteniamo
Fino a questa approssimazione abbiamo quindi quel
modo che e debbano essere correlati attraverso l'equazione
che si chiama equazione a sella. xtxt∂logf(xt)∂xt≈(K′(t)−xt)∂t∂xt−t
0≈t+∂logf(xt)∂xt=(K′(t)−xt)∂t∂xt
txtK′(t)−xt=0,(§)
Ciò che ci manca ora nel determinare è
e che possiamo trovare per differenziazione implicita dell'equazione del punto di sella :
Il risultato è che (fino alla nostra approssimazione)
Mettendo tutto insieme, abbiamo l'approssimazione finale a sella della densità come
(*)h′′(t,xt)=−∂2logf(xt)∂x2t=−∂∂xt(∂logf(xt)∂xt)=−∂∂xt(−t)=(∂xt∂t)−1
K′(t)=xt∂xt∂t=K′′( t ) .
h''( t , xt) = 1K''( t )
f( x )f( xt) ≈ eK( t ) - t xt12 πK''( t )--------√.
Ora, per usarlo praticamente, per approssimare la densità in un punto specifico , risolviamo l'equazione del punto di sella affinché quella trovi .XtXtt
L'approssimazione del punto di sella viene spesso indicata come approssimazione della densità della media in base a osservazioni . La funzione di generazione cumulativa della media è semplicemente , quindi l'approssimazione del punto di sella per la media diventa
nX1,X2,…,XnnK(t)f(x¯t)=enK(t)−ntx¯tn2πK′′(t)−−−−−−−−√
Vediamo un primo esempio. Cosa otteniamo se proviamo ad approssimare la densità normale standard
Il mgf è quindi
quindi l'equazione del punto di sella è e l'approssimazione del punto di sella fornisce
quindi in questo caso l'approssimazione è esatta.f(x)=12π−−√e−12x2
M(t)=exp(12t2)K(t)=12t2K′(t)=tK′′(t)=1
t=xtf(xt)≈e12t2−txt12π⋅1−−−−−√=12π−−√e−12x2t
Esaminiamo un'applicazione molto diversa: Bootstrap nel dominio di trasformazione, possiamo eseguire il bootstrap analiticamente usando l'approssimazione a sella alla distribuzione bootstrap della media!
Supponiamo di avere iid distribuiti da una certa densità (nell'esempio simulato useremo una distribuzione esponenziale dell'unità). Dal campione calcoliamo la funzione generatrice del momento empirico
e quindi il cgf . Abbiamo bisogno del mgf empirico per la media che è e del cgf empirico per la media
che usiamo per costruire un'approssimazione a sella. Di seguito alcuni codici R (R versione 3.2.3): X1,X2,…,XnfM^(t)=1n∑i=1netxi
K^( t ) = logM^( t )log( M^( t/ n )n)K^X¯( t ) = n registroM^( t / n )
set.seed(1234)
x <- rexp(10)
require(Deriv) ### From CRAN
drule[["sexpmean"]] <- alist(t=sexpmean1(t)) # adding diff rules to
# Deriv
drule[["sexpmean1"]] <- alist(t=sexpmean2(t))
###
make_ecgf_mean <- function(x) {
n <- length(x)
sexpmean <- function(t) mean(exp(t*x))
sexpmean1 <- function(t) mean(x*exp(t*x))
sexpmean2 <- function(t) mean(x*x*exp(t*x))
emgf <- function(t) sexpmean(t)
ecgf <- function(t) n * log( emgf(t/n) )
ecgf1 <- Deriv(ecgf)
ecgf2 <- Deriv(ecgf1)
return( list(ecgf=Vectorize(ecgf),
ecgf1=Vectorize(ecgf1),
ecgf2 =Vectorize(ecgf2) ) )
}
### Now we need a function solving the saddlepoint equation and constructing
### the approximation:
###
make_spa <- function(cumgenfun_list) {
K <- cumgenfun_list[[1]]
K1 <- cumgenfun_list[[2]]
K2 <- cumgenfun_list[[3]]
# local function for solving the speq:
solve_speq <- function(x) {
# Returns saddle point!
uniroot(function(s) K1(s)-x,lower=-100,
upper = 100,
extendInt = "yes")$root
}
# Function finding fhat for one specific x:
fhat0 <- function(x) {
# Solve saddlepoint equation:
s <- solve_speq(x)
# Calculating saddlepoint density value:
(1/sqrt(2*pi*K2(s)))*exp(K(s)-s*x)
}
# Returning a vectorized version:
return(Vectorize(fhat0))
} #end make_fhat
(Ho provato a scrivere questo come codice generale che può essere modificato facilmente per altri cgfs, ma il codice non è ancora molto robusto ...)
Quindi usiamo questo per un campione di dieci osservazioni indipendenti da una distribuzione esponenziale unitaria. Facciamo il solito bootstrap non parametrico "a mano", tracciamo l'istogramma del bootstrap risultante per la media e sovrapponiamo l'approssimazione del punto di sella:
> ECGF <- make_ecgf_mean(x)
> fhat <- make_spa(ECGF)
> fhat
function (x)
{
args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
names <- if (is.null(names(args)))
character(length(args))
else names(args)
dovec <- names %in% vectorize.args
do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
}
<environment: 0x4e5a598>
> boots <- replicate(10000, mean(sample(x, length(x), replace=TRUE)), simplify=TRUE)
> boots <- replicate(10000, mean(sample(x, length(x), replace=TRUE)), simplify=TRUE)
> hist(boots, prob=TRUE)
> plot(fhat, from=0.001, to=2, col="red", add=TRUE)
Dare la trama risultante:
L'approssimazione sembra essere piuttosto buona!
Potremmo ottenere un'approssimazione ancora migliore integrando l'approssimazione a sella e il ridimensionamento:
> integrate(fhat, lower=0.1, upper=2)
1.026476 with absolute error < 9.7e-07
Ora la funzione di distribuzione cumulativa basata su questa approssimazione potrebbe essere trovata mediante l'integrazione numerica, ma è anche possibile effettuare un'approssimazione diretta a sella per questo. Ma questo è per un altro post, questo è abbastanza lungo.
Infine, alcuni commenti lasciati fuori dallo sviluppo sopra. In abbiamo fatto un'approssimazione essenzialmente ignorando il terzo termine. Perché possiamo farlo? Un'osservazione è che per la normale funzione di densità, il termine lasciato fuori non contribuisce a nulla, quindi l'approssimazione è esatta. Quindi, poiché l'approssimazione del punto di sella è un perfezionamento del teorema del limite centrale, quindi siamo in qualche modo vicini al normale, quindi dovrebbe funzionare bene. Uno può anche guardare esempi specifici. Guardando l'approssimazione a sella alla distribuzione di Poisson, guardando quel terzo termine lasciato fuori, in questo caso diventa una funzione trigamma, che in effetti è piuttosto piatta quando l'argomento non è vicino allo zero.(**)
Infine, perché il nome? Il nome deriva da una derivazione alternativa, usando tecniche di analisi complesse. Più tardi possiamo esaminarlo, ma in un altro post!