オクラホマので、のは、いくつかの事実から始めましょう:
- あなたが多変量正規分布を持っている場合は、周辺分布が出て取り残されている変数に関連するすべてのパラメータに依存しません。 here
- パラメータ
mu
およびsigma^2
の最尤推定量は、サンプルの類似体に対応することがよく知られています。一変量の場合に解析解を得る方法の例については、hereを参照してください。
これらのパラメータを次のように推定できます。まず、私はいくつかのサンプルデータを生成してみましょう:
n <- 10000
set.seed(123) #for reproducible results
dat <- MASS::mvrnorm(n=n,
mu=c(5, 10),
Sigma= matrix(c(1,0.5,0.5,2), byrow=T, ncol=2)
)
をここで、私は5と10、それぞれであることをmu1
とmu2
を選択しました。また、sigma1^2
は、1 rho*sigma1*sigma2
等しい0.5に等しく、sigma2^2
はrho * sigma1 * sigma2 = 0.5
以来、私たちはrho = 0.5/sqrt(1*2) = 0.35
は、現在知られている(分析)最大尤度を
推定使用することを持っていることを、私たちはパラメータmu1
を推定してみましょう。2.ノートに等しいですデータから最初にmu2
を入力します。ここでは、事実1は私が依存関係について心配する必要がないことを保証するので、それぞれの変数のサンプル手段を使用します。つまり、限界分布には同一のパラメータがあるので、それらは2値的には正常であるとは無視できます。単変量の場合のこれらのパラメータのMLEが標本平均であることがわかりました。
> colMeans(dat)
[1] 5.006143 9.993642
これは、以前にデータを生成するときに指定した真の値に非常に近いことがわかります。
今、私たちはx1
とx2
の分散を推定してみましょう:
> apply(dat, 2, var)
[1] 0.9956085 2.0008649
はまた、これが真の値にかなり近づきます。このアプローチは今のところうまくいくと思われます。 :)
ここで残っているのはすべてrho
です。分散共分散行列の対角外の項目はrho*sigma1*sigma2 = rho * 1 * sqrt(2)
です。これは0.5と定義されています。従って、rho = 0.35
。
ここで、サンプルの相関関係を見てみましょう。サンプル相関はすでに共分散を標準化しているため、相関係数を得るために手動でsqrt(2)
で除算する必要はありません。
> cor(dat)
[,1] [,2]
[1,] 1.0000000 0.3481344
[2,] 0.3481344 1.0000000
これは、以前に指定された真のパラメータにかなり近くなっています。後者は小さなサンプルに偏っていると主張し、修正を加えることができることに注意してください。議論については、Wikipediaの記事を参照してください。それをやりたければ、最後の言葉にn/(n-1)
を掛けるだけです。 n=10000
などのサンプルサイズでは、大きな違いはありません。
ここで何をしましたか?私は、これらの量の分析的最尤推定量がどのように見えるかを知っていたので、これらのパラメータを推定するために使用しました。分析的にどのようにソリューションが見えるのかわからない場合はどうしますか?原則として、あなたは尤度関数を知っています。あなたはそのデータを持っています。パラメータの関数として尤度関数を書き留めて、多くの利用可能なオプティマイザの1つを使用して、サンプル尤度を最大にするパラメータの値を見つけることができます。これはダイレクトMLアプローチになります。 hereを参照してください。
だから、試してみましょう。尤度数値
上記の手順を最大化
は、我々が解析的最尤推定量を得ることができたという事実を使用します。すなわち、尤度関数の導関数を取り、それをゼロに等しく設定し、未知量について解くことによって、これらの量に対する閉形式解を見いだした。しかし、コンピュータを使って数値を数値で見つけることもできます。これは、扱いやすい解析ソリューションが見つからない場合に便利です。それを試してみましょう。
まず、関数を最大化するので、組み込み関数optim
を使ってみましょう。 optim
では、パラメータのベクトルに最初の開始値を指定し、パラメータベクトルを引数として渡す関数を指定する必要があります。この関数は、最大化または最小化される値を返すものとします。
この機能はサンプルの可能性になります。サイズn
のiid-サンプルが与えられると、サンプル尤度は全ての尤度(すなわち、確率密度関数)の積である。大規模な製品の数値最適化は可能ですが、一般的には、製品を合計に換算するために対数をとっています。可能性を取得するには、ちょうど変量正規分布の個々のPDFファイルで、長い期間懸命に見て凝視し、そしてあなたは、サンプルの可能性は、この関数は、引数を介して最大化する
-n*(log(sig1) + log(sig2) + 0.5*log(1-rho^2)) -
0.5/(1-rho^2)*(sum((x1-mu1)^2)/sig1^2 +
sum((x2-mu2)^2)/sig2^2 -
2*rho*sum((x1-mu1)*(x2-mu2))/(sig1*sig2))
のように書くことができていることがわかります。 optim
は1つのパラメータベクトルを供給するために私を必要とし、私はこのためにラッパーを使用して、次のように最大化問題を設定して以来:
次のようにoptim
への私の呼び出しは、その後になります
ここ eps <- eps <- .Machine$double.eps # get a small value for bounding the paramter space to avoid things such as log(0).
numML <- optim(rep(0.5,5), wrap, dat=dat,
method="L-BFGS-B",
lower = c(-Inf, -Inf, eps, eps, -1+eps),
upper = c(Inf, Inf, 100, 100, 1-eps),
control = list(fnscale=-1))
を、 rep(0.5,5)
は開始値を提供し、wrap
は関数の上にあり、lower
とupper
はパラメータの境界であり、引数はで、関数が最大化されていることを確認します。結果として、私は得る:
numML$par
[1] 5.0061398 9.9936433 0.9977539 1.4144453 0.3481296
注これらの要素がmu1
、mu2
、sig1
、sig2
とrho
に対応します。 sig1
とsig2
を四角で囲むと、私が最初に提供した分散が再現されることがわかります。だから、うまくいくようです。 :)
ありがとう、これは本当に役に立ちます。 :-)私のρは私の予想より低いです(R2〜0.2のときはρ〜0.01)。あなたが「サンプル共分散を見てください」と言いましたが、なぜあなたは 'cov'の代わりに' cor'を使っていますか?それは正しいのですか?単に「cor(dat)[2,1]」ですか? –
もちろん、あなたは正しいです。それは単純な数学の誤りと組み合わせたタイプミスでした。それを指摘してくれてありがとう!また、完全性のために数値最適化を行う方法も追加しました。 – coffeinjunky
あなたの質問について、もしあなたが解決策がどのように分析的に見えるのか分からなければ、あなたはどうしますか?これはいつですか? 「ソリューションの外観を知る」に十分なデータをプロットしていますか?私の無知については申し訳ありません。私は、2つの見積もりの賛否両論と、どちらを使用すべきかを完全に理解しようとしています。もう一度ありがとう:-) –