【发布时间】:2018-05-10 16:51:27
【问题描述】:
我有以下 gompertz 参数
A <- 100 # A is always 100
mu <- 35
lambda <- 265 # day of the year. Also the start day
我可以使用上面的参数来运行 gompertz,使用下面的公式
grofit::gompertz(time,A,mu,lambda)
时间基本上是lambda:end.day 的向量。
现在的问题是我知道 lambda(开始日)但不知道结束日。我想在它达到 100 时找到结束日期。
例如,在上面的示例中,如果我将 lambda:end.day 提供为 265:270,我不会达到 100。
time <- 265:270
x <- round(grofit::gompertz(time,A,mu,lambda),2)
x
6.60 35.00 66.67 85.51 94.13 97.69
通过多次试验,我知道如果我给一个265:277的向量,我会达到100。
time <- 265:277
x <- round(grofit::gompertz(time,A,mu,lambda),2)
x
[1] 6.60 35.00 66.67 85.51 94.13 97.69
[7] 99.10 99.65 99.87 99.95 99.98 99.99
[13] 100.00
我有具有 lambda(与开始日相同)和 mu 的数据框。
df <- data.frame(id = c(1,1,2,2), year = c(1981,1982,1981,1982), mu= c(35,32,33,28), lambda = c(275,278,284,296))
对于每个 id 和年份,我想要两列:一列称为 day first value,其等于 lamba,第二列告诉我 x 每天的值,直到它达到 100(结束日)。
如何为每个 id 和 year 实现上述等式,以便我有一个类似这样的数据框:
id year day x
1 1981 275 6.6
1 1981 276 35
1 1981 277 66.67
1 1981 278 85.51
1 1981 279 94.13
1 1981 280 97.69
1 1981 281 99.1
1 1981 282 99.65
1 1981 283 99.87
1 1981 284 99.95
1 1981 285 99.98
1 1981 286 99.99
1 1981 287 100
. . . .
. . . .
2 1982 296 8
2 1982 297 33
2 1982 298 45
2 1982 299 63
2 1982 300 61
2 1982 301 73
2 1982 302 81
2 1982 303 91
2 1982 304 94
2 1982 305 98
2 1982 306 99
2 1982 307 100
【问题讨论】:
-
我们应该提供哪些值作为
gompertz()的time参数?只是265:277? -
我不明白您期望
day列的来源。 -
让我编辑问题
标签: r dplyr data.table