2015-08-14 2 views
-1

У меня есть данные о трех кумулятивных подсчетов численности рыб, которые выглядят так:Накопительное кривая Изобилие

Mins Cumulative.1 Cumulative.2 Cumulative.3 
0 0 0 0 
5 NA 58 60 
10 43 84 84 
15 NA 121 96 
20 63 128 101 
25 NA 136 102 
30 70 145 103 

Я пытаюсь построить их (не обязательно на том же графике) и подходят кривые наилучшего для них. Я знаю, что мне нужна кривая, которая выравнивается, то есть логарифмическая, но она не позволит мне соответствовать ей, потому что у меня есть (0,0) значения, но также x не является измеряемой величиной, поэтому это не работает.

Как я могу поместить кривую, а также узнать, когда она выравнивается? . (Т.е. работать наименьшее время, необходимое, чтобы получить всю рыбу (или по крайней мере хорошее представление населения

ответ

0

Вы можете использовать модель насыщения

Вот пример кода с комментариями:

df <- read.table(header = TRUE, text = 'Mins Cumulative.1 Cumulative.2 Cumulative.3 
0 0 0 0 
5 NA 58 60 
10 43 84 84 
15 NA 121 96 
20 63 128 101 
25 NA 136 102 
30 70 145 103') 
plot(Cumulative.3 ~ Mins, data = df) 

# fit saturation model 
mod <- nls(Cumulative.3 ~ a*Mins/(Mins + b), data = df, start = list(a = 100, b = 5)) 
summary(mod) 
# plot model 
plot(Cumulative.3 ~ Mins, data = df) 
pdat <- data.frame(Mins = seq(min(df$Mins), max(df$Mins), length.out = 1000)) 
pdat$fit <- predict(mod, newdata = pdat) 
plot(Cumulative.3 ~ Mins, data = df, ylim = c(0, 125)) 
lines(pdat$Mins, pdat$fit, col = 'darkred', lwd = 2) 
# a = saturation level 
abline(h = mod$m$getPars()[1], lty = 'dotted') 
# b = Mins till 1/2 saturaion level 
abline(h = mod$m$getPars()[1]/2, lty = 'dotted') 
abline(v = mod$m$getPars()[2], lty = 'dotted') 

# Mins till 80% of saturation level is reached: 
m = mod$m$getPars()[2]* 0.8/(1-0.8) 
m 
abline(h = 0.8*mod$m$getPars()[1]) 
abline(v = m) 

enter image description here

+0

Это блестяще, спасибо – dolphins218