关于BBMM中Sig1与Sig2平滑参数设置的技术求助
BBMM参数调试问题:Sig1/Sig2无响应、liker个体曲线一致的排查
我在编写BBMM相关代码时,能生成预期输出,但无法确定Sig1和Sig2的合适平滑参数。使用liker函数时,每个个体生成的曲线完全一致,这显然不符合预期。我尝试调整Sig2数值和Sig1的范围,但参数调整未产生任何变化,请问我忽略了什么?
示例数据:
原代码
#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相关图示:
使用环境: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
相关产品推荐
相关产品推荐

