R:研究非线性回归中的奇异梯度
R: investigating singular gradient in non-linear regression
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]
到底在做什么?
没有暴力收敛的概念。它只是根据给定的起始值或给定值计算 objective 函数,并根据特定参数计算 returns 一个或多个 nls 对象。有关详细信息,请参阅 ?nls2
。
通常它用于获取输入到 nls 或其他优化函数的起始值,用于研究奇异值(因为 nls
阻塞它们但 nls2
不阻塞)或简单地评估 nls
objective 以已知值运行。
由于问题中复制的文档中的示例为 nls2 提供了一个起始值,因此它在该单个值处评估了 objective 并返回。参数估计值只是对其进行评估的参数值,即起始值。
> coef(xx)
a b
1 1
xx$m$Rmat()
是一个矩阵,如果问题在计算点处是奇异的,则其奇异值向量至少包含一个零。 R 函数 svd(...)
returns 一个列表,其中分量 d 是奇异值向量,u 和 v 是接下来的两个分量,v 是特征向量。我们这里对你不感兴趣,所以用[-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
这是当前评估点的奇点方向。在这种情况下,将 (-2, 1) 的任意倍数添加到 (1, 1) 得到的 RHS 的值与 (1, 1) 处的 RHS 相同,因此它在该方向上显然是奇异的。由于 RHS 的线性,在这种情况下它比一般情况更简单,但它相对于切线 space 的工作方式类似,即无限小,对于非线性 objective 函数。
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]
到底在做什么?
没有暴力收敛的概念。它只是根据给定的起始值或给定值计算 objective 函数,并根据特定参数计算 returns 一个或多个 nls 对象。有关详细信息,请参阅 ?nls2
。
通常它用于获取输入到 nls 或其他优化函数的起始值,用于研究奇异值(因为 nls
阻塞它们但 nls2
不阻塞)或简单地评估 nls
objective 以已知值运行。
由于问题中复制的文档中的示例为 nls2 提供了一个起始值,因此它在该单个值处评估了 objective 并返回。参数估计值只是对其进行评估的参数值,即起始值。
> coef(xx)
a b
1 1
xx$m$Rmat()
是一个矩阵,如果问题在计算点处是奇异的,则其奇异值向量至少包含一个零。 R 函数 svd(...)
returns 一个列表,其中分量 d 是奇异值向量,u 和 v 是接下来的两个分量,v 是特征向量。我们这里对你不感兴趣,所以用[-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
这是当前评估点的奇点方向。在这种情况下,将 (-2, 1) 的任意倍数添加到 (1, 1) 得到的 RHS 的值与 (1, 1) 处的 RHS 相同,因此它在该方向上显然是奇异的。由于 RHS 的线性,在这种情况下它比一般情况更简单,但它相对于切线 space 的工作方式类似,即无限小,对于非线性 objective 函数。