optim()
次の式でラムダを解くためにRで使用しようとしています:
ラムダ/シグマ^2 - ln(ラムダ/シグマ^2) = 1 + 1/Q
制約を受ける:
ラムダ > シグマ^2。
Rでこれを設定する方法がわかりません。
optim
方程式は凸に見えるので、良い選択であるはずですが、私は代替の最適化ルーチンにもオープンです。
ありがとうございました!
optim()
次の式でラムダを解くためにRで使用しようとしています:
ラムダ/シグマ^2 - ln(ラムダ/シグマ^2) = 1 + 1/Q
制約を受ける:
ラムダ > シグマ^2。
Rでこれを設定する方法がわかりません。
optim
方程式は凸に見えるので、良い選択であるはずですが、私は代替の最適化ルーチンにもオープンです。
ありがとうございました!
あなたは方程式を解こうとしています。制約が満たされているかどうかは、事後的にのみ決定できます。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
これはコメントよりも答えであると判断しました。
optim
関数と最小化関数の両方optimize
があるため、たとえば、特定のラムダの二乗誤差を返すエラー関数を記述します (se(lambda, sigma^2, Q)
ラムダが最初の引数であることを確認してください)。次に呼び出すoptim(f = se, lower = sigma^2, sigma^2, Q)
と、エラー関数を最小化するラムダの値が返されます。複数のデータ ポイント (Q、sigma^2 のペア) がある場合は、関数を二乗誤差の合計にするか、 を使用してみてくださいnls()
。