2014-12-03 72 views
-2

我有我需要R中实现[R implemantion和优化功能的

L = Σ i=1->n (1/β* e^(((µ-yi))/β) - e^(-e^((µ-yi)/β))) 

然后,我必须使用R中一个优化功能找到µβ最大化这个值的函数 功能。

给出了y的数据。

  Y 
1 5.539341 
2 2.607342 
3 2.675443 
4 2.905286 
5 3.657362 
6 5.175831 
7 3.830794 
8 2.664615 
9 5.741146 
10 4.432348 
11 3.326155 
12 2.637661 
13 3.306147 
14 2.840939 
15 3.559279 

我考虑

vraislogn <- 
    function (p,y){ 
    logvrais=log(L) 
    β=p[2] 
    µ=p[1] 
    return(-logvrais)}` 
nlm(vraislogn,p=c(1,1),y=y) 

当我改变:P = C(1,1)对于实施例:P = C(2,3)我在估计值和最小的差我发现的功能是负面的荒谬!

回答

1

为什么找到负值是荒谬的?你的功能可能变得消极。它甚至可能达到非常大的负值。如果存在局部最小值,则可以预期对起始值的敏感性。

y <- unlist(read.table(text="   Y 
1 5.539341 
2 2.607342 
3 2.675443 
4 2.905286 
5 3.657362 
6 5.175831 
7 3.830794 
8 2.664615 
9 5.741146 
10 4.432348 
11 3.326155 
12 2.637661 
13 3.306147 
14 2.840939 
15 3.559279")) 

L <- function(p, y) { 
    sum(1/p[1] * exp((p[2] - y)/p[1]) - exp(-exp((p[2] - y)/p[1]))) 
} 

library(optimx) 
optimx(par = c(1, 1), L, y=y, method=c('Nelder-Mead', 'BFGS', 'CG', 'L-BFGS-B', 'nlm', 
      'nlminb', 'spg', 'ucminf', 'newuoa', 'bobyqa', 'nmkb', 'hjkb', 'Rcgmin')) 
#      p1   p2   value fevals gevals niter convcode kkt1 kkt2 xtimes 
#Nelder-Mead -6.424696e-03 1.213437e+00 -1.797693e+308 359  NA NA  0 NA NA 0.00 
#BFGS  -2.688898e-02 -6.893257e+00 -4.304276e+205 413  5 NA  0 FALSE FALSE 0.02 
#CG   -2.164624e+06 -1.457184e+06 -2.111903e+00 200 101 NA  1 TRUE FALSE 0.00 
#L-BFGS-B  1.020495e-01 4.385857e-01 -1.500000e+01  13  13 NA  0 TRUE FALSE 0.00 
#nlm   -1.282396e-02 -1.191648e+00 -4.752890e+236  NA  NA  6  0 FALSE FALSE 0.00 
#nlminb  8.706765e-02 5.051164e-01 -1.500000e+01  16  57 15  0 TRUE FALSE 0.00 
#spg   1.000000e+00 1.000000e+00 -1.201022e+01  1  NA  1  3 FALSE FALSE 0.04 
#ucminf  -5.526900e-03 2.211903e+00 -3.797103e+279  20  20 NA  0 FALSE NA 0.00 
#newuoa     NA   NA 8.988466e+307  NA  NA NA  9999 NA NA 0.00 
#bobyqa  4.812801e-02 7.576366e-01 -1.500000e+01 121  NA NA  0 TRUE TRUE 0.00 
#nmkb     NA   NA 8.988466e+307  NA  NA NA  9999 NA NA 0.00 
#hjkb   1.000000e+00 1.000000e+00 -1.201022e+01  1  NA  0  9999 NA NA 0.00 
#Rcgmin     NA   NA 8.988466e+307  NA  NA NA  9999 NA NA 0.00 

让我们来约束参数为正值:

optimx(par = c(1, 1), L, y=y, 
     method=c('L-BFGS-B', 'nlminb', 'bobyqa'), 
     lower=c(0,0)) 
#     p1  p2 value fevals gevals niter convcode kkt1 kkt2 xtimes 
#L-BFGS-B 0.11115122 0.2651588 -15  16  16 NA  0 TRUE FALSE  0 
#nlminb 0.08866507 0.5038754 -15  15  54 14  0 TRUE FALSE  0 
#bobyqa 0.05325943 0.7253612 -15 117  NA NA  0 TRUE FALSE  0 

都能跟得上。最低限度仍然是负面的。你的功能可能有错误吗?

+0

当我从函数中提取总和时,我确实找到了答案。 – 2014-12-04 21:50:45