r - 最大似然估计量的准确性

标签 r mathematical-optimization

这是用于比较泊松分布的 lambda 参数的 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

可以看出,迭代优化方法得到的估计量与正确值有很大的偏差。这是可以预期的,还是有另一种(多维)优化技术可以产生更好的近似值?

最佳答案

Chase 提供的答案:

the reltol parameter which gets passed to control() lets you adjust the threshold of the convergence. You can try playing with that if necessary.



编辑:

这是代码的修改版本,现在包括选项 reltol=.Machine$double.eps ,这将提供最大可能的准确性:
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',
             control=list(reltol=.Machine$double.eps))$par))

结果是:
    cf iter
A 1.65 1.65
B 1.54 1.54
C 1.80 1.80
D 1.44 1.44
E 1.53 1.53
F 1.43 1.43
G 1.52 1.52
H 1.57 1.57
I 1.61 1.61
J 1.34 1.34
K 1.62 1.62
L 1.23 1.23
M 1.47 1.47
N 1.18 1.18
O 1.38 1.38
P 1.44 1.44
Q 1.66 1.66
R 1.46 1.46
S 1.78 1.78
T 1.52 1.52

因此,优化算法产生的误差(即 cfiter 之间的差异)现在减少到零。

关于r - 最大似然估计量的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045131/

相关文章:

删除 knit html 输出上的 caret::train() 迭代

r - 将数据框中的值与其他列中的另一个匹配项匹配

r - 将矩阵分配给 data.table 的子集

c - 单纯形算法的数值稳定性

algorithm - 如何将 Levenshtein 距离应用于一组目标字符串?

python - xtol 在 minimize(method='Nelder-Mead') 中的作用是什么?

R对矩阵中的每k列求和

r - 为什么有些内存地址报告不变,而另一些则发生变化?

python - fmin_slsqp 对同一个系统返回不同的解

julia - julia DifferentialEquations 中多个数据集的参数估计