Лучше использовать dput
для предоставления данных, поскольку он быстрее попадает в R и сохраняет типы данных, такие как целое число и коэффициент:
dat1 <- structure(list(time = c(3L, 6L, 9L, 12L, 15L, 21L, 27L, 33L,
39L, 48L, 60L, 72L, 96L), Volume = c(12L, 25L, 38L, 53L, 73L,
108L, 136L, 160L, 180L, 202L, 222L, 241L, 255L)), class = "data.frame",
row.names = c(NA, -13L))
Вот данные и кривая пытаясь соответствовать вашим начальным значениям:
plot(Volume~time, dat1)
Vi <- 3; Vf <- 255; u <- 6; n <- -0.5
Vol.pred <- (Vi*Vf)/((Vi^n) + ((Vf^n-(Vi^n))*exp(-u*dat1$time)))^(1/n)
lines(dat1$time, Vol.pred, col="red")
Вы можете увидеть, что предсказанная линия находится совсем рядом с данными. Как указал @Maurits Evers, неясно, подходит ли кривая Ричарда, но вы можете попробовать изменить начальные значения, чтобы приблизить что-то, например, изменив u
на .05:
lines(dat1$time, Vol.pred, col="blue")
, что дает нам начальные значения, которые будут работать:
Richards <- nls(
Volume ~ (Vi*Vf)/((Vi^n) + ((Vf^n-(Vi^n))*exp(-u*time)))^(1/n),
data=dat1,
start=c(Vi=3, Vf=255, u=.05, n=-0.5))
lines(dat1$time, predict(Richards), col="darkgreen")
![NLS fit](https://i.stack.imgur.com/AhrmT.png)