Optim()使参数在R中彼此相等

时间:2018-11-16 04:16:13

标签: r optimization

我有一个矩阵,其中我想估算4个值:

M = [ var1    corr    0]
    [ corr    var2    0]
    [  0       0      0]

基本上,矩阵在位置M [1,2]和M [2,1]上具有两个方差和相关性,它们应该相等。为此,我编写了如下的optim函数:

M <- matrix(c(NA,NA,0,NA,NA,0,0,0,0),3,3,byrow=TRUE)

objf <- function(pars, model, estimate = TRUE) {

    model$M[is.na(model$M)] <- pars[1:4]

    if (estimate) {
        -logLik(model)
    } else {
         model
    }
}

但是,当我运行代码时,两个相关值的输出是不同的,所以我想知道是否有更好的方式编写代码,使我有M [1,2] = M [2,1 ]。我认为使用model$M[is.na(model$M)]行是问题,但是我不确定如何更好地编写代码,因此,如果有人可以帮助我,我将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将目标函数更改为仅具有3个参数并替换

model$M[is.na(model$M)] <- pars[1:4]

使用

model$M[is.na(model$M)] <- pars[c(1,2,2,3)]

插图

M <- matrix(c(NA,NA,0,
              NA,NA,0,
              0,  0,0), 3, 3, byrow=TRUE)
pars <- 1:3
M[is.na(M)] <- pars[c(1,2,2,3)]
M
     [,1] [,2] [,3]
[1,]    1    2    0
[2,]    2    3    0
[3,]    0    0    0