我有一个矩阵,其中我想估算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)]
行是问题,但是我不确定如何更好地编写代码,因此,如果有人可以帮助我,我将不胜感激,谢谢!
答案 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