目的 多項分布の確率を求める R には,dmultinom という名前の関数が用意されている(乱数発生用には rmultinom も) 使用法 multinomial(x, p) 引数 x 観察値ベクトル p 母比率ベクトル ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/multinomial.R", encoding="euc-jp") # 多項分布の確率を求める multinomial <- function(x, # 観察値ベクトル p) # 母比率ベクトル { stopifnot(length(x) == length(p), sum(p) == 1, floor(x) == x, x >= 0) exp(lgamma(sum(x)+1)+sum(x*log(p))-sum(sapply(x+1, lgamma))) # 対数で計算して後で逆対数を求める } 使用例 > multinomial(c(4, 2, 3, 0), c(0.5, 0.15, 0.3, 0.05)) [1] 0.04784062 > dmultinom(c(4, 2, 3, 0), 9, c(0.5,0.15, 0.3, 0.05)) [1] 0.04784062 > options(digits=21) > multinomial(c(4, 2, 3, 0), c(0.5, 0.15, 0.3, 0.05)) [1] 0.04784062499999996 > dmultinom(c(4, 2, 3, 0), 9, c(0.5,0.15, 0.3, 0.05)) [1] 0.047840624999999921 解説ページ