首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:研究非线性回归中的奇异梯度

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

Stack Overflow用户
提问于 2017-06-26 23:04:40
回答 1查看 177关注 0票数 1
代码语言:javascript
复制
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]到底在做什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 04:30:31

暴力破解没有收敛的概念。它只是根据给定的一个或多个起始值计算目标函数,并根据特定参数返回一个或多个nls对象。详情请参见?nls2

通常,它用于获取输入到nls或其他优化函数的初始值,用于调查奇异值(因为nls会阻塞奇异值,而nls2不会),或者只是在已知值处评估nls目标函数。

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

代码语言:javascript
复制
> coef(xx)
a b 
1 1 

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

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

代码语言:javascript
复制
s <- sv(xx$m$Rmat)
s$d
## [1] 6.708204 0.000000

它对应于特征向量

代码语言:javascript
复制
v2 <- s$v[, 2]; v2
## [1] -0.8944272  0.4472136

由于特征向量只能确定到标量的倍数,这与:

代码语言:javascript
复制
v2/v2[2]
## [1] -2  1

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44762753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档