使用optim和fitdistr更精确的值

时间:2013-03-19 08:25:08

标签: r optimization

我希望有更多精确的值。

考虑以下变量:

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在与此处相同的设置(使用正常的分配)导致估计略有不同,那么我怎样才能更精确地做出优化?

1 个答案:

答案 0 :(得分:1)

第一个问题(关于[{1}}结果的差异)的答案是the difference between sample and population estimates

sd的{​​{1}}估算值由下式给出:

sample

然而,sd的人口估计值由下式给出:

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

R函数sd默认计算sqrt(1/N * sigma((x - xbar)^2)) 估计值,其中MASS包函数是总体估计值。如果您尝试从样本中估算人口参数(作为代表性样本),那么您应该使用population variance / sd。

sd

使用优化功能,我得到:

sample

鉴于您的样本量为11,我认为这是一个可接受的错误阈值。