gpt4 book ai didi

winbugs - 在 OpenBUGS 中的多次运行中跟踪具有特定值的模拟时间序列的交点

转载 作者:行者123 更新时间:2023-12-02 01:44:46 24 4
gpt4 key购买 nike

我有一个 OpenBUGS 模型,它使用随着时间的推移 (x.values) 观察到的数据 (y.values) 来模拟多次运行 (~100000),并对每次运行的 y 值 (y.est) 进行新的估计。观察到的数据从最大值明显下降。

我想跟踪每次运行从最大丰度 (T.max) 下降到最大丰度的 10% (T.10%) 所需的时间长度。由于最大丰度值随运行而变化,因此最大值的 10% 也会因运行而异,因此 T.10% 会因运行而异。

设置一个参数来存储 T.max 非常简单,每次运行都不会发生变化,因为最大值远大于任何其他值。

我想不通的是如何存储 y-est 值和 T.10% 的交集。

我的第一次尝试是使用 step() 函数确定每个 y-est 值是高于还是低于 T.10%:

above.below[i] <- step(T.10% - y.est[i])

这会为每个 y.est 值(例如 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 等等)如果每次运行只是从最大值连续下降到最小值,我可以使用 rank() 函数来确定有多少 above.below[i] 值出现在 T.10% 以上:

decline.length <- rank(above.below[1:N], 0)

在此示例中,decline.length 将等于上面字符串中“0”的数量,即 9。不幸的是,y-est 值偶尔会在下降后显示增长期低于 T.10%。因此,above.below 值的向量可以如下所示:0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 等等。因此,decline.length 将给定向量中的后续 0,等于 14 而不是 9。

我想做的是弄清楚如何在第一个“1”之前的 above.below 中只存储“0”的数量; above.below[1:10] 而不是 above.below[1:N]。不幸的是,它并不总是出现第一个“1”的第 10 个时间步长,因此我需要使 above.below 范围的最大范围在模拟期间因运行而异。

我正在努力在 OpenBUGS 中完成此操作,因为它是一种非过程语言,但我认为它可以完成,我只是不知道这样做的诀窍。我希望更熟悉 step()rank() 函数的人可以提供一些专家建议。

非常感谢任何指导!

最佳答案

提供给我的两个解决方案:

1) 计算到每个时间步的累计和:

for (i in 1:N){
above.below[i] <- step(T.10% - y.est[i])
cum.above.below[i] <- sum(above.below[1:i])
}

decline.length <- rank(cum.above.below[1:N], 0)

2)直接计算每一年是高于还是低于阈值,不带1和0:

for(i in 1:N){
above.below[i] <- step(T.10% - y.est[i])
dummy[i] <- above.below[i] * i + (1 - above.below[i]) * (N+1)
}

decline.length <- ranked(dummy[], 1)

所以 dummyiabove.below 是 1 时 dummy 是 N+1 当 above.below 为 0.

关于winbugs - 在 OpenBUGS 中的多次运行中跟踪具有特定值的模拟时间序列的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com