@whuberが指摘したように、統計手法はここでは正確に機能しません。他のソースから分布を推測する必要があります。分布がわかったら、非線形方程式を解く練習をします。パラメーターベクトルを使用して、選択した確率分布の分位関数を表します。あなたが持っているのは、次の非線形方程式系です:θfθ
q0.05q0.5q0.95=f(0.05 、θ)=f(0.5 、θ)=f(0.95 、θ )
ここで、は分位数です。を見つけるには、このシステムを解く必要があります。これで、実際には3パラメーター分布について、この方程式を満たすパラメーターの値が見つかります。2パラメーターおよび1パラメーターの分布の場合、このシステムは過剰に決定されているため、正確な解はありません。この場合、矛盾を最小限に抑えるパラメーターのセットを検索できます。θqθ
(q0.05− f(0.05 、θ ))2+ (q0.5− f(0.5 、θ ))2+ (q0.95− f(0.95 、θ ))2
ここでは二次関数を選択しましたが、好きなものを選択できます。@whuberのコメントによると、重みを割り当てることができるため、より重要な変位値をより正確に適合させることができます。
4つ以上のパラメーターの場合、システムは未決定であるため、無限の数の解が存在します。
このアプローチを示すサンプルRコードを次に示します。デモンストレーションのために、VGAMパッケージのSingh-Maddala分布から変位値を生成します。この分布には3つのパラメーターがあり、収入分布のモデリングに使用されます。
q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))
次に、非線形連立方程式を評価する関数を作成します。
fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])
真の値が式を満たすかどうかを確認します。
> fn(c(2,1,4),q)
[1] 0 0 0
非線形方程式システムを解くにはnleqslv
、パッケージnlqeslvの関数を使用します。
> sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
> sol$x
[1] 2.000000 1.000000 4.000001
ご覧のとおり、正確なソリューションが得られます。次に、これらの変位値に対数正規分布を適合させてみましょう。このために、optim
関数を使用します。
> ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
> osol <- optim(c(1,1),ofn)
> osol$par
[1] -0.905049 0.586334
結果をプロットします
plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
lines(x,dsinmad(x,2,1,4))
points(p,dsinmad(p,2,1,4))
このことから、二次関数がそれほど良くないことがすぐにわかります。
お役に立てれば。