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

这不准确。我想让它更准确,我该怎么做?

我有一个案例,其中 fitdistr 和 optim 在与此处相同的设置(使用正常分配)导致估计略有不同,那么我怎样才能更精确地进行 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 包函数计算总体估计值。如果您尝试从您的样本(作为代表性样本)估计总体参数,那么您应该使用总体方差/标准差。

# 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 回答