Statistics 朱莉娅:在拟合模型上绘制残差

Statistics 朱莉娅:在拟合模型上绘制残差,statistics,julia,Statistics,Julia,我试图找出如何绘制这样的残差图,以显示与预测结果的偏差: 我在Python中找到了答案,但在Plots.jl文档中找不到答案,在Julia中也找不到答案 注意:这里的数据不是问题,我可以处理,这只是我正在努力使用的文字绘图API。在API中你在努力使用什么? 到目前为止你试过什么 julia> points_y = [x for x in 1:10] .+ rand(10) 10-element Vector{Float64}: 1.1165819028282722 2.9865

我试图找出如何绘制这样的残差图,以显示与预测结果的偏差:

我在Python中找到了答案,但在Plots.jl文档中找不到答案,在Julia中也找不到答案


注意:这里的数据不是问题,我可以处理,这只是我正在努力使用的文字绘图API。

在API中你在努力使用什么? 到目前为止你试过什么

julia> points_y = [x for x in 1:10] .+ rand(10)
10-element Vector{Float64}:
  1.1165819028282722
  2.986599717814377
  3.5743557742882377
  4.835499304548991
  5.106506715905332
  6.483859149461656
  7.041461273394912
  8.22314808617758
  9.128892867863867
 10.891435553032899

julia> points_x = 1:10
1:10

julia> p1 = plot(points_x,points_x) #Plotting the fit

julia> scatter!(p1,points_x,points_y) #Plotting the points

julia> for i in 1:length(points_x)
           plot!(p1,[points_x[i], points_x[i]],[points_x[i],points_y[i]], color=:black, legend=false)
       end

julia> p1
产生以下结果:


在for循环中,我想这是您感兴趣的,我只是在拟合x,fx中的点和散乱点x,y之间画线,所以语法变成plot!p、 [x,x],[fx,y]。有点难以深入了解,因为您没有指定您在流程的哪一部分遇到了困难。

您在API中遇到了什么困难? 到目前为止你试过什么

julia> points_y = [x for x in 1:10] .+ rand(10)
10-element Vector{Float64}:
  1.1165819028282722
  2.986599717814377
  3.5743557742882377
  4.835499304548991
  5.106506715905332
  6.483859149461656
  7.041461273394912
  8.22314808617758
  9.128892867863867
 10.891435553032899

julia> points_x = 1:10
1:10

julia> p1 = plot(points_x,points_x) #Plotting the fit

julia> scatter!(p1,points_x,points_y) #Plotting the points

julia> for i in 1:length(points_x)
           plot!(p1,[points_x[i], points_x[i]],[points_x[i],points_y[i]], color=:black, legend=false)
       end

julia> p1
产生以下结果:


在for循环中,我想这是您感兴趣的,我只是在拟合x,fx中的点和散乱点x,y之间画线,所以语法变成plot!p、 [x,x],[fx,y]。要深入了解有点困难,因为您没有具体说明您在流程的哪个部分遇到了困难。

为了补充aramirezreyes的答案,如果您有很多点,您可能希望避免循环,因为调用plot!可能会很贵,您可能希望避免使用许多系列。在这种情况下,可以在每个条的坐标之间插入NaN。比如说,

julia> x2 = repeat(points_x, inner=3) ;

julia> y2 = reduce(vcat, [y, yhat, NaN] for (y, yhat) in zip(points_x, points_y)) ;

julia> p1 = plot(points_x, points_x) #Plotting the fit

julia> plot!(x2, y2, lab="")

julia> scatter!(p1, points_x, points_y, c=2) #Plotting the points
我会给你


为了补充aramirezreyes的答案,如果您有很多点,您可能希望避免循环,因为调用plot!可能会很贵,您可能希望避免使用许多系列。在这种情况下,可以在每个条的坐标之间插入NaN。比如说,

julia> x2 = repeat(points_x, inner=3) ;

julia> y2 = reduce(vcat, [y, yhat, NaN] for (y, yhat) in zip(points_x, points_y)) ;

julia> p1 = plot(points_x, points_x) #Plotting the fit

julia> plot!(x2, y2, lab="")

julia> scatter!(p1, points_x, points_y, c=2) #Plotting the points
我会给你


谢谢你的帮助。我最想知道的是,是否有一种更自然的方法来绘制将残差值连接到回归线的棒形图线,而不必在for循环中手动绘制。如果不是,这似乎是最好的方法。不要害怕循环。他们是你的朋友,很好。你可以省略理解,只做点y=points\x.+rand10。谢谢你的方法。我最想知道的是,是否有一种更自然的方法来绘制将残差值连接到回归线的棒形图线,而不必在for循环中手动绘制。如果不是,这似乎是最好的方法。不要害怕循环。他们是你的朋友,很好。你可以省略理解,只需做points_y=points_x.+rand10。太棒了,谢谢!y2的那一行非常整洁!太棒了,谢谢!y2的那一行非常整洁!