Я получаю эту ошибку при использовании fitHMM() для данных о движении животных:
Error in n2w(Par0[i], p$bounds, NULL, NULL, nbStates, inputs$estAngleMean, :
Check the parameter bounds for angle (the initial parameters should be strictly between the bounds of their parameter space).
Это мой код:
stateNames <- c("encamped", "exploratory")
dist = list(step = "gamma", angle = "vm")
Par0_m1=list(step=c(0.013,0.9216,0.01,1.11,0.01,0.004),
angle=c(1,1))
m1 <-fitHMM(data=dataM, nbStates=2,
dist=dist, Par0=Par0_m1,
estAngleMean = list(angle=FALSE),
stateNames = stateNames)
m1 имеет вывод:
step parameters:
----------------
encamped exploratory
mean 0.013173673 0.915614546
sd 0.009823547 1.115597292
zeromass 0.010918283 0.004483016
angle parameters:
-----------------
encamped exploratory
mean 0 0
concentration 0 0
а затем я пытаюсь использовать эти значения для соответствия второй, более сложной модели:
# Formula for transition probabilities
formula <- ~ Temp*cosinor(hour, period = 24)
# initial parameters obtained from m1
Par0_m2 <- getPar0(model=m1, formula=formula)
m2 <- fitHMM(data=dataM, nbStates=2,
dist=dist, Par0=Par0_m2$Par,
beta0=Par0_m2$beta, stateNames = stateNames,
formula=formula)
Именно на этом этапе при попытке создать m2 возникает ошибка.
Я попытался настроить исходные значения angularCon0 и перезапустить обе модели - если angularCon0 = (0,0), то ошибка также возникает, когда я пытаюсь запустить m1, если angularCon0 = (0,1) снова возникает ошибка для m1, если angularcon0 =(1,1) тогда я смогу успешно запустить m1 (но все равно не смогу запустить m2). Я не понимаю, что там происходит, почему концентрация не может работать с 0 значениями? Более того, почему m2 не может работать, используя значения, которые успешно позволили запустить m1?;
Я также проверил Par0_m2$Par:
print(Par0_m2$Par
$step
mean_1 mean_2 sd_1 sd_2 zeromass_1
0.013173673 0.915614546 0.009823547 1.115597292 0.010918283
zeromass_2
0.004483016
$angle
concentration_1 concentration_2
0 0
Я не понимаю, о чем говорит ошибка и как ее устранить.
Это хороший момент, если смешать структуры moveHMM и momentuHMM fitHMM – но даже с этой новой структурой – dist = list(step = "gamma", angular = "vm") Par0_m1=list(step=c(0.013,0.9216,0.01, 1.11,0.01,0.004), angular=c(1,1)) Я все равно получаю ошибку. Я продолжу просматривать ответы в этом сообщении на форуме, однако до сих пор я все еще в замешательстве.
Параметр концентрации для распределения фон Мизеса должен быть строго положительным, поэтому начальные значения, передаваемые в fitHMM()
, не могут быть равны нулю. Непонятно, почему обе концентрации углов поворота были оценены как нулевые в первой модели (m1
), но getPar0()
просто копирует эти значения и передает их fitHMM()
для второй модели. Это вызывает вашу ошибку.
Одним из решений было бы вручную отредактировать Par0_m2$Par$angle
, чтобы установить начальные значения, отличные от нуля, например:
Par0_m2$Par$angle <- c(0.1, 1)
Однако, вероятно, также было бы неплохо выяснить, почему концентрация оценивается как нулевая. Я предполагаю, что углы поворота в ваших данных имеют пик в точке «пи» (т. е. много разворотов в направлениях), но это невозможно правильно отразить, поскольку по умолчанию средний угол поворота фиксирован на нуле в momentuHMM. Вы можете изменить это в обеих моделях, используя опцию estAngleMean = list(angle=TRUE)
. Затем вам также нужно будет добавить два начальных значения среднего угла поворота в двух состояниях. Возможно, что-то вроде:
Par0_m1=list(step=c(0.013,0.9216,0.01,1.11,0.01,0.004),
angle=c(pi, 0, 0.5, 0.5))
где первые две записи angle
— средние значения, а последние две записи — параметры концентрации.
Я очень ценю ваш ответ, доктор Мишло. Действительно, когда я рисую частотное распределение моих углов поворота, пики приходятся на -3 и 3; с более низким пиком при 0. Могу ли я объяснить, как оценка среднего угла может помочь уловить концентрацию угла поворота? В любом случае ваш ответ оказался очень полезным (и таким быстрым!) Спасибо!
Если пик эмпирического распределения углов поворота близок к пи и если параметр среднего угла поворота фиксирован равным нулю, то концентрацию можно оценить как нулевую, поскольку это лучший способ уловить развороты. Но если среднее значение не фиксировано, оно, вероятно, будет оценено как нечто близкое к пи, а концентрация будет измерять, насколько пиковым является распределение вокруг этого среднего значения. В Википедии есть график, показывающий, как параметр концентрации влияет на форму.