R中的最小二乘优化(矩阵)
Least square optimization (of matrices) in R
昨天我问了一个 about least square optimization in R and it ,lm
函数正是我要找的东西。
另一方面,现在我有另一个最小二乘优化问题,我想知道 lm
是否也可以解决这个问题,或者如果不能,如何在 R 中处理它。
我有固定矩阵 B(n x m 维)和 V(n x n 维),我正在寻找一个 m-长向量u使得
sum( ( V - ( B %*% diag(u) %*% t(B)) )^2 )
已最小化。
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))
这是一个独立的例子:
# 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))
粗略给出原始系数1:2 :
> coef(fm1)
x1 x2
1.011206 1.999575
2) nls 我们可以像这样交替使用 nls
:
fm2 <- nls(c(V) ~ c(A %*% diag(x) %*% t(A)), start = list(x = numeric(k)))
为上面的例子给出以下内容:
> 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
更新:更正和第二个解决方案。
昨天我问了一个 lm
函数正是我要找的东西。
另一方面,现在我有另一个最小二乘优化问题,我想知道 lm
是否也可以解决这个问题,或者如果不能,如何在 R 中处理它。
我有固定矩阵 B(n x m 维)和 V(n x n 维),我正在寻找一个 m-长向量u使得
sum( ( V - ( B %*% diag(u) %*% t(B)) )^2 )
已最小化。
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))
这是一个独立的例子:
# 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))
粗略给出原始系数1:2 :
> coef(fm1)
x1 x2
1.011206 1.999575
2) nls 我们可以像这样交替使用 nls
:
fm2 <- nls(c(V) ~ c(A %*% diag(x) %*% t(A)), start = list(x = numeric(k)))
为上面的例子给出以下内容:
> 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
更新:更正和第二个解决方案。