У меня есть следующие параметры 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
.
Теперь проблема в том, что я знаю лямбду (день начала), но не день окончания. Я хочу найти последний день, когда он достигнет 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
У меня есть датафрейм с лямбдой (такой же, как день начала) и 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))
Для каждого идентификатора и года мне нужны два столбца: один столбец с именем день, первое значение которого равно lamba, и второй столбец, в котором указывается значение x для каждого дня, пока оно не достигнет 100 (конечный день).
Как реализовать вышеприведенное уравнение для каждого идентификатора и года, чтобы у меня был кадр данных примерно так:
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