在隐马尔可夫模型中设置秃鹰运动数据的初始参数

问题描述 投票:0回答:1

我想以非常高分辨率的采样(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.`
r hidden-markov-models
1个回答
0
投票

理想情况下,初始参数值应接近“真实”参数,以便从数值角度更容易进行模型拟合。因此,一个好的方法是查看数据,考虑如何将数据分为 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")

© www.soinside.com 2019 - 2024. All rights reserved.