Mimiteruの日記: 最小自乗法近似いろいろ
日記 by
Mimiteru
excelで最小自乗法近似する方法としてはグラフを書いてグラフから近似曲線を導出するのが楽ですが、
通常作業でこれを行うのは煩雑でやってられません。
関数linest()で同様のことが可能ですが、悲しい事に欠損値に対応できません。(やり方を知っている人おしえてください。)
欠損値を除く作業はマクロ化すればある程度できますが、定型のデータでこれをやると別のセル(シート)にペーストして並び替えて関数出して結果を書き戻す…のも煩雑でやってられません。
なんとかしてくださいな、マイクロソフト様と嘆くのと平行して別の方向性を模索するのも一興です。
とりあえず手元のRとgnuplotで二次曲線の近似をしてみます。
y=x^2+2x+3を欠損値付きで書くとこんな感じに。
#x x^2 y
0 0 3
1 1 6
2 4 11
3 9 #N/A
4 16 27
こんな感じのテーブルをexcelで作ってコピー。
Rで。
> AA <- read.table("clipboard",na.strings="#N/A",fill=TRUE)
> AA
V1 V2 V3
1 0 0 3
2 1 1 6
3 2 4 11
4 3 9 NA
5 4 16 27
> lm(formula=AA$V3 ~ AA$V2 + AA$V1)
Call:
lm(formula = AA$V3 ~ AA$V2 + AA$V1)
Coefficients:
(Intercept) AA$V2 AA$V1
3 1 2
以上でできました。
同じ事をgnuplotで。
excelでコピーしたテーブルを~/plottest3.datに作成したと仮定して、
plot "~/plottest3.dat" using 1:3
f(x)=a*x*x + b*x +c
fit f(x) "~/plottest3.dat" using 1:3 via a,b,c
replot f(x)
こんな感じで確認。
fitの結果。
Final set of parameters =======================
a = 1
b = 2
c = 3
以上でできました。
これをバッチ化できれば作業量を減らせる…かもしれませんがexcelでなんとかする方が早い??
通常作業でこれを行うのは煩雑でやってられません。
関数linest()で同様のことが可能ですが、悲しい事に欠損値に対応できません。(やり方を知っている人おしえてください。)
欠損値を除く作業はマクロ化すればある程度できますが、定型のデータでこれをやると別のセル(シート)にペーストして並び替えて関数出して結果を書き戻す…のも煩雑でやってられません。
なんとかしてくださいな、マイクロソフト様と嘆くのと平行して別の方向性を模索するのも一興です。
とりあえず手元のRとgnuplotで二次曲線の近似をしてみます。
y=x^2+2x+3を欠損値付きで書くとこんな感じに。
#x x^2 y
0 0 3
1 1 6
2 4 11
3 9 #N/A
4 16 27
こんな感じのテーブルをexcelで作ってコピー。
Rで。
> AA <- read.table("clipboard",na.strings="#N/A",fill=TRUE)
> AA
V1 V2 V3
1 0 0 3
2 1 1 6
3 2 4 11
4 3 9 NA
5 4 16 27
> lm(formula=AA$V3 ~ AA$V2 + AA$V1)
Call:
lm(formula = AA$V3 ~ AA$V2 + AA$V1)
Coefficients:
(Intercept) AA$V2 AA$V1
3 1 2
以上でできました。
同じ事をgnuplotで。
excelでコピーしたテーブルを~/plottest3.datに作成したと仮定して、
plot "~/plottest3.dat" using 1:3
f(x)=a*x*x + b*x +c
fit f(x) "~/plottest3.dat" using 1:3 via a,b,c
replot f(x)
こんな感じで確認。
fitの結果。
Final set of parameters =======================
a = 1
b = 2
c = 3
以上でできました。
これをバッチ化できれば作業量を減らせる…かもしれませんがexcelでなんとかする方が早い??
最小自乗法近似いろいろ More ログイン