2015-04-04 84 views
2

我是Gnuplot的忠實粉絲,現在我想使用時間序列的擬合函數。適合使用Gnuplot的時間序列

我的數據集是這樣的:

1.000000 1.000000 0.999795 0.000000 0.000000 0.421927 0.654222 -25.127700 1.000000 1994-08-12 
1.000000 2.000000 0.046723 -0.227587 -0.689491 0.328387 1.000000 0.000000 1.000000 1994-08-12 
2.000000 1.000000 0.945762 0.000000 0.000000 0.400038 0.582360 -8.624480 1.000000 1995-04-19 
2.000000 2.000000 0.060228 -0.056367 -0.680224 0.551019 1.000000 0.000000 1.000000 1995-04-19 
3.000000 1.000000 1.016430 0.000000 0.000000 0.574478 0.489638 -3.286880 1.000000 1995-07-15 

和我配合腳本:

set timefmt "%Y-%m-%d" 
set xdata time 
set format x "%Y-%m-%d" 
f(x)=a+b*x 
fit f(x) "model_fit.dat" u 10:($2==2?$4:1/0) via a,b 

所以我做一個有條件的擬合時間數據。 我的問題是,Gnuplot擬合函數不適用於時間數據。 我在這裏發現了一個類似的問題:Linear regression for time series with Gnuplot但我不想使用其他軟件。而且我也不知道如何將時間值更改爲數字,然後再回來......

任何人都可以幫我解決這個問題嗎?

非常感謝!

回答

4

事實上,gnuplot的擬合機制對時間數據工作正常。你只需要注意一些細節。

通常,通過兩個數據點的線性擬合可以精確求解。但是gnuplot通常是非線性擬合的,所以初始值很重要。

用於該行的有效x值以秒爲單位給出。使用的b = 1e-8的初始值在這裏工作正常:

set timefmt "%Y-%m-%d" 
set xdata time 
set format x "%Y-%m-%d" 
f(x)=a+b*x 
a = 1 
b = 1e-8 
fit f(x) "model_fit.dat" u 10:($2==2?$4:1/0) via a,b 

plot "model_fit.dat" u 10:($2==2?$4:1/0) lt 1 pt 7 title 'data',\ 
    f(x) w l lt 1 title 'fit' 

enter image description here

+0

這個適合不適合我...... gnuplot的說,配合經過3次迭代收斂。一個合適的價值之後根本沒有改變!所以我認爲gnuplot在裝配時遇到了一些問題。 (參數b的配合看起來不錯) – rstofi 2015-04-05 16:32:35

+0

你有哪個gnuplot版本?我用5.0測試過。嘗試設置一個-7爲適合 – Christoph 2015-04-05 18:11:45

+0

我使用4.6。 gnuplot版本,現在我將它升級到版本5.0。並再次嘗試適合。 – rstofi 2015-04-05 18:52:26