我想以非常高分辨率的采样(5 分钟分辨率)对常驻秃鹫和迁徙秃鹰的运动数据执行 HMM。我在设置初始参数时遇到问题。步长范围从 3500m 到 0.1m,角度范围大致从 -4 到 2.5。我也没有找到任何文献参考,特别是关于鸟类或猛禽的文献。我在 R 中使用“hmmTMB”。
> #creating HMM object
> hmmhg1 <- HMM$new(obs = obs1, hid = hidhg1)
> hmmhg1
#######################
## Observation model ##
#######################
+ step ~ gamma2(mean, sd)
* mean.state1 ~ 1
* mean.state2 ~ 1
* sd.state1 ~ 1
* sd.state2 ~ 1
+ angle ~ vm(mu, kappa)
* mu.state1 ~ 1
* mu.state2 ~ 1
* kappa.state1 ~ 1
* kappa.state2 ~ 1
> Initial observation parameters (t = 1):
state 1 state 2
step.mean 1 5
step.sd 1 5
angle.mu 0 0
angle.kappa 1 5
#########################
## State process model ##
#########################
state 1 state 2
state 1 . ~1
state 2 ~1 .
> Initial transition probabilities (t = 1):
state 1 state 2
state 1 0.9 0.1
state 2 0.1 0.9
> #model fitting
> hmmhg1$fit(silent = TRUE)
Error in self$hid()$update_delta0(delta0) :
'delta0' should have 1 rows and 2 columns
In addition: Warning message:
In hmmhg1$fit(silent = TRUE) :
Convergence code was not zero, indicating that the optimizer may not have converged to the correct estimates. Please check by consulting the out() function which shows what optimx returned.`
理想情况下,初始参数值应接近“真实”参数,以便从数值角度更容易进行模型拟合。因此,一个好的方法是查看数据,考虑如何将数据分为 2 个(或更多)状态,然后得出模型参数的合理值。例如,您提到变量
step
的范围介于 0.1 和 3500 之间,因此您选择的平均值(1 和 5)似乎不太适合此处。
在没有看到数据直方图的情况下很难提出具体建议,但也许你可以尝试两种状态的 10m 和 100m,即:
# observation distributions
dists <- list(step = "gamma2", angle = "vm")
# initial parameter values
par0 <- list(step = list(mean = c(10, 100), sd = c(10, 100)),
angle = list(mu = c(0, 0), kappa = c(1, 5)))
# create observation model
obs1 <- Observation$new(data = data,
dists = dists,
n_states = 2,
par = par0)
请注意,我只是为标准差选择了与均值相同的值,因为根据我的经验,它们往往具有相同的数量级。
一些可能有用的一般参考:
我们不久前为 R 包 moveHMM 写了一篇关于为动物运动 HMM 选择初始参数值的短文,无论包如何,许多想法都适用:“为估计选择初始参数值的简短指南在动HMM”。
我还在以下小插图的第 5 节中写了有关为 hmmTMB 选择初始参数值的文章:“hmmTMB 的高级功能”
hmmTMB 函数
$suggest_initial()
可以帮助得出初始参数值。它使用 K 均值聚类来定义一些粗略的“状态”,然后返回这些状态的参数估计值。您可以调用类似 obs1$suggest_initial()
的内容,并相应地更新初始参数值。 注意: 此功能可能无法在当前 CRAN 版本的软件包(v1.0.2)中使用,您可能需要从 Github 安装开发版本,例如使用 devtools::install_github("TheoMichelot/hmmTMB")
。