-1

我一直在使用 R 包 optimx 进行统计模型估计。我的代码运行良好,我得到了所有 optimx 汇总结果(参数估计、函数值、收敛代码等)。但是,我还需要这些 optimx 结果的 Hessian 矩阵。我在 optimx 文档、R 站点和论坛中寻求帮助,但没有成功。有人能帮我吗?先感谢您!!!

这是一个示例(不是统计模型,但足以说明我的意思):

library(optimx) 

fr <- function(x) {
    ## Rosenbrock Banana function 
    x1 <- x[1] 
    x2 <- x[2] 
    100 * (x2 - x1 * x1)^2 + (1 - x1)^2 
    }

grr <- function(x) { 
    ## Gradient of ’fr’ 
    x1 <- x[1] 
    x2 <- x[2] 
    c(-400 * x1 * (x2 - x1 * x1) - 2 * (1 - x1), 200 * (x2 - x1 * x1)) 
    } 

ans1<-optimx(c(-1.2,1), fr, grr)
4

1 回答 1

3

这一切都在帮助页面上。请参阅?optimx“值”标题下(在 之后xtimes)。

返回的答案对象的属性“详细信息”包含关于梯度(ngend)和 Hessian 矩阵(nhatend)在假定最优时的信息,以及 Hessian 的特征值(hev),以及消息,如果有的话,由每个方法的计算返回,它包含在每行详细信息中。如果 optimx() 返回的对象是 ans,则通过构造 attr(ans, "details") 访问

该对象是一个基于列表的矩阵,因此如果 ans 是 optimx 的输出,则 attr(ans, "details")[1, ] 给出第一行并且 attr(ans,"details")["Nelder-Mead" , ] 给出 Nelder-Mead 行。已成功或已通过 save.failures=TRUE 强制保存的每个方法都有一行。

attr(ans1, "details")["Nelder-Mead", ]
$method
[1] "Nelder-Mead"

$ngatend
[1]  0.006260098 -0.002869164

$nhatend
          [,1]      [,2]
[1,]  802.4220 -400.1041
[2,] -400.1041  200.0000

$hev
[1] 1002.0216761    0.4003383

$message
[1] "none"

仅获取两种使用方法的 Hessians(Nelder-Mead 和 BFGS)

attr(ans1, "details")[ ,"nhatend"]
$`Nelder-Mead`
          [,1]      [,2]
[1,]  802.4220 -400.1041
[2,] -400.1041  200.0000

$BFGS
     [,1] [,2]
[1,]  802 -400
[2,] -400  200

只为 Nelder-Mead 优化获取 Hessian:

attr(ans1, "details")["Nelder-Mead" ,"nhatend"]
[[1]]
          [,1]      [,2]
[1,]  802.4220 -400.1041
[2,] -400.1041  200.0000
于 2015-05-18T04:55:05.753 回答