我希望有更多精确的值。
考虑以下变量:
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在与此处相同的设置(使用正常的分配)导致估计略有不同,那么我怎样才能更精确地做出优化?
答案 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,我认为这是一个可接受的错误阈值。