我试图最大化一个非常简单的可能性.在参数上未指定F的分布的意义上,这是非参数似然性.相反,对于每个观察到的xi,f(xi)=pi因此log(Likelihood)=Sum(log(f(xi)))=Sum(log(pi)).
我试图最大化的函数是:sum(log(pi))+lamda(sum(pi-1))
where sum(pi)=1(即这是一个约束最大化问题,可以使用拉格朗日乘数来解决).
这个问题的答案是数据点的数量pi=1/n在哪里n.但是,optimx似乎没有给出这个解决方案.有没有人有任何想法.如果n=2,我正在最大化的功能是log(p1)+log(p2)+lamda(p1+p2-1).
这是我的代码和R的输出:
n=2
log.like=function(p)
{
lamda=p[n+1]
ll=0
for(i in 1:n){
temp = log(p[i])+lamda*p[i]-lamda/(n)
ll=ll+temp
}
return(-ll)
}
mle = optimx(c(0.48,.52,-1.5),
log.like,
lower=c(rep(0.1,2),-3),
upper=c(rep(.9,2),-1),
method = "L-BFGS-B")
> mle
par fvalues method fns grs itns conv KKT1 KKT2 xtimes
1 0.9, 0.9, -1.0 1.010721 L-BFGS-B 8 8 NULL 0 FALSE NA 0
Run Code Online (Sandbox Code Playgroud)
等式的解决方案n=2是p1=p2=1/2和lamda=-2.但是,使用optimx时我没有得到这个.任何的想法?
我在R中有一个简单的通量模型.它归结为两个微分方程,模拟模型中的两个状态变量,我们称之为A和B.它们被计算为四分量通量flux1-flux4,5个参数p1-p5和第六个参数的简单差分方程of_interest,其可以取0-1之间的值.
parameters<- c(p1=0.028, p2=0.3, p3=0.5, p4=0.0002, p5=0.001, of_interest=0.1)
state <- c(A=28, B=1.4)
model<-function(t,state,parameters){
with(as.list(c(state,parameters)),{
#fluxes
flux1 = (1-of_interest) * p1*(B / (p2 + B))*p3
flux2 = p4* A #microbial death
flux3 = of_interest * p1*(B / (p2 + B))*p3
flux4 = p5* B
#differential equations of component fluxes
dAdt<- flux1 - flux2
dBdt<- flux3 - flux4
list(c(dAdt,dBdt))
})
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数来取的导数dAdt相对于of_interest,派生方程设置为0,然后重新排列并求解的值of_interest.这将是of_interest最大化函数的参数的值dAdt.
到目前为止,我已经能够在稳定状态下解决模型,跨越可能的值 …