我已经创建了一个返回(X'X)^ - 1的确定函数的函数。我需要在我创建的函数上使用optim函数来为我提供X矩阵的最佳值。我在使用优化工作方面遇到了问题,但我的功能正常。
fr <- function(x,nc,nr) {
Xd <- matrix(c(rep(1,nr),x),nrow=nr,ncol=nc) #### Design matrix
det(solve((t(Xd)%*%Xd))) #### det(FIM)
}
我已尝试将x作为矢量和矩阵;
x <-
matrix(c(0.1,0.2,0.3,0.2,0.1,0,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2),nro w = 10, ncol = 2)
x <- c(0.1,0.2,0.3,0.2,0.1,0,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2,0.1,0.2)
这些是我用优化尝试过的一些变化,都没有成功;
optim((x, 3, 10), fr)
optim(fn = fr, par = c(x=x, nc=3, nr=10))
optim(c(x,3,10), fr)
我得到了不同的错误,有时候在优秀的x之后有一个逗号,有时在.Internal中有关于nrow缺失的错误。
答案 0 :(得分:1)
您可以将fr
的参数传递给optim
:
opt <- optim(fn=fr, x, nc=3, nr=10)
这给出了
> opt$par
[,1] [,2]
[1,] 0.06933853 -1.0888672
[2,] 0.07796119 1.8288789
[3,] 2.09366322 -1.3050871
[4,] 1.40676030 3.3006266
[5,] 1.04102733 -1.1048119
[6,] -5.84413537 1.6741804
[7,] -4.75578972 -0.6484606
[8,] 1.23037198 2.4842715
[9,] 0.10477158 1.4135113
[10,] 2.14145939 -1.4333241
比较优化前后fr
的函数值:
> fr(x,3,10)
[1] 62.5
> fr(opt$par, 3, 10)
[1] 4.963814e-05
这有帮助吗?
如果您想设置上限和下限,可能需要检查?optim
。