【发布时间】:2021-03-08 11:48:38
【问题描述】:
我一直在使用包amt 中的现有函数random_steps。我需要从我的数据中生成适合观察值的值的伽马分布,然后从这些值中采样,为我提供观察到的可能的替代方案。问题是观察值的范围是 0 到 53,而生成的值是 0 到 522。显然,该函数给我的值不仅不可信,而且不可能。
我不想通过源代码 (https://github.com/jmsigner/amt/blob/master/R/random_steps.R) 寻找要修复的东西,所以我希望有人能给我一个逃脱的机会,这样我就可以离开 amt。但是,我无法在其他地方找到解决方案。肯定有一种简单的方法可以使用现有值生成分布,然后从中进行抽样?
这些是在数据(左)中观察到的值的密度图,由random_steps(右)生成。
我的数据集有超过 200 万行,这让我无法准确地展示正在发生的事情。基本上代码如下:
stepTime <- 60
toleranceTime <- 15
tracks <- lapply(split(df, df$name), function(x){
# make animal tracks and resample to consistent times
trk <- mk_track(df, .x=long, .y=lat, .t=timestamp, id = name) %>%
track_resample(rate = minutes(stepTime),tolerance = minutes(toleranceTime))
# burst steps
burst <- steps_by_burst(trk, keep_cols = "start")
# create random steps using fitted gamma and von mises distributions and append
rnd_stps <- burst %>% random_steps(n_control = stepNumber)
}) %>% reduce(rbind)
它会产生 4.03% 的替代值,其中大于最高观察值。
当我按照下面的建议生成一个全新的分布时,我会得到一条非常漂亮的曲线,它完全位于可能值的范围内。 但是,当我从中提取值以创建我的可能值样本以与观察到的值进行比较时,下端的密度非常高,以至于所有采样值都低于 1。我的观察值范围从 0 到 53而我的选择范围从 0 到 1。
关于如何获得更接近现实的分布的任何提示?
非常感谢!
【问题讨论】:
-
采样时值高于 53 的频率如何?您能否发布一个可重现的示例,其中包含观察值和采样值的密度图。
标签: r