Это мой первый вопрос, пожалуйста, дайте мне знать, если я делаю что-то не так.У нас есть df с двумя переменными, и мы хотим смоделировать EPR (скорость производства яиц) как функцию температуры.
Соответствующие пакеты согласно странице nls:
install.packages("tidyverse")
install.packages("nls.multstart")
install.packages("nlstools")
library(tidyverse)
library(nls.multstart)
library(nlstools)
Соответствующие переменные от большего df:
temp=c(9.2,9.9,12.7,12.8,14.3,14.5,16.3,16.5,18,18,19.6,19.6,19.9,19.9,22,22.4,23.2,23.4,25.3,25.6,27,27.3,28.5,30.3,20.9)
EPR=c(1.5,0,0,0,1.27,0.56,3.08,0.575,2.7,3.09,2,6.3,2,3.76,3.7,1.65,7.1,18.9,7.07,3.77,13.79,0,0,0.47,0)
df<-data.frame(temp,EPR)
Здесь я пишу формулу с пятью параметрамиДля оценки (k1, a, b, k2, c) temp будет значением x.Пока все хорошо.
formula<-function(k1,a,b,k2,c,temp) {
modelEPR<-k1*1/(1+exp(-a*(temp-b)))-k2*exp(c*temp)
return(modelEPR)
}
Вот где я застрял;Я уже использую довольно узкий start_lower и upper, так как теперь я знаю параметры, используя Excel Solver несколько успешно.Значения, которые я получаю с помощью этого метода, получат мне модель, хотя и довольно неточную.Да, я дал старту нижний и верхний гораздо больший диапазон в начале, но это не дало лучших результатов.
fit <- nls_multstart(EPR ~ formula(k1,a,b,k2,c,temp),
data = df,
iter = 100,
start_lower = c(k1 = 14, a = 0.3, b = 20, k2 = 0.02, c = 0.15),
start_upper = c(k1 = 15, a = 0.5, b = 21, k2 = 0.08, c = 0.24),
supp_errors = 'Y',
na.action = na.omit)
fit
Как уже упоминалось, я использовал решатель Excel для успешного создания модели иЯ получил оценки параметров, а затем попытался просто вручную вставить их здесь в R, что делает модель намного лучше.
model<-df %>%
mutate(pred=(14.69/(1+exp(-0.41*(temp-20.52)))-0.05*exp(0.19 *temp))) %>%
ggplot()+
xlab("Temperature (°C)")+
ylab("EPR (Eggs per female per day")+
geom_point(aes(temp,EPR))+
geom_line(aes(temp,pred),col="red")
model
В конечном итоге у меня есть два вопроса;а) Что я делаю не так?Или это просто странные данные?Кажется, лучше работать с Excel ?!б) Как мне кодировать мост между посадкой и модельюfit даст 5 параметров, но как мне вставить их непосредственно в функцию модели?Могу ли я использовать мутацию как-то здесь?
Буду признателен за любую помощь!