我有一个需要在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)时,我发现估计值和最小函数的差异是否为什么是荒谬的!
答案 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
不。最低限度仍为负数。你的职能会出错吗?