2

optim()次の式でラムダを解くためにRで使用しようとしています:

ラムダ/シグマ^2 - ln(ラムダ/シグマ^2) = 1 + 1/Q

制約を受ける:

ラムダ > シグマ^2。

Rでこれを設定する方法がわかりません。

optim方程式は凸に見えるので、良い選択であるはずですが、私は代替の最適化ルーチンにもオープンです。

ありがとうございました!

4

2 に答える 2

3

あなたは方程式を解こうとしています。制約が満たされているかどうかは、事後的にのみ決定できます。uniroot次のように使用できます

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))

与える

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05
于 2011-09-07T09:12:46.210 に答える
1

これはコメントよりも答えであると判断しました。

optim関数と最小化関数の両方optimizeがあるため、たとえば、特定のラムダの二乗誤差を返すエラー関数を記述します (se(lambda, sigma^2, Q)ラムダが最初の引数であることを確認してください)。次に呼び出すoptim(f = se, lower = sigma^2, sigma^2, Q)と、エラー関数を最小化するラムダの値が返されます。複数のデータ ポイント (Q、sigma^2 のペア) がある場合は、関数を二乗誤差の合計にするか、 を使用してみてくださいnls()

于 2011-09-07T07:36:31.983 に答える