可能性の表現を書き留めることから始めました。 ことを認識することが単純であるの合計であるの独立したノーマル変数、平均して正規分布持っと分散をその可能性があるそこY,N(μ,σ2)NμNσ2,
L(y,N)=12πNσ2−−−−−−√exp(−(y−Nμ)22Nσ2).
負の対数してみましょうその最小値は尤度の最大値に対応します。Λ=−logL,
2Λ(N)=log(2π)+log(σ2)+log(N)+(y−Nμ)2Nσ2.
この式を最小化するすべての整数を見つける必要があります。が任意の正の実数である可能性があることを 少しの間見せます。このように、の連続微分可能関数である誘導体とはN2ΛN
ddN2Λ(N)=1N−(y−Nμ)2σ2N2−2μ(y−Nμ)Nσ2.
これをゼロに等しくして臨界点を探し、分母をクリアし、少し代数を実行して結果を単純化します。
μ2N2+σ2N−y2=0(1)
一意の正の解を使用して()μ≠0
N^=12μ2(−σ2+σ4+4μ2y2−−−−−−−−−√).
が近づくか大きくなると、が大きくなることを確認するのは簡単です。したがって、近くにも近くにもグローバル最小値がないことがわかり それは、私たちが見つけた唯一の重要なポイントを残します。したがって、それはグローバルな最小値でなければなりません。さらに、は、が下または上から近づくにつれて減少する必要があります。したがって、N02Λ(N)N≈0N≈∞.2ΛN^
のグローバル最小値は、両側の2つの整数の間にある必要がありますΛN^.
これにより、最尤推定量を見つけるための効果的な手順が得られます。これは、の床または天井(または場合によっては両方)なので、を計算し、これらの整数のどれを選択するだけで最小。N^N^2Λ
一時停止して、この結果が理にかなっていることを確認しましょう。 2つの状況で直感的な解決策があります。
ときよりはるかに大きい、近くにあることを行っているのまともな見積もりどこから単にだろう そのような場合、無視してMLEを近似し、(期待どおり)μσYμ,N|Y/μ|.σ2,N^=12μ2(−σ2+σ4+4μ2y2−−−−−−−−−√)≈12μ24μ2y2−−−−−√=∣∣∣yμ∣∣∣.
ときよりもはるかに大きいあらゆる場所に普及することが、可能性があり、平均して近くにある必要がありの直感的な見積もりどこから単にだろう 実際、式でを無視すると、期待される解σμ, Y Y2σ2,Ny2/σ2.μ(1)N^≈y2σ2.
どちらの場合も、MLEは直感に一致しており、おそらく正しく機能したことを示しています。興味深い状況は、その後、ときに発生と同等のサイズです。ここでは直感はほとんど役に立ちません。μσ
これをさらに調査するために、私はがまたは である3つの状況をシミュレートしましたが何であっても(それがゼロでない限り)問題ではないため、 それぞれの状況で、の場合のランダムを生成し、これを独立して5000回繰り返しました。σ/μ1/3, 1,3.μμ=1.YN=2,4,8,16,
これらのヒストグラムは、のMLEを要約します。垂直線はの真の値を示します。NN
平均して、 MLEはほぼ正しいようです。とき比較的小さい、MLEは正確になる傾向がある。一番上の行の狭いヒストグラムを示すものだという。とき MLEはかなり不確実です。とき MLEはしばしば可能、時には数回することができ(特に小さいです)。これらの観察は、前述の直感的な分析で予測されたものと一致しています。σσ≈|μ|,σ≫|μ|,N^=1NN
シミュレーションの鍵は、MLEを実装することです。を 解くだけでなく、および特定の値についてを評価する必要があります ここで反映されている唯一の新しいアイデアは、 の両側の整数をチェックすることです関数の最後の2行は、対数尤度を評価する助けを借りて、この計算を実行します。(1)ΛY, μ,σ.N^.f
lambda
lambda <- Vectorize(function(y, N, mu, sigma) {
(log(N) + (y-mu*N)^2 / (N * sigma^2))/2
}, "N") # The negative log likelihood (without additive constant terms)
f <- function(y, mu, sigma) {
if (mu==0) {
N.hat <- y^2 / sigma^2
} else {
N.hat <- (sqrt(sigma^4 + 4*mu^2*y^2) - sigma^2) / (2*mu^2)
}
N.hat <- c(floor(N.hat), ceiling(N.hat))
q <- lambda(y, N.hat, mu, sigma)
N.hat[which.min(q)]
} # The ML estimator