unmarked::gdistsamp(): ошибка в optim: не конечное разностное значение

У меня проблемы с подгонкой модели gdistsamp() (пакет без опознавательных знаков). Всякий раз, когда я добавляю больше переменных, я получаю ошибку "не конечное значение с конечной разностью":

> t1 <- proc.time()
> Sys.time()
[1] "2014-12-30 03:39:07 CET"
> g8 <- gdistsamp(~ elev_100+solrad_100+slope_mean_100+clc_112_100+clc_121_100+clc_141_100+clc_142_100+clc_311_100+clc_312_100+clc_313_100+clc_321_100+clc_322_100+clc_324_100+clc_332_100+clc_412_100+clc_512_100, 
+ ~ yday + time,
+ ~ slope_mean_100+clc_112_100+clc_121_100+clc_141_100+clc_142_100+clc_311_100+clc_312_100+clc_313_100+clc_321_100+clc_322_100+clc_324_100+clc_332_100+clc_412_100+road2_100+road3_100,
+ umf, keyfun = "halfnorm", output = "abund",
+ mixture = "P", se = TRUE)
Error in optim(starts, nll, method = method, hessian = se, ...) : 
  non-finite finite-difference value [21]
In addition: There were 50 or more warnings (use warnings() to see the first 50)
> t2 <- proc.time()
> print(t2 - t1)
   user  system elapsed 
1741.00   10.66 1762.13 
> warnings()
Warning messages:
1: In log(cp[J + 1]) : NaNs produced
2: In log(cp[J + 1]) : NaNs produced
3: In log(cp[J + 1]) : NaNs produced
4: In log(cp[J + 1]) : NaNs produced
5: In log(cp[J + 1]) : NaNs produced
6: In log(cp[J + 1]) : NaNs produced
7: In log(cp[J + 1]) : NaNs produced
8: In log(cp[J + 1]) : NaNs produced
9: In log(cp[J + 1]) : NaNs produced
10: In log(cp[J + 1]) : NaNs produced
11: In log(cp[J + 1]) : NaNs produced
12: In log(cp[J + 1]) : NaNs produced
13: In log(cp[J + 1]) : NaNs produced
14: In log(cp[J + 1]) : NaNs produced
15: In log(cp[J + 1]) : NaNs produced
16: In log(cp[J + 1]) : NaNs produced
17: In log(cp[J + 1]) : NaNs produced
18: In log(cp[J + 1]) : NaNs produced
19: In log(cp[J + 1]) : NaNs produced
20: In log(cp[J + 1]) : NaNs produced
21: In log(cp[J + 1]) : NaNs produced
22: In log(cp[J + 1]) : NaNs produced
23: In log(cp[J + 1]) : NaNs produced
24: In log(cp[J + 1]) : NaNs produced
25: In log(cp[J + 1]) : NaNs produced
26: In log(cp[J + 1]) : NaNs produced
27: In log(cp[J + 1]) : NaNs produced
28: In log(cp[J + 1]) : NaNs produced
29: In log(cp[J + 1]) : NaNs produced
30: In log(cp[J + 1]) : NaNs produced
31: In log(cp[J + 1]) : NaNs produced
32: In log(cp[J + 1]) : NaNs produced
33: In log(cp[J + 1]) : NaNs produced
34: In log(cp[J + 1]) : NaNs produced
35: In log(cp[J + 1]) : NaNs produced
36: In log(cp[J + 1]) : NaNs produced
37: In log(cp[J + 1]) : NaNs produced
38: In log(cp[J + 1]) : NaNs produced
39: In log(cp[J + 1]) : NaNs produced
40: In log(cp[J + 1]) : NaNs produced
41: In log(cp[J + 1]) : NaNs produced
42: In log(cp[J + 1]) : NaNs produced
43: In log(cp[J + 1]) : NaNs produced
44: In log(cp[J + 1]) : NaNs produced
45: In log(cp[J + 1]) : NaNs produced
46: In log(cp[J + 1]) : NaNs produced
47: In log(cp[J + 1]) : NaNs produced
48: In log(cp[J + 1]) : NaNs produced
49: In log(cp[J + 1]) : NaNs produced
50: In log(cp[J + 1]) : NaNs produced

