3

我做了一个函数,它返回 (X'X)^-1 的确定项。我需要在我创建的函数上使用 optim 函数,以便为我提供 X 矩阵的最佳值。我在让 optim 工作时遇到问题,但我的功能运行良好。

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 尝试过的一些变体,但都没有成功;

optim((x, 3, 10), fr)
optim(fn = fr, par = c(x=x, nc=3, nr=10))
optim(c(x,3,10), fr)

我收到不同的错误,有时是因为 optim 中的 x 后面有一个逗号,有时是 .Internal 关于 nrow 丢失的错误。

4

1 回答 1

1

您可以将参数传递给frto 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是否要设置上限和下限。

于 2013-04-10T12:06:05.613 回答