下面是比较泊松分布的拉姆达参数的ML估计量的测试。最大似然估计量的准确度
with(data.frame(x=rpois(2000, 1.5), i=LETTERS[1:20]),
cbind(cf=tapply(x, i, mean),
iter=optim(rep(1, length(levels(i))), function(par)
-sum(x * log(par[i]) - par[i]), method='BFGS')$par))
第一列显示了从封闭形式解(供参考)中获得的ML估计,而第二列显示利用BFGS方法最大化对数似然函数而获得的ML估计。结果:
cf iter
A 1.38 1.380054
B 1.61 1.609101
C 1.49 1.490903
D 1.47 1.468520
E 1.57 1.569831
F 1.63 1.630244
G 1.33 1.330469
H 1.63 1.630244
I 1.27 1.270003
J 1.64 1.641064
K 1.58 1.579308
L 1.54 1.540839
M 1.49 1.490903
N 1.50 1.501168
O 1.69 1.689926
P 1.52 1.520876
Q 1.48 1.479891
R 1.64 1.641064
S 1.46 1.459310
T 1.57 1.569831
可以看出与迭代优化方法得到的估计可以偏离了不少从正确的值。这是可以预料的吗?还是有另一种(多维)优化技术可以产生更好的近似值?
传递给'control()'的'reltol'参数可以调整收敛的阈值。如有必要,您可以尝试使用该功能。我理解争论的理由,但对于封闭形式解决方案不容易计算的实际应用,精确到2位或3位小数不够? – Chase 2012-04-06 15:02:01
谢谢。设置reltol = .Machine $ double.eps似乎消除所有错误。 – 2012-04-06 15:21:31
酷!很高兴这有帮助。正如您可能知道的那样,您可以发布问题的答案并将其标记为正确的,以便其他人可以轻松查看您的解决方案。 – Chase 2012-04-06 15:29:28