【发布时间】:2017-06-28 22:29:46
【问题描述】:
我正在使用 minpack.lm 包运行非线性最小二乘法。
但是,对于数据中的每个组,我希望优化(最小化)拟合参数,例如类似于 Python 的 minimize 函数。
minimize() 函数是 Minimizer 的包装器,用于运行 优化问题。它需要一个目标函数(函数 计算要最小化的数组),一个参数对象,和 几个可选参数。
我之所以需要这个,是因为我想根据得到的拟合参数优化拟合函数,找到可以拟合数据中两个组的全局拟合参数。
这是我目前的适应群体的方法,
df <- data.frame(y=c(replicate(2,c(rnorm(10,0.18,0.01), rnorm(10,0.17,0.01))),
c(replicate(2,c(rnorm(10,0.27,0.01), rnorm(10,0.26,0.01))))),
DVD=c(replicate(4,c(rnorm(10,60,2),rnorm(10,80,2)))),
gr = rep(seq(1,2),each=40),logic=rep(c(1,0),each=40))
这些组的拟合方程为
fitt <- function(data) {
fit <- nlsLM(y~pi*label2*(DVD/2+U1)^2,
data=data,start=c(label2=1,U1=4),trace=T,control = nls.lm.control(maxiter=130))
}
library(minpack.lm)
library(plyr) # will help to fit in groups
fit <- dlply(df, c('gr'), .fun = fitt) #,"Die" only grouped by Waferr
> fit
$`1`
Nonlinear regression model
model: y ~ pi * label2 * (DVD/2 + U1)^2
data: data
label2 U1
2.005e-05 1.630e+03
$`2`
label2 U1
2.654 -35.104
我需要知道是否有任何函数可以优化平方和以获得最适合这两个组的情况。 我们可能会说您已经拥有作为残差平方和的最佳拟合参数,但我知道 minimizer 可以做到这一点,但我没有找到任何类似的例子,我们可以在 R 中做到这一点。
ps。我把数字和拟合线编好了。
【问题讨论】:
-
我认为
?optim相当于Python的minimize。 optim 的作者推荐optimx包进行了很好的改进。 -
@Gregor 我明白了。很抱歉让你们烦了。我只是被困住了,在这个问题上需要真正的帮助!
-
@Gregor 我从未听说过
optimx。我快速浏览了 stackoverflow,但似乎没有用于分组数据的 optimx 方法。 -
optim 和 optimx 都最小化任意函数。我认为您需要澄清“一起优化这两个拟合参数”的含义 - 您是否希望在组之间具有相同的某些参数?您希望您的结果与单独拟合组有何不同?我认为如果你正确指定你的模型,你可能可以用
nls做你想做的事... -
@Gregor 我希望 nls 能做到这一点。所以我不会拼命寻找另一种解决方案。问题是,当我使用 python 进行拟合时,我可以为具有单个拟合系数的两个组获得合适的拟合线。我想我用“一起优化这两个拟合参数”做了错误的陈述,我编辑了 OP!
标签: r curve-fitting nls nonlinear-optimization