使用fitModel函数进行R非线性模型拟合

vsmadaxz  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(196)

我想用一个非线性模型来拟合真实的数据。
真实的数据由2个已知的 * 数值向量 * 组成;厚度为“x”,fh为“y”

thickness=seq(0.15,2.00,by=0.05)

fh = c(5.17641, 4.20461, 3.31091, 2.60899, 2.23541, 1.97771, 1.88141, 1.62821, 1.50138, 1.51075, 1.40850, 1.26222, 1.09432, 1.13202, 1.12918, 1.10355, 1.11867, 1.09740,1.08324, 1.05687, 1.19422, 1.22984, 1.34516, 1.19713,1.25398 ,1.29885, 1.33658, 1.31166, 1.40332, 1.39550,1.37855, 1.41491, 1.59549, 1.56027, 1.63925, 1.72440, 1.74192, 1.82049)
plot(thickness,fh)

这显然是非线性的。所以,我试着把这个模型拟合成一个非线性函数

y= x*2/3+(2+2*a)/(3*x)

变量a是一个未知常数,我试图找到最佳常数a,使回归线和真实的数据之间的误差平方和最小。
我第一次使用的函数是fitModel,它是我在YouTube视频Fitting Functions to Data in R上找到的。

library(TIMP)
 f=fitModel(fh~thickness^2/3+(2+2*A)/(3*thickness)) #it finds the coefficient 'A'
coef(f) # to represent just the coefficient

但是,出现错误
模型规范datasetind[i]中出错:下标越界
因此,作为一种替代方法,我想找到一个'a'和'误差平方和'的图。这次,我很难找到'a'并绘制这个图。通过手动工作,我计算出'a'的值接近0.2,但这不是一个精确的值。
如果某人能够显化以下任一项,将会很有帮助:
1.为什么fitModel函数不起作用或
1.如何求出a的值并绘制图形。

5sxhfpxr

5sxhfpxr1#

你可以试试这个:

yf = function(a,xv) xv*(2/3)+(2+2*a)/(3*xv)
yf(2,thickness)
f <- function (a,y, xv) sum((y - yf(a,xv))^2)
f(2,fh,thickness)
xmin <- optimize(f, c(0, 10), tol = 0.0001, y=fh,xv=thickness)
xmin
plot(thickness,fh)
lines(thickness,yf(xmin$minimum,thickness),col=3)

相关问题