R:研究非线性回归中的奇异梯度

时间:2017-06-26 15:04:40

标签: r non-linear-regression singular

public IHttpActionResult Get(Guid? guid) {

    if(!guid.HasValue || guid.Value == Guid.Empty)
        // return your error here

    else
    //...
}

我正在使用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在做什么?

1 个答案:

答案 0 :(得分:1)

蛮力没有收敛的概念。它只是根据给定的起始值或值来计算目标函数,并根据特定的参数返回一个或多个nls对象。有关详细信息,请参阅?nls2

通常它用于获取输入到nls或其他优化函数的起始值,用于调查奇异值(因为nls扼流圈而nls2没有)或仅仅评估{{1已知值的目标函数。

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

nls

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

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

svd(...)

并且它对应于特征向量

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

并且因为特征向量仅被确定为与标量倍数相同:

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

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