Итак, я пытался оптимизировать отношения Михаэлиса-Ментена с помощью распределения гамма-ошибок, чтобы смоделировать среднее значение некоторых данных, которые я собрал. Однако, как бы я ни оптимизировал функцию, самый низкий AI C, который я получаю, - это параметры, которые даже близко не подходят к данным. Можно ли как-нибудь решить эту проблему?
Вот мой код:
Сначала я создаю функцию максимального правдоподобия:
MicNLL <- function(a,b){
#a=150.6727
#b=319.7007 optim val
top <- a*x
bot <- b+x
Mic <- top/bot
nll <- -sum(dgamma(y, shape=(Mic^2/var(x)), scale=(var(x)/Mic), log=TRUE))
return(nll)
}
Затем я написал функцию оптимизации, используя функция mle2()
в пакете bbmle
:
MN <- mle2(minuslogl = MicNLL, parameters=list(a~Treatment, b~Treatment), start=list(a=100,b=260), data=list(x=NSug3$VolpulT, y=NSug3$SugarpugT), control=list(maxit=1e4), method="SANN", hessian=T)
MN
AICMN <- (2*2)-(2*logLik(MN))
AICMN
Хотя параметры a = 100 & b = 260, которые соответствуют глазу, хорошо бы соответствовали моим данным, обычно они оптимизируют параметры до a = 242 & b = 182, что дает
Michealis <- function(a, b, x){
top <- a*x
bot <- b+x
Mic <- top/bot
return(Mic)
}
ggplot(NSug3, aes(x=VolpulT, y=SugarpugT))+
geom_point(stat="identity", size=0.8)+
theme_classic()+
ggtitle("help")+
ylab("Sugar concentration")+
xlab("Volume per Extra floral nectary")+
stat_function(fun= Michealis, args=c(a=100, b=260), colour="Orange", size=0.725)+
stat_function(fun= Michealis, args=c(a=MN@coef[[1]], b=MN@coef[[2]]), colour="Red", size=0.725)
Короче говоря, как я могу убедиться, что моя оптимизированная модель действительно работает с моими данными?