非线性拟合的代码.
这里列举一个2次多项式拟合的例子f(x) = a + b*x+c*x^2
data=read.csv("data for R.csv")
y=data$m1
x=data$m2
plot(x,y)#绘制两个变量的散点图,查看变量之间的关系
从变量散点图可以看出,两个变量之前存在非线性关系,根据经验,使用f(x) = a + b*x+c*x^2 进行拟合。
funfit(x,y,2) #使用函数对参数进行预测
得到的参数a,b,c分别为-1.5430745,0.9970507,0.1195567
f(x) = -1.5430745+ 0.9970507*x + 0.1195567*x^2
lines(x,funfit(x,y,2)[1]+funfit(x,y,2)[2]*x+funfit(x,y,2)[3]*x^2,col="red")#使用模型进行线性拟合
最后是拟合的图像
##然后对比R中的nls函数进行拟合的结果
mod <- nls(y ~ a+b*x+c*x^2,start=list(a= -3, b = 0.1, c = 0.1), trace=T) summary(mod)
lines(x,predict(mod),col="blue")