2016-12-26 16 views
1

Я хотел бы установить гамма-распределение в набор данных из 338 элементов, с фиксированным низким порогом (Я использую R). Чтобы представить нижний предел, я подумал использовать гамма с тремя параметрами, добавив местоположение. Вот мой код:нижний предел гамма-распределения в R

library(FAdist) 
library(fitdistrplus) 
fit <- fitdist(mydata,"gamma3",start=list(1,1,mythreshold)) 

Everytime я запустить код, я получил ту же ошибку:

<simpleError in optim(par = vstart, fn = fnobj, fix.arg = fix.arg, obs = data,  gr = gradient, ddistnam = ddistname, hessian = TRUE, method = meth,  lower = lower, upper = upper, ...): non-finite finite-difference value [3]> 
Error in fitdist(Hs, "gamma3", start = list(1, 1, 3)) : 
    the function mle failed to estimate the parameters, 
       with the error code 100 

Так что я попытался изменить начальные значения, используя те, полученные с помощью подгонки гамма с два параметра, которые дали этот результат:

fit <- fitdist(mydata,"gamma") 
fit 
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters: 
     estimate Std. Error 
shape 21.417503 1.6348313 
rate 5.352422 0.4133735 

но это еще не work..I бы понять, если даже гамма с двумя параметрами не работает, но это не так, и я могу» я даю себе объяснение ция. Кроме того, QQ-сюжет и ecdf для гаммы с двумя параметрами не так хорошо ... но если я соответствовать распределению на исходном наборе данных масштабируются относительно низкого порога подгонка выглядит идеально:

fit <- fitdist(mydata-mythreshold,"gamma") 
fit 
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters: 
     estimate Std. Error 
shape 1.059540 0.07212832 
rate 1.058007 0.09117620 

Но тогда я не знаю, правильно ли это делать ... параметры очень разные, и мне нужно их рассчитать периоды возврата, связанные с моими данными! поэтому я подумал о гамме с параметром location.

p.s. я не прикреплял данные, потому что их слишком много, но я могу сообщить о них:

summary(mydata) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. 
    3.003 3.282 3.753 4.001 4.444 8.087 

ответ

1

Настроить воспроизводимый пример;

library(FAdist); library(fitdistrplus) 
set.seed(101) 
x <- rgamma3(1000,shape=1,scale=1,thres=1) 

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

fitdist(x,dgamma3,start=list(shape=1,scale=1,thres=0.5), 
     upper=c(Inf,Inf,min(x))) 
## Fitting of the distribution ' gamma3 ' by maximum likelihood 
## Parameters: 
##  estimate Std. Error 
## shape 0.9321949   NA 
## scale 1.0586079   NA 
## thres 1.0000012   NA 

Примечание (1) при максимальной вероятности такого рода порогового параметра всегда будет в конечном итоге на наибольшее значение может принимать (то есть минимальное значение в наборе данных); (2) стандартные ошибки: NA, потому что стандартные ошибки Wald не могут быть вычислены, когда параметры попадают в границу.

В качестве альтернативы вы можете установить пороговый параметр, определяющий функцию обертку:

dgconstr <- function(x,shape,scale,...) { 
    dgamma3(x,shape,scale,thres=0.5,...) 
} 
pgconstr <- function(...) { 
    pgamma3(...,thres=0.5) 
} 

fitdist(x,dgconstr,start=list(shape=1,scale=1)) 
+0

Большое вам спасибо Бен! Я получил его, и он окончательно сработал. –

 Смежные вопросы

  • Нет связанных вопросов^_^