【问题标题】:R: investigating singular gradient in non-linear regressionR:研究非线性回归中的奇异梯度
【发布时间】:2017-06-26 15:04:39
【问题描述】:
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]到底在做什么?

【问题讨论】:

    标签: r non-linear-regression singular


    【解决方案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
    

    这是当前评估点的奇点方向。在这种情况下,将 (-2, 1) 的任意倍数添加到 (1, 1) 会得到与 (1, 1) 处的 RHS 值相同的 RHS,因此它在该方向上显然是奇异的。由于 RHS 的线性,在这种情况下比一般情况更简单,但对于非线性目标函数,它与切线空间类似,即无穷小。

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多