You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于BBMM中Sig1与Sig2平滑参数设置的技术求助

BBMM参数调试问题:Sig1/Sig2无响应、liker个体曲线一致的排查

我在编写BBMM相关代码时,能生成预期输出,但无法确定Sig1和Sig2的合适平滑参数。使用liker函数时,每个个体生成的曲线完全一致,这显然不符合预期。我尝试调整Sig2数值和Sig1的范围,但参数调整未产生任何变化,请问我忽略了什么?

示例数据:
Example data

原代码

#Load Package
library(BBMM)
library(sp)
library(adehabitatHR)
library(adehabitatLT)

##Plot Movement Rates for individuals

ctraj <- as.ltraj(xy = coordinates(RelSPDF), date = RelSPDF$Timestamp, id =RelSPDF$Animal_ID)

is.regular(ctraj)

graphics.off()

par("mar")

par(mar=c(1,1,1,1))

plotltr(ctraj)

###Establish smoother Sig1 and Sig2 parameters

x <- ctraj

lik <- liker(x, sig2 = 6, rangesig1 = c(1, 50))

xbb <- kernelbb(x, sig1 = 300, sig2 = 6, grid=1500)

image(xbb)

plot(getverticeshr(xbb, 95), add=TRUE, lwd=2)

plot(ctraj)

Sigma相关图示:
Sigma参数图示

使用环境:R版本为2021.09.0 64位


可能的问题与解决方向

  • 轨迹规律性问题:先确认is.regular(ctraj)的输出。若轨迹不是规则时间间隔,liker和kernelbb的参数计算会异常,导致调整无响应。需用sett0函数对轨迹做规则化处理,统一时间间隔。
  • 个体轨迹拆分错误:检查ctraj的个体分组是否正确。如果Animal_ID的分组失效(所有数据归为同一个体),liker会基于整体数据计算,自然每个个体曲线一致。可以用split(ctraj)查看拆分后的轨迹列表是否符合预期。
  • liker参数范围不合理:当前rangesig1设置为1-50,而后续kernelbb用了300的Sig1,说明你未参考liker的输出选参数。另外,sig2设置不当可能导致似然曲线扁平化,参数调整无法体现差异。建议单独对每个个体运行liker,而非用合并的轨迹对象。
  • 包版本兼容问题:你使用的R版本较旧,对应的BBMM、adehabitatLT等包可能存在兼容问题。尝试更新相关包到最新兼容版本,或查阅包的官方文档确认参数使用方式是否有变更。

修正后的代码示例(个体独立计算)

# 加载依赖包
library(BBMM)
library(sp)
library(adehabitatHR)
library(adehabitatLT)

# 将轨迹按个体拆分
ctraj_list <- split(ctraj)

# 逐个个体规则化轨迹并计算似然曲线
lik_list <- lapply(ctraj_list, function(traj) {
  # 规则化轨迹(假设时间间隔为3600秒即1小时,根据你的数据实际情况调整)
  traj_reg <- sett0(traj, t0 = 3600, type = "regular")
  # 扩大sig1的范围,覆盖后续使用的300
  liker(traj_reg, sig2 = 6, rangesig1 = c(50, 500))
})

# 查看每个个体的似然曲线,确定最优sig1
lapply(lik_list, plot)

# 基于似然结果,逐个个体计算BBMM
xbb_list <- lapply(seq_along(ctraj_list), function(i) {
  # 取似然值最大对应的sig1
  best_sig1_idx <- which.max(lik_list[[i]]$lik)
  best_sig1 <- lik_list[[i]]$sig1[best_sig1_idx]
  kernelbb(ctraj_list[[i]], sig1 = best_sig1, sig2 = 6, grid = 1500)
})

# 绘制每个个体的BBMM核密度图与95%利用区间
par(mfrow = c(length(xbb_list), 1))
lapply(xbb_list, function(xbb) {
  image(xbb)
  plot(getverticeshr(xbb, 95), add = TRUE, lwd = 2)
})
# 绘制原始轨迹
plot(ctraj)

内容的提问来源于stack exchange,提问作者user5613688

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:38:49