2017-02-03 1209 views
1

函数dmultinom (x, size = NULL, prob, log = FALSE)估计多项分布的概率。但是,它不会以size = 1运行。Multinomial分布的dmultinom函数R

理论上,当设置size = 1时,多项式分布应该等同于分类分布。

有没有人知道为什么错误信息?

仅供参考,分类分布可以通过dist.Categorical {LaplacesDemon}来建模。

实例:

dmultinom(c(1,2,1),size = 1,prob = c(0.3,0.5,0.4))

错误dmultinom(C(1,2,1),大小= 1,概率= C(0.3,0.5,0.4)): 大小=总和(! x)的

dcat(c(1,2,1),p = c(0.3,0.5,0.4))

[1] 0.3 0.5 0.3 

由于

回答

1

LaplacesDemon::dcatstats::dmultinom做了两件不同的事情。如果你有多个观测值dcat需要一个类别值向量,而dmultinom需要单向量响应,所以你必须构建一个响应矩阵并使用apply(或其他)。

library(LaplacesDemon) 
probs <- c(0.3,0.5,0.2) 
dcat(c(1,2,1), p = probs) ## ans: 0.3 0.5 0.3 
x=matrix(c(1,0,0, 
      0,1,0, 
      1,0,0), 
     nrow=3,byrow=TRUE) 
apply(x,1,dmultinom,size=1, prob=probs) 

(我修改你的榜样,因为你原来的概率,c(0.3,0.5,0.4),加起来还不到1 - 既不功能给你一个警告,但dmultinom自动重新调整的概率总和为1)

如果我尝试dmultinom(c(1,2,1),p=probs, size=1)我得到

大小!= SUM(x)的

dmultinomc(1,2,1)解释为“来自组1的一个样本,来自组2的两个样本,来自组3的1”,这与总样本大小1不一致...

+0

哦,我现在看。谢谢! – user2597079

+0

对不起,还有一个快速问题。 (dcat(c(1,2,1),p = probs))#ans 0.045 等于0.3 * 0.5 * 0.5 * 0.2#ans 0.015? – user2597079

+0

你仍然困惑。在'dcat()'中,(1,2,1)并不意味着“类型1的1,类型2的1,类型3的1”,它表示类型1的1,然后是类型2的1,然后是1我不确定你要做什么计算,或许更适合CrossValidated? –