R

如何正確處理統計函數中的 Infs?

  • April 18, 2014

假設我有這樣的功能:

f <- function(x){
 exp(x) / (1 + exp(x))
}

它應該適用於 x 的任何實際值,但實際上當 x 為 710 或更大時它返回 NaN。我想知道處理這個問題的正確方法是什麼。我意識到讓它返回 1 很容易,但從統計學家的角度來看,這可能不是一個好的行為。有人有什麼意見或建議嗎?

在這種情況下,NaN返回(不是數字),因為雙精度算術中的指數計算溢出。

一個代數等價表達式,在 MacLaurin 級數中展開, 是

因為這是一個交替序列,所以刪除任何一項的錯誤不會大於下一項的大小。因此當, 誤差不大於 對於真實值。這比任何統計計算所需的精確得多,因此您可以將返回值替換為在這個情況下。

有趣的是,當指數下溢R時不會產生。因此,您可以根據 的符號選擇更可靠的計算版本,如NaN``x

f <- function(x) ifelse(x < 0, exp(x) / (1 + exp(x)), 1 / (1 + exp(-x)))


這個問題幾乎出現在所有的計算平台上(我還沒有看到一個例外),它們在處理上溢和下溢的方式上會有所不同。指數因製造這類問題而臭名昭著,但它們並不孤單。因此,僅僅有一個解決方案是不夠的R:一個好的統計學家了解計算機算術的原理,並且知道如何使用這些原理來檢測和解決她計算環境的特性。

引用自:https://stats.stackexchange.com/questions/94271

comments powered by Disqus