【发布时间】:2021-01-26 02:34:44
【问题描述】:
Julia:当我有绘图时如何找到最佳拟合曲线/方程? 我有一个用 map 制作的图,但我需要找到一个适合它的二次方程?
【问题讨论】:
-
拥有绘图与能够估计二次拟合的系数无关。如果您认为合适,请使用二阶线性回归。也就是说,绘图可用于诊断,即查看二次方是否合适。如果您不知道参数形式,并且想查看它是否可能是线性、二次、三次、指数、负指数、双曲线等,则绘图很有用。
Julia:当我有绘图时如何找到最佳拟合曲线/方程? 我有一个用 map 制作的图,但我需要找到一个适合它的二次方程?
【问题讨论】:
正如 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
────────────────────────────────────────────────────────────────────────
【讨论】:
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")
【讨论】: