代码之家  ›  专栏  ›  技术社区  ›  ThePlowKing

Optim()使参数在R中相等

  •  0
  • ThePlowKing  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Nairolf    7 年前

    您可以将目标函数更改为只有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