1
library(nls2)
# Investigate singular gradient.
# Note that this cannot be done with nls since the singular gradient at
# the initial conditions would stop it with an error.
DF1 <- data.frame(y=1:9, one=rep(1,9))
xx <- nls2(y~(a+2*b)*one, DF1, start = c(a=1, b=1), algorithm = "brute-force")
svd(xx$m$Rmat())[-2]

我正在玩这个nls2包,它确定非线性回归的非线性最小二乘估计。在文档中,其中一个示例(如上所示)指出它正在研究奇异梯度。我看到这xx是一个nls没有参数估计的对象。这是否意味着算法没有收敛?为什么是这样?究竟在svd(xx$m$Rmat())[-2]做什么?

4

1 回答 1

1

蛮力没有收敛的概念。它只是在初始值或给定值处评估目标函数,并根据特定参数返回一个或多个 nls 对象。详情请参阅?nls2

通常它用于获取输入到 nls 或其他优化函数的起始值,用于研究奇异值(因为nls阻塞但nls2没有)或简单地评估nls已知值的目标函数。

由于问题中复制的文档中的示例为 nls2 提供了一个起始值,因此它以该单个值评估目标并返回。参数估计只是评估它的参数值,即起始值。

> coef(xx)
a b 
1 1 

xx$m$Rmat()是一个矩阵,如果问题在计算点处是奇异的,则其奇异值向量至少包含一个零。R 函数svd(...)返回一个列表,其中分量 d 是奇异值向量,u 和 v 是接下来的两个分量,其中 v 是特征向量。我们在这里对 u 不感兴趣,所以使用 [-2] 来省略它。

对于这种特殊情况,我们看到第二个奇异值为零:

s <- sv(xx$m$Rmat)
s$d
## [1] 6.708204 0.000000

它对应于特征向量

v2 <- s$v[, 2]; v2
## [1] -0.8944272  0.4472136

并且由于特征向量仅被确定为与以下相同的标量倍数:

v2/v2[2]
## [1] -2  1

which is the direction of singularity at the current point of evaluation. In this case adding any multiple of (-2, 1) to (1, 1) gives a RHS that is identical in value to the RHS at (1, 1) so it is clearly singular in that direction. It is simpler in this case than the general case due to linearity of the RHS but it works analogously relative to the tangent space, i.e. infinitesmally, for nonlinear objective functions.

于 2017-06-26T20:30:30.663 回答