なんだこれは

はてなダイアリーから移転しました。

gnuplotで線形回帰はどうしようか?

ダイエットの体重、脂肪率、脂肪重(=体重*脂肪率)をだらだらとはてなに書きなぐっているのは、いいのだけど、どうもねぇと言う訳で、csv化してグラフを書かせていた。それを眺めて、にまにましたり、落ち込んだりしているわけですよ。

グラフにすると、だいたいの動きが分かっていいと思うし。

あ、でも、ほら、体重って上下の揺れ幅が大きいから、smoothにしたいなぁ、とか思うじゃないですか。そこでgnuplotの登場ですね。日付対応もばっちりですね。

しかし、線形回帰がうまくできません!教えて偉い人!

set xdata time
set timefmt "%Y/%m/%d"

あ、軸はこうかな。

set format x "%Y/%m"

さあて、では将来の予測として、一次回帰でもしてみようかなぁ、と思ったところ、どうにもこうにも、うまくいかない。なんでですかね?ぜんぜんfitしないのですよ?

f(x) = a * x + b
fit f(x) "raw.dat" using 1:2 via a,b

ってしても、aがとんでもなく小さい正の値に。体重は減ってるのに! xが日付では一次回帰できないのでしょうか?

Iteration 0
WSSR : 18959.6 delta(WSSR)/WSSR : 0
delta(WSSR) : 0 limit for stopping : 1e-05
lambda : 2.07569e+08

initial set of free parameter values

a = 2.27372e-07
b = 1
/

Iteration 1
WSSR : 6176.04 delta(WSSR)/WSSR : -2.06986
delta(WSSR) : -12783.5 limit for stopping : 1e-05
lambda : 2.07569e+07

resultant parameter values

a = 2.09643e-07
b = 1
/

Iteration 2
WSSR : 6176.02 delta(WSSR)/WSSR : -2.32766e-06
delta(WSSR) : -0.0143757 limit for stopping : 1e-05
lambda : 2.07569e+06

resultant parameter values

a = 2.09624e-07
b = 1

After 2 iterations the fit converged.
final sum of squares of residuals : 6176.02
rel. change during last iteration : -2.32766e-06

degrees of freedom (FIT_NDF) : 469
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 3.62884
variance of residuals (reduced chisquare) = WSSR/ndf : 13.1685

Final set of parameters Asymptotic Standard Error
_______________________ __________________________

a = 2.09624e-07 +/- 1.21e-08 (5.77%)
b = 1 +/- 3.551 (355.1%)


correlation matrix of the fit parameters:

a b
a 1.000
b -0.999 1.000

この辺のやり方はエロイ人に教えてもらいたいです。はい、手取り足取り。あ、違います。えらい人です。教えて偉い人!

ぐぐっていたら、gnuplotで日付を扱わずに、perlClass-Dateでepoch時間からの秒数に変換している方のpageがありました。日付データの線形回帰は、gnuplotではできないのでしょうか?