【发布时间】:2015-02-19 18:16:48
【问题描述】:
我正在尝试在 R 中找到与 MATLAB 的信任区域反射算法类似的解决方案。之前已经提出过这个问题,但要求作者提供可重复的示例。我无法在那里发表评论,所以唯一的解决方案是发布新问题。这是我的例子:
x <- c(5000,5000,5000,5000,2500,2500,2500,2500,1250,1250,1250,1250,625,625, 625,625,312,312,312,312,156,156,156,156)
y <- c(0.209065186,0.208338898,0.211886104,0.209638321,0.112064803,0.110535275,0.111748670,0.111208841,0.060416469,0.059098975,0.059274827,0.060859512,0.032178730,0.033190833,0.031621743,0.032345817,0.017983939,0.016632180,0.018468540,0.019513489,0.011490089,0.011076365,0.009282322,0.012309134)
由于初始参数值是我尝试使用“nls2”包的核心问题,该包使用“蛮力”算法来找到好的起始参数。即使这样,nls 和 nls.lm 也无法收敛。下面是一些基本代码:
library('nls2'); library('minpack.lm')
fo <- y ~ I(A * (x ^ B) + C)
sA <- seq(-2,1,len=10) # range of parameter values
sB <- seq(-1,1,len=10)
sC <- seq(-1,1,len=10)
st1 <- expand.grid(A=sA,B=sB,C=sC)
mod1 <- nls2(fo,start=st1,algorithm="brute-force")
fit_ <- nls(fo,start=coef(mod1)) # basic nls
# or nls.lm
fit_ <- nlsLM(fo, start=coef(mod1),algorithm = "LM")
MATLAB 制作:
a = 7.593e-05 (6.451e-05, 8.736e-05)
b = 0.9289 (0.9116, 0.9462)
c = 0.002553 (0.001333, 0.003772)
Goodness of fit:
SSE: 2.173e-05
R-square: 0.9998
Adjusted R-square: 0.9998
RMSE: 0.001017
是的,使用这些参数值,R 也产生了解决方案。 问题:如何在不使用matlab的情况下在R中获得这个?
【问题讨论】:
标签: r