Установка распределения Gumbel с помощью fitdistrplus
Я пытаюсь воспроизвести код из этого ответа, однако у меня проблемы с этим. Я использую дистрибутив gumbel из пакета VGAM
а также fitdistrplus
, Проблема возникает при выполнении:
fit = fitdist(data1, 'gumbel', start = list(location = 0, scale = 1))
Error in mledist(data, distname, start, fix.arg, ...) :
'start' must specify names which are arguments to 'distr'.
Как будто location
а также scale
не были аргументы * Гамбеля.
dgumbel
, pgumbel
, rgumbel
а также qgumbel
правильно предоставлены VGAM
, Однако пакет также предоставляет функцию под названием gumbel
с другим синтаксисом. Может ли это быть причиной проблем?
РЕДАКТИРОВАТЬ: да, действительно, это вызывает проблемы: использование пакета FAdist
вместо этого прекрасно работает.
3 ответа
Для справки, из пакета виньетка, связанного в комментариях:
library(fitdistrplus)
data(groundbeef)
serving <- groundbeef$serving
dgumbel <- function(x, a, b) 1/b*exp((a-x)/b)*exp(-exp((a-x)/b))
pgumbel <- function(q, a, b) exp(-exp((a-q)/b))
qgumbel <- function(p, a, b) a-b*log(-log(p))
fitgumbel <- fitdist(serving, "gumbel",
start=list(a=10, b=10))
Или с функциями из VGAM
:
rm(dgumbel) ## get rid of previous definition
## hack behaviour of VGAM::pgumbel() a little bit
pgumbel <- function(x,...) {
if (length(x)==0) numeric(0) else VGAM::pgumbel(x,...)
}
library(VGAM)
fitgumbel <- fitdist(serving, "gumbel",
start=list(location=10, scale=10))
Это связано с тем, что пакет fitdistr не поддерживает распространение gumbel.