0

optim でより正確な値を取得したい。

次の変数を検討してください。

test<-c(1,2,1,2,3,2,1,2,0.5,0.4,-0.1)

$\mu$ と $\sigma$ の推定値は次のとおりです。

mean(test) 

[1] 1.345455
sd(test)
[1] 0.9223488

または私は使用することができます

library(MASS)
fitdistr(test,"normal")

そして私は得る

    mean         sd    
  1.3454545   0.8794251 
 (0.2651566) (0.1874941)

まったく同じではないのはなぜですか? ここで、optim を使用して手動でこれを行いたいと思います。

loglikenorm<-function(theta){
return (-sum(log(dnorm(test,mean=theta[1],sd=theta[2])))
}
optim(c(0,0.01),loglikenorm)

そして私は得る

$par
[1] 1.3451582 0.8798248

これは正確ではありません。もっと正確にしたいのですが、どうすればいいですか?

ここと同じ設定 (通常の distr を使用) で fitdistr と optim を使用すると、推定値がわずかに異なる場合があります。最適化をより正確に行うにはどうすればよいですか?

4

1 に答える 1

1

最初の質問 (sd結果の違いについて) に対する答えは、推定値の差samplepopulationです。

sample推定値sdは次のように与えられます。

sqrt(1/(N-1) * sigma((x - xbar)^2))

一方、人口推定値sdは次の式で与えられます。

sqrt(1/N * sigma((x - xbar)^2))

R 関数sdはデフォルトで推定値を計算しますがsample、MASS パッケージ関数は人口推定値です。サンプルから (代表サンプルとして) 母集団パラメーターを推定しようとしている場合は、母集団分散/sd を使用する必要があります。

# sample estimate
sqrt(1/10 * sum((test - mean(test))^2))
# [1] 0.9223488

# population estimate
sqrt(1/11 * sum((test - mean(test))^2))
# [1] 0.8794251

最適化機能を使用すると、次のようになります。

> optim(c(0,0.1),loglikenorm)
# $par
# [1] 1.3458745 0.8795433

0.8795433 - 0.8794251 
# [1] 0.0001182 

サンプルサイズが 11 であることを考えると、これは許容可能なエラーしきい値だと思います..

于 2013-03-19T09:02:15.813 に答える