unmarked :: gdistsamp():optim中的错误:非有限的有限差分值

时间:2014-12-30 14:12:52

标签: r unmarked-package

我无法使用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)

它将被计算(并收敛),但是我仍然得到警告&#34;在log(cp [J + 1])中:NaNs产生&#34;。

请注意,变量都是标准化的,除了clc变量 - 这些是具有特定栖息地的区域的比例(实数0 - 1),总计为1。

无法确定问题究竟在哪里......

PS:我愿意将数据发送给任何对此问题感兴趣的人(我不想在网上发布这些数据)

1 个答案:

答案 0 :(得分:1)

如果您担心消息“在日志中(cp [J + 1]):NaNs产生”确实如此。根据Kery和Royle的“生态学中的应用层次建模”一书,这与最后一个单元中的概率接近0(个体> xmaxdist远)并且通常不是问题。