如何在R中获得nls的情节?

时间:2012-03-29 03:44:37

标签: r plot nls

在R中,我使用nls进行非线性最小二乘拟合。那么我如何使用拟合提供的系数值来绘制模型函数?

(是的,这是来自R亲戚新手的非常天真的问题。)

4 个答案:

答案 0 :(得分:14)

使用?nls中的第一个示例并按照我逐行指向的示例实现以下内容:

#This is just our data frame
DNase1 <- subset(DNase, Run == 1)
DNase1$lconc <- log(DNase1$conc)
#Fit the model
fm1DNase1 <- nls(density ~ SSlogis(lconc, Asym, xmid, scal), DNase1)

#Plot the original points
# first argument is the x values, second is the y values
plot(DNase1$lconc,DNase1$density)

#This adds to the already created plot a line
# once again, first argument is x values, second is y values
lines(DNase1$lconc,predict(fm1DNase1))

predict参数的nls方法会自动返回拟合的y值。或者,您添加一个步骤并执行

yFitted <- predict(fm1DNase1)

并将第二个参数中的yFitted传递给lines。结果如下:

enter image description here

或者如果你想要一条“平滑”的曲线,你所做的就是简单地重复这一点但是在更多点评估函数:

r <- range(DNase1$lconc)
xNew <- seq(r[1],r[2],length.out = 200)
yNew <- predict(fm1DNase1,list(lconc = xNew))

plot(DNase1$lconc,DNase1$density)
lines(xNew,yNew)

答案 1 :(得分:2)

coef(x)返回回归结果x的系数。

model<-nls(y~a+b*x^k,my.data,list(a=0.,b=1.,k=1))
plot(y~x,my.data)
a<-coef(model)[1]
b<-coef(model)[2]
k<-coef(model)[3]
lines(x<-c(1:10),a+b*x^k,col='red')

例如。

答案 2 :(得分:2)

我知道你想要什么(我是科学家)。这不是它,但至少显示如何使用'曲线'在任何范围内绘制拟合函数,曲线将是平滑的。使用与上面相同的数据集:

  

nonlinFit&lt; - nls(密度~a - b * exp(-c * conc),data = DNase1,start = list(a = 1,b = 1,c = 1))

     

fitFnc&lt; - function(x)predict(nonlinFit,list(conc = x))

     

曲线(fitFnc,from = .5,to = 10)

,或者

  

曲线(fitFnc,从= 8.2,到= 8.4)

,或者

  

曲线(fitFnc,从= .1,到= 50)#井在数据范围之外

或其他(不先设置一系列评估点)。

我是一个基本的R程序员,所以我不知道如何在Mathematica中实现(优雅地)类似ReplaceAll(/。)的东西,用于替换模型中符号参数的出现,使用合适的参数。这第一步虽然看起来很可怕但仍然有效:

  

myModel&lt; - “a - b * exp(-c * conc)”

     

nonlinFit&lt; - nls(as.formula(paste(“density~”,myModel)),data = DNase1,start = list(a = 1,b = 1,c = 1))

它为你留下了一个单独的'模型'(作为一个字符串),你可以使用适合的参数......干净利落(不挖掘a,b,c)只会使用nonlinFit ......不知道怎么样。

答案 3 :(得分:-1)

“曲线”功能将为您绘制函数。