Положительное стабильное распределение в R

9

Положительные стабильные распределения описываются четырьмя параметрами: параметром асимметрии , параметром масштаба , параметром местоположения и т. Д. называемый индексный параметр . Когда равен нулю, распределение симметрично относительно , когда оно положительное (соответственно отрицательное), распределение смещается вправо (соответственно налево) Стабильные распределения допускают жирные хвосты, когда уменьшается.σ > 0 μ ( - , ) α ( 0 , 2 ] β μ αβ[1,1]σ>0μ(,)α(0,2]βμα

Когда строго меньше единицы и поддержка дистрибутива ограничивается .β = 1 ( μ , )αβ=1(μ,)

Функция плотности имеет только выражение в замкнутой форме для некоторых конкретных комбинаций значений параметров. Когда , , и это так (см. Формулу (4.4) здесь ):α < 1 β = 1 σ = αμ=0α<1β=1σ=α

f(y)=1πyk=1Γ(kα+1)k!(yα)ksin(αkπ)

Оно имеет бесконечное среднее значение и дисперсию.

Вопрос

Я хотел бы использовать эту плотность в R. Я использую

> alpha <- ...
> dstable(y, alpha=alpha, beta=1, gamma=alpha, delta=0, pm=1)

где функция dstable поставляется с пакетом fBasics.

Можете ли вы подтвердить, что это правильный способ вычислить эту плотность в R?

Заранее спасибо!

РЕДАКТИРОВАТЬ

Одна из причин, по которой я подозреваю, состоит в том, что на выходе значение delta отличается от значения на входе. Пример:

> library(fBasics)
> alpha <- 0.4
> dstable(4, alpha=alpha, beta=1, gamma=alpha, delta=0, pm=1)
[1] 0.02700602
attr(,"control")
   dist alpha beta gamma    delta pm
stable   0.4    1   0.4 0.290617  1
ocram
источник

Ответы:

6

Короткий ответ: ваша в порядке, но ваша неверна. Чтобы получить положительное стабильное распределение, заданное вашей формулой в R, вам нужно установить γ γ = | 1 - я загар ( π α / 2 ) | - 1 / α .δγ

γ=|1itan(πα/2)|1/α.

Самый ранний пример формулы, которую я смог найти, был в (Feller, 1971), но я нашел эту книгу только в физической форме. Однако (Hougaard, 1986) дает ту же формулу вместе с преобразованием Лапласа Из руководства ( используется в ) параметризация взята из (Самородницкий и Такк, 1994), другого ресурса, чье онлайн-воспроизведение ускользнуло от меня. Однако (Weron, 2001) дает характеристическую функцию в Самородницком и параметризацию Taqqu для чтобы быть

L(s)=E[exp(sX)]=exp(sα).
stablediststabledistfBasicspm=1α1
φ(t)=E[exp(itX)]=exp[iδtγα|t|α(1iβsign(t)tanπα2)].
Я переименовал некоторые параметры из статьи Верона в другую сторону с помощью обозначения, которое мы используем. Он использует для и для . В любом случае, подключив и , мы получим μδσγβ=1δ=0
φ(t)=exp[γα|t|α(1isign(t)tanπα2)].

Обратите внимание, что для и что . Формально, , поэтому, установив в мы получаем Интересно отметить, что которая соответствует , также равна , поэтому, если вы попробуете или(1itan(πα/2))/|1itan(πα/2)|=exp(iπα/2)α(0,1)iα=exp(iπα/2)γ = | 1 - я загар ( π α / 2 ) | - 1 / α φ ( t ) φ ( i s ) = exp ( - s α ) = L ( s ) . & gamma & alpha ; = 1 / 2 1 / 2 & gamma = & alpha ; & gamma = 1 - & alpha ; & alpha ;L(s)=φ(is)γ=|1itan(πα/2)|1/αφ(t)

φ(is)=exp(sα)=L(s).
γα=1/21/2γ=αγ=1α, что на самом деле не плохое приближение, вы в конечном итоге совершенно правильно для .α=1/2

Вот пример в R для проверки правильности:

library(stabledist)

# Series representation of the density
PSf <- function(x, alpha, K) {
  k <- 1:K
  return(
    -1 / (pi * x) * sum(
      gamma(k * alpha + 1) / factorial(k) * 
        (-x ^ (-alpha)) ^ k * sin(alpha * k * pi)
    )
  )
}

# Derived expression for gamma
g <- function(a) {
  iu <- complex(real=0, imaginary=1)
  return(abs(1 - iu * tan(pi * a / 2)) ^ (-1 / a))
}

x=(1:100)/100
plot(0, xlim=c(0, 1), ylim=c(0, 2), pch='', 
     xlab='x', ylab='f(x)', main="Density Comparison")
