`logProbability` returns `NaN` for the Poisson distribution with `λ = 0`

オープン 初心者向け
#235 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
haskell
領域
data

調査の方向性

Poisson の logProbability 実装と、レート 0 に対する既存の probability の処理から始めます。Poisson 分布のテストを確認し、0 で評価した λ = 0 のケースを追加します。logProbability (poisson 0) 0 が 0 を返し、関連するテストが通れば完了です。

索引モデルが issue の本文から書いたものです。

説明

Hi!

Unfortunately, as said in the title: logProbability returns NaN for the Poisson distribution with rate 0, evaluated at 0. Here is a minimal example (save it as Main.hs and run runghc Main.hs with statistics-0.16.5.0 exposed):

import qualified Statistics.Distribution as D
import Statistics.Distribution.Poisson (poisson)

main :: IO ()
main = print (D.logProbability (poisson 0) 0)

Output (on GHC 9.6.7 and 9.14.1):

NaN

whereas it should be 0, since a Poisson distribution with rate 0 is a point mass at 0 (so the probability of 0 is 1, and its logarithm is 0). And rate 0 is inside the constructor's documented domain (λ >= 0).

The problem comes from the formula log λ * fromIntegral i - logFactorial i - λ used in logProbability. At λ = 0 and i = 0, its first term is (-Infinity) * 0, which is NaN. logProbability doesn't handle this case, which is a pity since probability does. For the same distribution, probability returns 1, so the two functions disagree. Would it be possible to fix this?

Thanks in advance!

主要言語
Haskell
スター
309
フォーク
77
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

haskell/statistics のほかの issue

haskell/statistics の issue をすべて見る

似ている issue

Haskell の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。