optim関数



  • Rのwikiの記事はこちら
  • datax,datayにデータペアがあり、今、式y=a¥times e^{b¥times x}+cへのあてはめを考えているとすると、変数a,b,cについて、その初期値をc(0.5,0.5,0.5)と与えてやり、次のように実行する

f <- function(x) {
    a <-x[1]
    b <-x[2]
    c <-x[3]
    sum((datay-(a*exp(b*datax)+c))^2)
}
optim(c(0.5,0.5,0.5),f)

結果はこんな感じ


$par
[1] 0.3169682 0.2442764 3.5609289

$value
[1] 0.02900284

$counts
function gradient
130 NA

$convergence
[1] 0

$message
NULL

  • 今、タブ区切りのファイル(1行目がラベル行、カラム名が"x","y")、近似式がy=a¥times e^{b¥times x}+cについて、a,b,cの初期値をそれぞれ0.1,0.2,0.3として推定値を得る関数はこんな感じ

runoptimPar<-function(file,par){
f <- function(x) {
a <- x[1]
b <- x[2]
c <- x[3]
sum((datay-(a*exp(-b*datax)+c))^2)
}

data<-read.table(file,TRUE,"\t")
datax<-data$x
datay<-data$y
optim(par,f)

}

  • 実行方法は

> runoptimPar("hoge.txt",c(0.1,0.2,0.3))
$par
[1] 0.2816443 0.5790963 -0.3748909

$value
[1] 2.348886

$counts
function gradient
80 NA

$convergence
[1] 0

$message
NULL

>



||<