ошибка в функции shape () в библиотеке evir - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть фрейм данных, где столбец представляет собой сочетание положительных и отрицательных чисел, а первая запись - NA. Я пытаюсь запустить функцию формы как

shape(data$col, models = 30, start = 30, end = 400, ci=.90,reverse = TRUE,auto.scale = TRUE)

, где данные в 'col' равны [NA, -0.2663194135, -3.7665034719, -0.2072122334, 1.5721742718, -9.142419, -8.954330, -5.167314, 11.805930, 9.533830, 7.065835], но я получаю сообщение об ошибке

Ошибка в optim (theta, negloglik, hessian = TRUE, ..., tmp = избыток): не конечное значение, предоставляемое optim

Может кто-нибудь помочь мне понять, что это значит? Я погуглил, но ничего конкретного не нашел

1 Ответ

0 голосов
/ 03 февраля 2020

Не ясно, что вы пытаетесь сделать здесь. Вызов shape позволяет увидеть, как изменение параметров threshold или nextremes в функции gpd изменит параметр xi результирующей обобщенной модели распределения Парето.

Есть несколько причин, по которым приведенный вами пример не работает. Давайте сначала покажем пример того, что работает . Экспоненциальное распределение является частным случаем GPD с mu = 0 и xi = 0, поэтому выборка, взятая из экспоненциального распределения, должна помочь:

library(evir)  # For the shape() function
set.seed(69)   # Makes this example reproducible
x <- rexp(300) # Random sample of 300 elements drawn from exponential distribution
shape(x)

enter image description here

Хорошо.

Однако ваш образец содержит NA. Что произойдет, если мы сделаем одно значение NA в нашем примере?

x[1] <- NA
shape(x)
#> Error in optim(theta, negloglik, hessian = TRUE, ..., tmp = excess) : 
#>   non-finite value supplied by optim

Итак, NAs не допускается.

К сожалению, вы обнаружите, что по-прежнему получаете ту же ошибку, если вы удалите значение NA. Для этого есть две причины. Во-первых, у вас есть 9 не-NA образцов. Что произойдет, если мы попробуем экспоненциальный образец длины-9?

shape(rexp(9))
#> Error in optim(theta, negloglik, hessian = TRUE, ..., tmp = excess) : 
#>  non-finite finite-difference value [1]

Мы обнаружим, что модель не сможет соответствовать менее чем с 16 точками данных.

Но это не единственное проблема. Что, если мы попытаемся получить график для данных, которые нельзя извлечь из обобщенного распределения Парето?

# Maybe a uniform distribution?
shape(runif(300, 1, 10))
#> Error in optim(theta, negloglik, hessian = TRUE, ..., tmp = excess) : 
#>   non-finite finite-difference value [1]
#> In addition: Warning message:
#> In sqrt(diag(varcov)) : NaNs produced
#>

Таким образом, вам нужна большая выборка без NA, и она должна приблизительно соответствовать в GPD, иначе функция gpd выдаст ошибку.

Я мог бы помочь, если вы дадите нам более полную картину того, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...