|
setup diary |
Rをつかって複雑な式でfittingをやることがある。線形の場合にはlmを、非線型の場合にはnlsを使えば良い。しかし、単純な関数で表せなかったり、媒介変数で表されるような場合には、これらは使えない。どうしたら良いかを考えていたら、fittingとの差を表すような関数を定義して、それを最小化すれば良いことに気がついた。例えば、xをax^2で近似するときの最適なaを求める場合には、差を表す関数を定義して、optimizeでその関数と変数の範囲を指定して、最小値を求めれば良い。
x<-0:10/10 f<-function(a){return(sum((x-a*x^2))^2)} res<-optimize(f,c(0,2)) res$minimum
二変数の場合には、optimを使う。このとき、関数の引数はベクトルとして与え、optimには初期値をベクトルとして与える必要がある。
x<-0:10/10 f<-function(a){return(sum((x-a[1]*x^2-a[2]))^2)} res<-optim(c(0,0),f) res$par
ここでの例は、単純で通常の方法でもできるだろうが、複雑なfittingではこれが有効になった。