legend('topright', legend=c('Series', 'gamma=g(alpha)'),
       lty=c(1, 2), col=c('gray', 'black'),
       lwd=c(5, 2))
text(x=c(0.1, 0.25, 0.7), y=c(1.4, 1.1, 0.7), 
     labels=c(expression(paste(alpha, " = 0.4")),
              expression(paste(alpha, " = 0.5")),
              expression(paste(alpha, " = 0.6"))))

for(a in seq(0.4, 0.6, by=0.1)) {
  y <- vapply(x, PSf, FUN.VALUE=1, alpha=a, K=100)
  lines(x, y, col="gray", lwd=5, lty=1)
  lines(x, dstable(x, alpha=a, beta=1, gamma=g(a), delta=0, pm=1), 
        col="black", lwd=2, lty=2)
}

Выход участка

  1. Феллер В. (1971). Введение в теорию вероятностей и ее приложения , 2 , 2-е изд. Нью-Йорк: Уайли.
  2. Хугаард, П. (1986). Модели выживания гетерогенных популяций, полученных из стабильных распределений , Biometrika 73 , 387-396.
  3. Самородницкий Г., Такк М.С. (1994). Стабильные негауссовские случайные процессы , Чепмен и Холл, Нью-Йорк, 1994.
  4. Верон, Р. (2001). Пересмотрено стабильное распределение Леви: хвостовой индекс> 2 не исключает стабильный режим Леви , Международный журнал современной физики, 2001, 12 (2), 209-223.
П Шнелл
источник
1
С удовольствием. Тема положительных стабильных параметризаций вызвала у меня большую головную боль в начале этого года (это действительно беспорядок), поэтому я публикую то, что придумала. Эта конкретная форма полезна в анализе выживаемости, потому что форма лапласиана допускает простую взаимосвязь между параметрами условной и предельной регрессии в моделях пропорциональных рисков, когда существует хрупкий термин, следующий за положительным стабильным распределением (см. Статью Хугаарда).
П Шнелл
6

Я думаю, что происходит, что в выходных данных deltaможет сообщаться значение внутреннего местоположения, в то время как во входных данных deltaописывается сдвиг. [Похоже, есть аналогичная проблема с тем, gammaкогда pm=2.] Так что, если вы попытаетесь увеличить сдвиг до 2

> dstable(4, alpha=0.4, beta=1, gamma=0.4, delta=2, pm=1)
[1] 0.06569375
attr(,"control")
   dist alpha beta gamma    delta pm
 stable   0.4    1   0.4 2.290617  1

затем вы добавляете 2 к значению местоположения.

С beta=1и у pm=1вас есть положительная случайная величина с нижней границей распределения в 0.

> min(rstable(100000, alpha=0.4, beta=1, gamma=0.4, delta=0, pm=1))
[1] 0.002666507

Сдвиг на 2 и нижняя граница возрастает на ту же величину

> min(rstable(100000, alpha=0.4, beta=1, gamma=0.4, delta=2, pm=1))
[1] 2.003286

Но если вы хотите, чтобы deltaвходное значение было внутренним значением местоположения, а не сдвигом или нижней границей, то вам нужно использовать другую спецификацию для параметров. Например, если вы попробуете следующее (с pm=3и с попыткой, delta=0и с тем, что delta=0.290617вы нашли ранее), вы, похоже, получите то же самое deltaв и из. С pm=3и delta=0.290617вы получите ту же плотность 0.02700602, которую вы нашли ранее, и нижнюю границу в 0. С, pm=3и delta=0вы получите отрицательную нижнюю границу (на самом деле -0.290617).

> dstable(4, alpha=0.4, beta=1, gamma=0.4, delta=0, pm=3)
[1] 0.02464434
attr(,"control")
   dist alpha beta gamma delta pm
 stable   0.4    1   0.4     0  3
> dstable(4, alpha=0.4, beta=1, gamma=0.4, delta=0.290617, pm=3)
[1] 0.02700602
attr(,"control")
   dist alpha beta gamma    delta pm
 stable   0.4    1   0.4 0.290617  3
> min(rstable(100000, alpha=0.4, beta=1, gamma=0.4, delta=0, pm=3))
[1] -0.2876658
> min(rstable(100000, alpha=0.4, beta=1, gamma=0.4, delta=0.290617, pm=3))
[1] 0.004303485

Возможно, вам будет проще просто проигнорировать deltaв выводе, и пока вы продолжаете beta=1использовать pm=1средства deltaво входных данных, это нижняя граница распределения, которая, по-видимому, должна быть равна 0.

Генри
источник
4

Также следует отметить, что Мартин Мачлер просто переработал код для стабильного дистрибутива и добавил некоторые улучшения.

Его новый пакет stabledist будет также использоваться fBasics, так что вы можете захотеть взглянуть и на это.

Дирк Эддельбюттель
источник