Т-распределение Фиттинга в R: параметр масштабирования


17

Как мне подобрать параметры t-распределения, то есть параметры, соответствующие «среднему» и «стандартному отклонению» нормального распределения. Я предполагаю, что они называются «среднее» и «масштабирование / степени свободы» для t-распределения?

Следующий код часто приводит к ошибкам «сбой оптимизации».

library(MASS)
fitdistr(x, "t")

Нужно ли сначала масштабировать х или преобразовать в вероятности? Как лучше это сделать?


2
Сбой происходит не потому, что вам нужно масштабировать параметры, а потому, что не работает оптимизатор. Смотрите мой ответ ниже.
Сергей Бушманов

Ответы:


16

fitdistrиспользует методы максимального правдоподобия и оптимизации, чтобы найти параметры данного распределения. Иногда, особенно для t-distribution, как заметил @ user12719, оптимизация в виде:

fitdistr(x, "t")

не удается с ошибкой.

В этом случае вы должны помочь оптимизатору, указав начальную точку и нижнюю границу, чтобы начать поиск оптимальных параметров:

fitdistr(x, "t", start = list(m=mean(x),s=sd(x), df=3), lower=c(-1, 0.001,1))

Обратите внимание, df=3это ваша лучшая догадка о том, какой dfможет быть «оптимальность» . После предоставления этой дополнительной информации ваша ошибка исчезнет.

Несколько отрывков, которые помогут вам лучше понять внутреннюю механику fitdistr:

Для нормального, логнормального, геометрического, экспоненциального и пуассоновского распределений используются MLE замкнутой формы (и точные стандартные ошибки), которые startне должны предоставляться.

...

Для следующих именованных распределений разумные начальные значения будут вычислены, если они startопущены или указаны только частично: «Коши», «Гамма», «Логистика», «Отрицательный бином» (параметризованный по mu и размеру), «t» и «weibull». ». Обратите внимание, что эти начальные значения могут быть недостаточно хорошими, если посадка плохая: в частности, они не устойчивы к выбросам, если в распределенном распределении нет длинных хвостов.


1
Оба ответа (Флом и Бушманов) полезны. Я выбираю этот, потому что он делает более явным, что при правильных начальных значениях и ограничениях оптимизация 'fitdistr' сходится.
user12719 10.02.16

10

νT

νT

set.seed(1234)
n <- 10
x <- rt(n,  df=2.5)

make_loglik  <-  function(x)
    Vectorize( function(nu) sum(dt(x, df=nu,  log=TRUE)) )

loglik  <-  make_loglik(x)
plot(loglik,  from=1,  to=100,  main="loglikelihood function for df     parameter", xlab="degrees of freedom")
abline(v=2.5,  col="red2")

введите описание изображения здесь

N

Давайте попробуем некоторые симуляции:

t_nu_mle  <-  function(x) {
    loglik  <-  make_loglik(x)
    res  <-  optimize(loglik, interval=c(0.01, 200), maximum=TRUE)$maximum
    res   
}

nus  <-  replicate(1000, {x <- rt(10, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)

> mean(nus)
[1] 45.20767
> sd(nus)
[1] 78.77813

Отображение оценки очень нестабильно (глядя на гистограмму, значительная часть оценочных значений находится на верхнем пределе, заданном для оптимизации 200).

Повторяя с большим размером выборки:

nus  <-  replicate(1000, {x <- rt(50, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 4.342724
> sd(nus)
[1] 14.40137

что намного лучше, но среднее значение все еще намного выше истинного значения 2,5.

Затем помните, что это упрощенная версия реальной проблемы, где также необходимо оценить параметры местоположения и масштаба.

Tν


5
Ваш вывод о том, что проблемы оценки df на самом деле могут работать против причины выбора t-распределения в первую очередь (то есть робастности), заставляет задуматься.
user12719

1
(+1) «Неограниченный выше» не является неправильным ответом и может быть полезно для некоторых целей в сочетании с интервальной оценкой. Важно не слепо использовать наблюдаемую информацию Фишера для формирования доверительных интервалов Уолда.
Scortchi - Восстановить Монику

8

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

fitdistr(x2, "t", df = 9)

указывая, что вам просто нужно значение для df. Но это предполагает стандартизацию.

Для большего контроля они также показывают

mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
fitdistr(x2, mydt, list(m = 0, s = 1), df = 9, lower = c(-Inf, 0))

где параметры будут m = среднее значение, s = стандартное отклонение, df = степени свободы


1
Я думаю, я запутался в параметрах t-распределения. Имеет ли он 2 (среднее значение, df) или 3 (среднее значение, стандартное отклонение, df) параметра? Мне было интересно, если можно было бы соответствовать параметру "DF".
user12719 12.12.12

1
@ user12719 Распределение Student's-t имеет три параметра: местоположение, масштаб и степени свободы. Они не обозначаются как среднее значение, стандартное отклонение и df, поскольку среднее значение и дисперсия этого распределения зависят от трех параметров. Кроме того, они не существуют в некоторых случаях. Питер Флом исправляет df, но это также можно рассматривать как неизвестный параметр.

1
@PeterFlom В случае распределения Коши очевидно, что m и s - это местоположение и масштаб. Я согласен, что обозначения m и s предполагают, что они представляют среднее и стандартное отклонение соответственно. Но это может быть как упрощением, так \muи \sigmaхорошо. +1 давно, кстати.

1
@PeterFlom Означает ли эта цитата из файла справки R, что df всегда равен 9 для распределения студентов? Не кажется ли вам, что df следует оценивать? На самом деле отсутствие dfошибки является причиной ошибки, и правильный ответ должен дать какой-то рецепт для ее обнаружения.
Сергей Бушманов

1
@PeterFlom Кстати, если вы прочитаете файл справки на пару строк выше своей цитаты, вы поймете, почему df=9это хорошо в их примере и не имеет значения здесь.
Сергей Бушманов
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.