пятница, 27 мая 2016 г.

Регрессия в Gnuplot - просто, быстро, наглядно

Конечно, Gnuplot предназначен в первую очередь для рисования графиков, но он умеет делать и некоторые простые расчёты.

Например, можно построить линейную регрессию и посчитать её основные характеристики.



Преимущества такого способа:
  • gnuplot читает самые разые форматы файлов данных без дополнительной настройки и парсинга;
  • скрипт работает из командной строки, то есть счёт - фактически только нажать Enter, и конечно же прекрасно подходит для многократного использования;
  • gnuplot строит графики обычно очень аккуратно, выравнивает оси, шаги и т.д. и делает опять же всё сам, без специальных настроек.
Итого: просто и быстро.

А вот код скрипта, которым построена регрессия и график:

G_dat      = '_dat.txt';
G_Title    = "Регрессия Y=Y(X)";
G_XLabel   = "Величина X";
G_YLabel   = "Величина Y";
G_Equation = "Уравнение регрессии: Y= %.0f+%.2f*X";
G_R2note   = "Коэффициент детерминации: R^2=%.5f";
reset;

set terminal wxt enhanced size 1000,500
set grid xtics ytics linetype 1 linetype 1 linecolor rgb "#bbbbbb"
set key off   # легенду убираем

set bmargin  5
set lmargin  13
set title    G_Title  font ",24" offset 0,2 
set xlabel   G_XLabel font ',16'
set ylabel   G_YLabel font ',16' offset -2,0
set ytics    format "%.0f"

Mean(x) = Mx
fit Mean(x) G_dat using 1:2 via Mx
SST     = FIT_WSSR/(FIT_NDF+1 )

Yf1(x) = A0 + A1*x
fit Yf1(x) G_dat using 1:2 via A0, A1
SSE1 = FIT_WSSR/(FIT_NDF+1);
R2   = 1 - SSE1/SST;

plot G_dat using 1:2 with points pointtype 7 pointsize 2 linecolor rgbcolor "#0000ff"
set label sprintf(G_Equation, A0, A1) at graph 0.1,0.9  font ",15" 
set label sprintf(G_R2note, R2)       at graph 0.1,0.75 font ",12" 
replot Yf1(x) with line linetype 1 linewidth 10 linecolor rgb "#990000"

Комментариев нет:

Отправить комментарий