【问题标题】:Julia: How to find best fit curve / equation when I have a plot?朱莉娅:当我有一个情节时,如何找到最佳拟合曲线/方程?
【发布时间】:2021-01-26 02:34:44
【问题描述】:

Julia:当我有绘图时如何找到最佳拟合曲线/方程? 我有一个用 map 制作的图,但我需要找到一个适合它的二次方程?

【问题讨论】:

  • 拥有绘图与能够估计二次拟合的系数无关。如果您认为合适,请使用二阶线性回归。也就是说,绘图可用于诊断,即查看二次方是否合适。如果您不知道参数形式,并且想查看它是否可能是线性、二次、三次、指数、负指数、双曲线等,则绘图很有用。

标签: plot julia


【解决方案1】:

正如 cmets 中所说,有一个情节在这里并不重要;只有数据本身是。您可以使用诸如 GLM 之类的包来构建数据的(广义)线性模型,并可能绘制它们或使用它们来预测新结果。

这是一个简单的例子。让我们首先创建示例数据:

using Plots
using DataFrames

df = DataFrame(x = sort(rand(100)))
df.y = 1 .+ 2*df.x .+ 3*df.x.^2 .+ 0.1*randn(100)  # y = 1 + 2x + 3x² + noise
scatter(df.x, df.y, label="data")

并从中构建一个二阶线性模型:

using GLM
model = lm(@formula(y ~ 1 + x + x^2), df)  # Note how the formula looks exactly like the model you want to build
plot!(df.x, predict(model, df), label="model")

你应该得到类似下面的东西:

julia> model
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

y ~ 1 + x + :(x ^ 2)

Coefficients:
────────────────────────────────────────────────────────────────────────
               Coef.  Std. Error       t  Pr(>|t|)  Lower 95%  Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept)  1.04201   0.0073252  142.25    <1e-99    1.02747    1.05655
x            2.04349   0.0332272   61.50    <1e-78    1.97754    2.10944
x ^ 2        2.95854   0.0321212   92.11    <1e-95    2.89478    3.02229
────────────────────────────────────────────────────────────────────────

【讨论】:

    【解决方案2】:

    Polynomials 包比GLM 更不吓人。您可以使用该包中的fit 函数来获得最适合任何提供的订单(度数)的Polynomial。给定一些任意的(x,y) 数据,您可以创建并绘制最佳拟合多项式,如下所示。

    julia> using Polynomials
    
    julia> x=1:10;
    
    julia> y=rand(10);
    
    julia> quadfit=fit(x,y,2)
    Polynomial(-0.06970526100724156 + 0.1638766946706202*x -0.008058423435867207*x^2)
    
    julia> using Plots
    
    julia> plot(x,y,label="Data")
    
    julia> plot!(quadfit,x[1],x[end],label="Quadratic Fit")
    
    julia> savefig("Data and Curve Fit.png")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多