r - 防止 nls-fit 低于零

标签 r nls

我试图在 R 中拟合一个函数,因此我使用 nls()。 有没有办法防止拟合函数降到零以下?

一个简单的解决方法是在拟合后增加目标函数中的参数 b0 ,但这实际上不是我想要的,因为我期望真正的拟合与 beeing positive to 的约束导致更好的结果。

y=c(m1,m2,m3,m4,m5,m6,m7,m8,m9,m10)
d=data.frame(seq(1, 10, 1),y=y)
fitFun <- function(x, add, b0, b1) {b0 + (x+add)^b1}
m=nls(y~fitFun(x,add,intercept,power),d,start=list(intercept=1,power=3.5,add=2),trace=T)

最佳答案

你在找这个吗?如果预测是参数的难以反转的函数,则限制参数以使预测为非负可能会很棘手,但在这种情况下,我们只需要要求 b0>=0 .. . 使用@Roland 的例子,

fit2 <- nls(y~b0+(x+add)^b1,
            algorithm="port",
            lower=c(b0=0,b1=-Inf,add=-Inf),
            data=df,start=list(b0=1,b1=3.5,add=2))
lines(predict(fit2)~df$x,col="purple")

下面蓝色的是原始的无约束拟合;红色适合@Roland;上面是紫色。

enter image description here

关于r - 防止 nls-fit 低于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669400/

相关文章:

R Shiny - 如何在渲染函数之间共享变量?

r - 如何在R中读取Sentinel-2数据的JPEG2000

r - 嵌套替换运算符如何工作?

R - 分别随机化矩阵中的每一行

oracle - 考虑到在数据库服务器上定义的NLS_NUMERIC_CHARACTERS,如何使用正确的TO_NUMBER()Oracle函数?

r - 查找和替换NA中DataFrame中所有列的值

r - 如何从 nls 获取结果

r - 当 se.fit=TRUE 时,Predict 无法显示预测的标准误差

r - 根据估计方程 y = A * exp(x * B) 计算 A 和 B 的值

r - ggplot : fit a curve (geom_smooth method ="nls") with CI95% bands