最近、ある分布の裾にいくつかの確率ポイントがあり、これらの尾を通る分布に「適合」させたい状況に遭遇しました。これは乱雑で過度に正確ではなく、概念的な問題に悩まされていることを理解しています。しかし、私が本当にこれをやりたいと思っていることを信じてください。
つまりx
、値でありy
、その値の確率以下であるCDFの末尾のいくつかの点を効果的に知っています。これが私のデータを説明するRコードです:
x <- c(0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85)
y <- c(0.0666666666666667, 0.0625, 0.0659340659340659, 0.0563106796116505,
0.0305676855895196, 0.0436953807740325, 0.0267459138187221)
次に、を使用して、データとベータ分布CDFの間のエラーを最小限に抑える関数を作成しますpbeta
。SSEをフィット指標として使用し、それをで最小化し-sum
ます。私はに最初のパラメータとして初期推測で投げるoptim
の(9, .8)
私は別の推測でこれを試してみたが、私はいつも同じ結果を得ます。私が使用する出発点の推測は、手動で近くにあるように見えるパラメーターを手動で調理することから来ています。
# function to optomize with optim
beta_func <- function(par, x) -sum( (pbeta( x, par[1], par[2]) - y)**2 )
out <- optim(c(9,.8), beta_func, lower=c(1,.5), upper=c(200,200), method="L-BFGS-B", x=x)
out <- out$par
print(out)
#> [1] 0.90000 23.40294
以下では、「最適化された」ベータ分布を赤で、実際のデータを青で、手作業で調整したベータパラメータの最初の推測を黒でグラフ化しています。
plot(function(x) pbeta(x, shape1=out[1], shape2=out[2] ), 0, 1.5, col='red')
plot(function(x) pbeta(x, 9,.8), 0, 1.5, col='black', add=TRUE)
lines(x,y, col='blue')
私はoptim
私の最初の推測よりも悪い解決策を与えるために何が起こっているのかを理解することができません。私は最初の推測optim
と解決策のSSEを計算しましたが、私の推測にははるかに大きな-SSEがあるようです:
# my guess
-sum( (pbeta( x, 9, .8) - y)**2)
#> [1] -0.03493344
# optim's output
-sum( (pbeta( x, .9, 23) - y)**2)
#> [1] -6.314587
過去の履歴をベイジアンの以前のものとして使用しているので、私は誤解している、optim
または不適切な入力を与えていると思います。しかし、私は何が起こっているのかわからない。任意のヒントをいただければ幸いです。
私はCG
最適化方法を試してみましたが、結果に意味のある違いはなく、それでも私の最初の推測ほどよく見えません。
out <- optim(c(9,.8), beta_func, method="CG", x=x)
out <- out$par
print(out)
#> [1] 2.287611 11.124736
optim
、入札を行うようにしています。