Когда я удалил некоторые переменные из формулы обнаружения, я вычислил модель, но получил предупреждение о том, что модель не сходится:

Call:
gdistsamp(lambdaformula = ~elev_100 + solrad_100 + slope_mean_100 + 
    clc_112_100 + clc_121_100 + clc_141_100 + clc_142_100 + clc_311_100 + 
    clc_312_100 + clc_313_100 + clc_321_100 + clc_322_100 + clc_324_100 + 
    clc_332_100 + clc_412_100 + clc_512_100, phiformula = ~yday + 
    time, pformula = ~clc_311_100 + clc_312_100 + clc_313_100, 
    data = umf, keyfun = "halfnorm", output = "abund", mixture = "P", 
    se = TRUE)

Abundance (log-scale):
               Estimate      SE       z  P(>|z|)
(Intercept)      -1.892  0.1859 -10.178 2.48e-24
elev_100         -0.728  0.0732  -9.947 2.61e-23
solrad_100        0.142  0.0426   3.339 8.40e-04
slope_mean_100    0.239  0.0480   4.982 6.29e-07
clc_112_100      -0.155  0.4812  -0.323 7.47e-01
clc_121_100      -9.089 12.2398  -0.743 4.58e-01
clc_141_100     -27.653 70.7278  -0.391 6.96e-01
clc_142_100      -7.527  9.2335  -0.815 4.15e-01
clc_311_100       2.562  0.2701   9.485 2.43e-21
clc_312_100       3.144  0.2338  13.448 3.17e-41
clc_313_100       2.666  0.3466   7.691 1.46e-14
clc_321_100       2.221  0.3953   5.618 1.93e-08
clc_322_100       1.638  0.5366   3.053 2.27e-03
clc_324_100       1.842  0.3218   5.723 1.04e-08
clc_332_100      -3.326  4.1813  -0.796 4.26e-01
clc_412_100      -1.696  3.7272  -0.455 6.49e-01
clc_512_100      -3.062  2.6670  -1.148 2.51e-01

Availability (logit-scale):
            Estimate    SE     z  P(>|z|)
(Intercept)    1.152 0.427  2.70 0.006979
yday          -0.622 0.167 -3.72 0.000197
time          -0.199 0.122 -1.64 0.101123

Detection (log-scale):
            Estimate     SE     z           P(>|z|)
(Intercept)    3.846 0.0898 42.81 0.000000000000000
clc_311_100   -0.602 0.1190 -5.06 0.000000417315360
clc_312_100   -0.753 0.1019 -7.39 0.000000000000149
clc_313_100   -0.573 0.1561 -3.67 0.000238453876365

AIC: 6076.263 
Number of sites: 938
optim convergence code: 1
optim iterations: 204 
Bootstrap iterations: 0 

Warning message:
In .local(object, ...) :
  Model did not converge. Try providing starting values or increasing maxit control argment.
> save(g9, file = "gdistsamp-g9.Rdata")

Когда я делаю модель так просто, как это:

gdistsamp(lambdaformula = ~elev_100 + solrad_100 + clc_311_100 + 
    clc_312_100 + clc_313_100, phiformula = ~yday + time, pformula = ~clc_311_100 + 
    clc_312_100 + clc_313_100 + road1_100 + road2_100, data = umf, 
    keyfun = "halfnorm", output = "abund", mixture = "P", se = TRUE)

он будет вычислен (и сходится), однако я все еще получаю предупреждения "В журнале (cp[J + 1]): произведено NaNs".

Обратите внимание, что все переменные нормализованы, за исключением переменных clc - это пропорции (действительное число 0 - 1) области с определенной средой обитания, которые составляют до 1.

Не могу понять, где именно проблема...

PS: я готов отправить данные всем, кто интересуется проблемой (хотя я не хочу просто публиковать их в Интернете)

1 ответ

Если вас беспокоит сообщение "In log(cp[J + 1]): NaNs произведено", то обязательно. Согласно книге Кери и Ройля "Прикладное иерархическое моделирование в экологии", это связано с вероятностью, близкой к нулю, в самой последней ячейке (индивидуумы> xmaxdist далеко) и в целом не является проблемой.

Другие вопросы по тегам