R中的最小二乘优化(矩阵)

ben*_*nny 0 optimization regression r least-squares

昨天我问了一个问题,关于R中最小二乘优化,它原来lm功能是我一直在寻找的东西.

另一方面,现在我有一个其他最小二乘优化问题,我想知道是否lm也可以解决这个问题,或者如果没有,如何在R中处理它.

我有固定的矩阵B(维数为nxm)和V(维数为nxn),我正在寻找一个m- long向量u这样

       sum( ( V - ( B %*% diag(u) %*% t(B)) )^2 )
Run Code Online (Sandbox Code Playgroud)

最小化.

G. *_*eck 6

1)lm.fit使用这个事实

vec(AXA')=(A⊗A)vec(X)

所以:

k <- ncol(A)
AA1 <- kronecker(A, A)[, c(diag(k)) == 1]
lm.fit(AA1, c(V))
Run Code Online (Sandbox Code Playgroud)

这是一个自包含的例子:

# test data
set.seed(123)
A <- as.matrix(BOD)
u <- 1:2
V <- A %*% diag(u) %*% t(A) + rnorm(36)

# solve
k <- ncol(A)
AA1 <- kronecker(A, A)[, c(diag(k)) == 1]
fm1 <- lm.fit(AA1, c(V))
Run Code Online (Sandbox Code Playgroud)

大致给出原始系数1:2:

> coef(fm1)
      x1       x2 
1.011206 1.999575 
Run Code Online (Sandbox Code Playgroud)

2)nls 我们可以nls像这样交替使用:

fm2 <- nls(c(V) ~ c(A %*% diag(x) %*% t(A)), start = list(x = numeric(k)))
Run Code Online (Sandbox Code Playgroud)

为上面的例子给出以下内容:

> fm2
Nonlinear regression model
  model: c(V) ~ c(A %*% diag(x) %*% t(A))
   data: parent.frame()
   x1    x2 
1.011 2.000 
 residual sum-of-squares: 30.52

Number of iterations to convergence: 1 
Achieved convergence tolerance: 1.741e-09
Run Code Online (Sandbox Code Playgroud)

更新:更正和第二个解决方案.