A aproximação do ponto de sela a uma função de densidade de probabilidade (funciona da mesma forma para funções de massa, mas falarei apenas aqui em termos de densidades) é uma aproximação surpreendentemente bem funcional, que pode ser vista como um refinamento no teorema do limite central. Portanto, ele só funcionará em ambientes onde existe um teorema do limite central, mas precisa de suposições mais fortes.
Começamos com a suposição de que a função geradora de momento existe e é duas vezes diferenciável. Isso implica, em particular, que todos os momentos existem. Seja uma variável aleatória com função de geração de momento (mgf)
e cgf (função de geração cumulativa) (onde indica o logaritmo natural). No desenvolvimento, irei acompanhar de perto Ronald W. Butler: "Aproximações do ponto de sela com aplicativos" (CUP). Vamos desenvolver a aproximação do ponto de sela usando a aproximação de Laplace a uma determinada integral. Escrever
XM(t)=EetX
K( t ) = logM( T )registroeK( T )= ∫∞- ∞et xf( X )dx = ∫∞- ∞exp( t x + logf( x ) )dx= ∫∞- ∞exp( - h ( t , x ) )dx
onde
. Agora vamos Taylor expandir em considerando como uma constante. Isso dá
onde ' denota diferenciação em relação a x . Observe que
h '(t, x) = - t- \ frac {\ parcial} {\ parcial x} \ log f (x) \\ h' '(t, x) = - \ frac {\ parcial ^ 2} {\ parcial x ^ 2} \ log f (x)> 0
(a última desigualdade por suposição, pois é necessária para a aproximação funcionar). Deixe x_th ( t , x ) = - t x - logf( X )h ( t , x )xth ( t , x ) = h ( t , x0 0) + h′( t , x0 0) ( x - x0 0) + 12h′ ′( t , x0 0) ( x - x0 0)2+ ⋯
′xh′( t , x ) = - t - ∂∂xregistrof( X )h′ ′( t , x ) = - ∂2∂x2registrof( x ) > 0
xtseja a solução para h′( t , xt) = 0 . Assumiremos que isso fornece um mínimo para h ( t , x ) em função de x . Usando essa expansão na integral e esquecendo a parte ⋯ , obtém
eK( T )≈ ∫∞- ∞exp( - h ( t , xt) - 12h′ ′( t , xt) ( x - xt)2)dx= e- h ( t , xt)∫∞- ∞e- 12h′ ′( t , xt) ( x - xt)2dx
que é uma integral gaussiana, fornecendo
eK( T )≈ e- h ( t , xt)2 πh′ ′( t , xt)-------√.
Isso fornece (uma primeira versão) da aproximação do ponto de sela como
f( xt)≈h′′(t,xt)2π−−−−−−−√exp(K(t)−txt)(*)
Observe que a aproximação tem a forma de uma família exponencial.
Agora precisamos fazer algum trabalho para obter isso de uma forma mais útil.
A partir de , obtemos
Diferenciar isso em relação a fornece
(pelas nossas suposições), de modo que a relação entre e é monótona, assim está bem definido. Precisamos de uma aproximação para . Para esse fim, resolvemos deh′(t,xt)=0t=−∂∂xtlogf(xt).
xt∂t∂xt=−∂2∂x2tlogf(xt)>0
txtxt∂∂xtlogf(xt) log f ( x t ) = K ( t ) - t x t - 1(*)
registrof( xt) = K( t ) - t xt- 12registro2 π- ∂2∂x2tregistrof( xt).(**)
xtxt∂logf(xt)
Assumindo que o último termo acima dependa apenas de , sua derivada em relação a é aproximadamente zero (voltaremos a comentar sobre isso), obtemos
Até esta aproximação, temos então
modo que e devam ser relacionados através da equação
que é chamada de equação do ponto de sela. xtxt∂registrof( xt)∂xt≈ ( K′( t ) - xt)∂t∂xt- t
0 ≈ t + ∂registrof( xt)∂xt=(K′(t)−xt)∂t∂xt
txtK′(t)−xt=0,(§)
O que sentimos falta na determinação de é
e que podemos encontrar por diferenciação implícita da equação do ponto de sela :
O resultado é que (até nossa aproximação)
Juntando tudo, temos a aproximação final do ponto de sela da densidade como
H " ( t , x t ) = - ∂ 2 log de f ( x t )(*)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)−txt12πK′′(t)−−−−−−−−√.
xtxtt
Agora, para usar isso praticamente, para aproximar a densidade em um ponto específico , resolvemos a equação do ponto de sela para que encontre .xtxtt
A aproximação saddlepoint é muitas vezes referido como uma aproximação para a densidade da média com base em observações iid . A função de geração cumulativa da média é simplesmente , portanto a aproximação do ponto de sela para a média se torna
nX1,X2,…,XnnK(t)f(x¯t)=enK(t)−ntx¯tn2πK′′(t)−−−−−−−−√
Vejamos um primeiro exemplo. O que obtemos se tentarmos aproximar a densidade normal padrão
O mgf é então
para que a equação do ponto de sela seja e a aproximação do ponto de sela dê
então, neste caso, a aproximação é exata.f( x ) = 12 π--√e- 12x2
M( t ) = exp( 12t2)K( t ) = 12t2K′( t ) = tK′ ′( t ) = 1
t = xtf( xt) ≈ e1 12t2- t xt1 12 π⋅ 1-----√= 12 π--√e- 12x2t
Vejamos um aplicativo muito diferente: Bootstrap no domínio de transformação, podemos executar bootstrap analiticamente usando a aproximação do ponto de sela à distribuição de bootstrap da média!
Suponha que temos iid distribuídos a partir de alguma densidade (no exemplo simulado, usaremos uma distribuição exponencial unitária). A partir da amostra, calculamos a função geradora de momento empírico
e depois o cgf empírico . Precisamos do mgf empírico para a média que é e do cgf empírico para a média
que usamos para construir uma aproximação do ponto de sela. No seguinte código R (versão R 3.2.3): X1 1, X2, … , XnfM ( t ) = 1M^( t ) = 1n∑i = 1net xEu
K (t)=log M (t)log( H (T/n)n) K ˉ X (t)=nlog M (T/n)K^( t ) = logM^( T )registro( M^( t / n )n)K^X¯( t ) = n logM^( 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
(Tentei escrever isso como um código geral que pode ser modificado facilmente para outros cgfs, mas o código ainda não é muito robusto ...)
Em seguida, usamos isso para uma amostra de dez observações independentes de uma distribuição exponencial unitária. Fazemos o bootstrap não paramétrico usual "à mão", plotamos o histograma de bootstrap resultante para a média e traçamos em excesso a aproximação do ponto de sela:
> 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)
Fornecendo a plotagem resultante:
A aproximação parece ser bastante boa!
Poderíamos obter uma aproximação ainda melhor integrando a aproximação do ponto de sela e o redimensionamento:
> integrate(fhat, lower=0.1, upper=2)
1.026476 with absolute error < 9.7e-07
Agora, a função de distribuição cumulativa baseada nessa aproximação pode ser encontrada pela integração numérica, mas também é possível fazer uma aproximação direta do ponto de sela para isso. Mas isso é para outro post, isso é longo o suficiente.
Finalmente, alguns comentários foram deixados de fora do desenvolvimento acima. Em , fizemos uma aproximação essencialmente ignorando o terceiro termo. Por que podemos fazer isso? Uma observação é que, para a função de densidade normal, o termo deixado de fora não contribui em nada, de modo que a aproximação é exata. Portanto, como a aproximação do ponto de sela é um refinamento do teorema do limite central, estamos um pouco próximos do normal, portanto isso deve funcionar bem. Pode-se também olhar para exemplos específicos. Observando a aproximação do ponto de sela à distribuição de Poisson, observando o terceiro termo deixado de lado, neste caso, torna-se uma função trigamma, que de fato é bastante plana quando o argumento não é próximo de zero.(**)
Finalmente, por que o nome? O nome vem de uma derivação alternativa, usando técnicas de análise complexa. Mais tarde, podemos analisar isso, mas em outro post!