Gnuplot - 数据文件中的多元线性回归

时间:2017-05-03 12:14:12

标签: gnuplot

我有一个包含多列的文件,我想使用循环对文件进行多次线性回归(在回归后绘制在同一图表中):

do for [i=1:6] {
g(i,x)= 'm'.i*x + 'b'.i
fit g(i,x) 'Dens.dat' using 1:(column(i+1)) via 'm'.i,'b'.i    
}

但我收到错误:could not read parameter-file "m1"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您的Gnuplot版本不支持数组,那么您可以调整alternative solution,例如:

vGet(name, i) = value(sprintf("%s%i", name, i)) 
vSet(name, i, val) = sprintf("%s%i = %.16e", name, i, val)

N = 2
#array m[N]
#array b[N]

do for [i=1:N] {
    g(x)= alpha*x + beta
    fit g(x) 'Dens.dat' using 1:(column(i+1)) via alpha,beta

    eval vSet('m', i, alpha);
    eval vSet('b', i, beta);

    #m[i-1] = alpha
    #b[i-1] = beta
}

set key top left
set terminal pngcairo
set output 'fig.png'

plot \
    for [i=1:N] vGet('m', i)*x + vGet('b',i) w l t '', \
    for [i=1:N] 'Dens.dat' u 1:(column(i+1)) w p t sprintf("column %d", i)

Dens.dat结合使用:

1   4   5
2   8   10
3   12  15
4   16  20

生产: enter image description here