R中用于D-最优性的optim函数

3

我已经编写了一个函数,用于返回(X'X)^-1的行列式。我需要在我创建的函数上使用优化函数,以便为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实现的一些变体,但都没有成功;

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参数。

你的优化问题没有解决方案:如果你将 x 乘以某个数 A,那么 fr(x,3,10) 将会被乘以 A^-4。如果你选择足够大的 A,目标可以被缩小到任意程度。你可能对 x 有一些约束条件,但这些条件在问题中被省略了。 - Vincent Zoonekynd
1个回答

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.


这确实有帮助。非常感谢,否则我会为此苦思冥想数小时。非常感激。 - user2265910

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接