R实现和优化功能

时间:2014-12-03 16:19:42

标签: r optimization statistics

我有一个需要在R

中实现的功能
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 个答案:

答案 0 :(得分: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

不。最低限度仍为负数。你的职能会出错吗?