Седловое приближение к функции плотности вероятности (она работает аналогично для массовых функций, но я буду говорить здесь только в терминах плотностей) - это удивительно хорошо работающее приближение, которое можно рассматривать как уточнение центральной предельной теоремы. Таким образом, он будет работать только в тех случаях, когда существует центральная предельная теорема, но для этого нужны более строгие предположения.
Начнем с предположения, что функция, порождающая момент, существует и является дважды дифференцируемой. Это подразумевает, в частности, что все моменты существуют. Пусть X - случайная величина с генерирующей момент функцией (mgf)
M(t)=EetX
и cgf (генерирующая функция кумулянта) K(t)=logM(t) (где logобозначает натуральный логарифм). В процессе разработки я буду внимательно следить за Рональдом У. Батлером: «Приближения седловой точки с приложениями» (CUP). Мы разработаем приближение седловой точки, используя приближение Лапласа к некоторому интегралу. Напишите
eK(t)=∫∞−∞etxf(x)dx=∫∞−∞exp(tx+logf(x))dx=∫∞−∞exp(−h(t,x))dx
где
h(t,x)=−tx−logf(x) . Теперь мы разложим Тейлораh(t,x) поx рассматриваяt как постоянную. Это дает
h(t,x)=h(t,x0)+h′(t,x0)(x−x0)+12h′′(t,x0)(x−x0)2+⋯
где′обозначает дифференцирование поx. Обратите внимание, что
h′(t,x)=−t−∂∂xlogf(x)h′′(t,x)=−∂2∂x2logf(x)>0
(последнее неравенство по предположению, поскольку оно необходимо для работы приближения). Пустьxtбудет решениемh′(t,xt)=0. Предположим, что это дает минимум для h(t,x)как функции отx. Используя это разложение в интеграле и забыв прочасть⋯, получим
eK(t)≈∫∞−∞exp(−h(t,xt)−12h′′(t,xt)(x−xt)2)dx=e−h(t,xt)∫∞−∞e−12h′′(t,xt)(x−xt)2dx
- гауссовский интеграл, дающий
eK(t)≈e−h(t,xt)2πh′′(t,xt)−−−−−−−√.
Это дает (первый вариант) приближения седловой точки как
f(xt)≈h′′(t,xt)2π−−−−−−−√exp(K(t)−txt)(*)
Обратите внимание, что аппроксимация имеет вид экспоненциального семейства.
Теперь нам нужно проделать некоторую работу, чтобы получить это в более полезной форме.
Из мы получаем
Дифференцируя это по получаем
(по нашим предположениям), образом, связь между и является монотонной, поэтому четко определена. Нам нужно приближение к . Для этого мы получаем решение изh′(t,xt)=0t=−∂∂xtlogf(xt).
xt∂t∂xt=−∂2∂x2tlogf(xt)>0
txtxt∂∂xtlogf(xt)(*)
logf(xt)=K(t)−txt−12log2π−∂2∂x2tlogf(xt).(**)
Предполагая, что последний член, приведенный выше, слабо зависит от , поэтому его производная по приблизительно равна нулю (мы еще вернемся к комментариям по этому поводу), мы получим
Тогда до этого приближения мы получим, что
так что и должны быть связаны через уравнение
который называется уравнением седловой точки. xtxt∂logf(xt)∂xt≈(K′(t)−xt)∂t∂xt−t
0≈t+∂logf(xt)∂xt=(K′(t)−xt)∂t∂xt
txtK′(t)−xt=0,(§)
Что мы упускаем при определении это
и что мы можем найти путем неявного дифференцирования уравнения в седловой точке :
Результатом является то, что (с точностью до нашего приближения)
Собрав все вместе, мы получим окончательное приближение седловой точки плотности как
(*)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
Приближение перевала часто указывается как приближение к плотности среднее на основании н.о.р. наблюдений . Производящая функция кумулянта среднего - это просто , поэтому приближение седловой точки для среднего становится
nX1,X2,…,XnnK(t)f(x¯t)=enK(t)−ntx¯tn2πK′′(t)−−−−−−−−√
Давайте посмотрим на первый пример. Что мы получим, если попытаться приблизить стандартную нормальную плотность
mgf: так что
поэтому уравнение седловой точки и приближение седловой точки дает
так что в этом случае приближение является точным.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
Давайте посмотрим на совсем другое приложение: начальную загрузку в области преобразования, мы можем выполнить загрузку аналитически, используя приближение седловой точки к загрузочному распределению среднего!
Предположим, у нас есть распределенные по некоторой плотности (в смоделированном примере мы будем использовать единичное экспоненциальное распределение). Из выборки мы вычисляем эмпирическую функцию, генерирующую моменты,
а затем эмпирическую cgf . Нам нужно эмпирическое значение mgf для среднего значения, которое является и эмпирическое значение cgf для среднего значения
который мы используем для построения седлового приближения. Ниже приведен код R (версия 3.2.3 R): X1,X2,…,XnfM^(t)=1n∑i=1netxi
K^(t)=logM^(t)log(M^(t/n)n)K^X¯(t)=nlogM^(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
(Я пытался написать это как общий код, который можно легко модифицировать для других cgfs, но код все еще не очень надежен ...)
Затем мы используем это для выборки из десяти независимых наблюдений из единичного экспоненциального распределения. Мы делаем обычную непараметрическую начальную загрузку «вручную», строим итоговую гистограмму начальной загрузки для среднего значения и выводим приближение седловой точки:
> 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)
Предоставление полученного участка:
Аппроксимация кажется довольно хорошей!
Мы могли бы получить еще лучшее приближение, интегрировав приближение седловой точки и масштабирование:
> integrate(fhat, lower=0.1, upper=2)
1.026476 with absolute error < 9.7e-07
Теперь кумулятивная функция распределения, основанная на этом приближении, может быть найдена путем численного интегрирования, но для этого также можно сделать прямое приближение седловой точки. Но это для другого поста, этого достаточно долго.
Наконец, некоторые комментарии остались вне разработки выше. В мы сделали приближение, по существу игнорируя третий член. Почему мы можем это сделать? Одно наблюдение состоит в том, что для нормальной функции плотности оставленный член ничего не дает, поэтому приближение является точным. Итак, поскольку седловая аппроксимация является уточнением центральной предельной теоремы, мы немного приблизились к нормали, поэтому это должно хорошо работать. Можно также посмотреть на конкретные примеры. Глядя на приближение седловой точки к распределению Пуассона, глядя на этот пропущенный третий член, в этом случае он становится тригамма-функцией, которая действительно довольно плоская, когда аргумент не близок к нулю.(**)
Наконец, почему имя? Название происходит от альтернативного происхождения, используя методы комплексного анализа. Позже мы можем рассмотреть это, но в другом посте!