【问题标题】:R non-linear model fitting using fitModel function使用 fitModel 函数的 R 非线性模型拟合
【发布时间】:2019-04-27 04:10:28
【问题描述】:

我想将非线性模型拟合到真实数据。

真实数据由 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

但是,有一个错误

modelspec[[datasetind[i]]] 中的错误:下标超出范围

因此,作为替代方案,您希望找到“a”和“误差平方和”的图。这一次,我很难找到“a”并绘制此图。通过手工,我发现值“a”接近 0.2,但这不是一个精确值。

如果有人能显化其中之一,那将是有帮助的:

  1. 为什么fitModel 函数不起作用或
  2. 如何找到值a 并绘制图表。

【问题讨论】:

  • 您没有得到任何响应的原因是人们看到了一个视频文件的链接,并且不想出去查看它以复制您的设置工作。您应该从调用 install.packages 和 library 开始,然后使用该非标准包中的专用函数来加载数据。您可能需要使用数据的dput 输出。只有到那时,潜在的响应者才能帮助解决minimal reproducible example

标签: r model non-linear-regression


【解决方案1】:

你可以试试这个:

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)

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2012-06-29
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2017-10-23
    相关资源
    最近更新 更多