这是我在Matlab尝试做MLE时注意到的。我的第一个估算器使用了pdf的对数可能性,并将产品作为总和破坏了。例如,日志weibull pdf (f(x)=b ax^(a-1)exp(-bx^a))
被分解为:
log_likelihood=log(b)+log(a)+(a-1)log(x)-bx^a
评估这与此截然不同:
log_likelihood=log(bax^(a-1)exp(-bx^a))
两个阶段的计算机做什么不同?第一个给出了更大的数字(几个数量级)。
答案 0 :(得分:4)
根据您使用的数字,这可能是一个数字问题:如果将非常大的数字与非常小的数字组合在一起,由于数字精度的限制,您可能会得到不准确的信息。
一种可能性是你在第二种情况下失去了一些准确性,因为你在不同的比例下操作。
答案 1 :(得分:3)
我致力于实现系统发育树最大可能性的科学软件项目,并始终遇到有关数值精度的问题。通常下降是......
这一切都归结为第三,甚至在你的情况下。当计算中的指数被缩放时,小数字和非常大数字的多重复制会导致奇怪的结果。在着名的“What Every Computer Scientist Should Know About Floating-Point Arithmetic”中有很多关于此的内容。但是,我所提到的只是缺少它,如果这就是你感兴趣的那些。
总而言之,您所看到的问题是计算函数时浮点/双精度数和运算表示中的严格数值问题。我不太熟悉MATLAB,但它们可能有一个任意精度类型,可以给你更好的结果。
除此之外,尽可能长时间保持象征性,如果你对变量大小有任何直觉(如a
总是与x
相比总是非常大),那么请确保你是明智地选择括号的顺序。
第一个等式应该更好,因为它正在处理添加log
s,并且应该比第二个更稳定 - 尽管x^a
让我有点厌倦,因为它会支配等式,但无论如何它都会在实践中。