【问题标题】:How to find appropriate model to fit the non linear curve of current data in r如何找到合适的模型来拟合 r 中当前数据的非线性曲线
【发布时间】:2019-11-26 03:03:06
【问题描述】:

我有一个数据集:Reg

dist     ED
75  4.9
150 7.6
225 8.9
300 8.8
375 8.1
450 7.3
525 6.5
600 5.8

我想找到一个合适的非线性回归模型。我试过了:

plot(Reg$ED, Reg$dist)
lines(lowess(Reg$ED,Reg$dist))
m1 <- lm(ED ~poly(dist,2,raw=TRUE),data=Reg)
m2 <- lm(ED~dec+I(dist^2),data=Reg)
summary(m1)
summary(m2)
lines(Reg$PVFD_Mean, predict(m2), col=2)

但我不知道为什么图中没有显示回归模型的线条。所以我不知道如何为我的数据找到最合适的模型。我也试过fitModel,但也没有用。

非常感谢任何帮助。

非常感谢

【问题讨论】:

    标签: r regression curve-fitting non-linear-regression


    【解决方案1】:

    我的方程搜索显示非常适合三参数逆哈里斯屈服密度方程“y = x / (a + b * pow(x, c))”,参数 a = 1.4956613575678071E+01, b = 7.8559465184281589E-05,c = 2.1768293119284090E+00 给出 RMSE = 0.1002 和 R 平方 = 0.9943

    【讨论】:

    • 既然你问了,我的开源在线曲线和曲面拟合网站 zunzun.com 在zunzun.com/FunctionFinder__Z___/2 有一个用于方程搜索的“函数查找器”——我粘贴了你的数据并设置了“平滑度控制” " 到 3(最多 3 个参数)然后点击提交按钮。
    【解决方案2】:

    这是一个使用loess 函数来构建非线性模型的选项:

    dt = read.table(text = "dist     ED
    75  4.9
    150 7.6
    225 8.9
    300 8.8
    375 8.1
    450 7.3
    525 6.5
    600 5.8", header=T)
    
    # build the model
    m = loess(ED ~ dist, data = dt)
    
    # see model summary
    summary(m)
    
    # Call:
    #   loess(formula = ED ~ dist, data = dt)
    # 
    # Number of Observations: 8 
    # Equivalent Number of Parameters: 4.41 
    # Residual Standard Error: 0.06949 
    # Trace of smoother matrix: 4.87  (exact)
    # 
    # Control settings:
    # span     :  0.75 
    # degree   :  2 
    # family   :  gaussian
    # surface  :  interpolate     cell = 0.2
    # normalize:  TRUE
    # parametric:  FALSE
    # drop.square:  FALSE 
    
    # plot points and model fit
    plot(dt$dist, dt$ED)
    lines(dt$dist, m$fitted, col=2)
    

    如果您出于某种原因确实想使用lowess 函数,您可以执行以下操作:

    plot(dt$dist, dt$ED)
    lines(lowess(dt$dist, dt$ED), col = "blue")
    lines(lowess(dt$dist, dt$ED, f = 0.5), col = "green")
    lines(lowess(dt$dist, dt$ED, f = 0.3), col = "red")
    

    这将为您提供相同的绘图,但您必须为平滑参数 f 选择一个较小的值:

    这两种方法的区别只是loess 有一个平滑参数,默认值很好(span = 0.75),但lowess 有一个平滑参数,在你的情况下默认值不够好(@ 987654334@).

    【讨论】:

    • 我设法制作了拟合线。但是你知道如何解释这两个变量的方程吗?
    • Loess 方法不会产生可以用数学公式表示的回归函数,因为回归是“局部的”(即该方程取决于您关注的数据点)。更多信息:stats.stackexchange.com/questions/264231/…
    • 如果你真的想要一个等式,最好使用ED ~ poly(dist, n, raw=TRUE) 来获取n 的不同值,并保留最适合的那个。
    【解决方案3】:

    在问题中,distED 的值有时会互换。

    m1 <- lm(ED ~ poly(dist, 2, raw = TRUE), data = Reg)
    summary(m1)
    
    plot(Reg$dist, Reg$ED)
    lines(lowess(Reg$dist, Reg$ED))
    lines(Reg$dist, predict(m1), col = 2)
    

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 2019-03-15
      • 2017-11-23
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      相关资源
      最近更新 更多