R统计学(04): 多项分布
前面我们介绍了四种离散型概率分布,包括伯努利分布、二项分布、几何分布以及超几何分布,大家可以点击下方链接来回顾:
今天我们介绍另一个离散分布:多项分布(Multinomial distribution),它是二项分布的推广。
1. 特点
二项分布的试验结果只有两个(成功和失败),而多项分布的试验结果则多于两个。如果试验的结果有三个,则是三项分布;如果结果有六个,则是六项分布。现实生活中也有很多符合多项分布的例子:例如,扔骰子,结果点数有六种可能(骰子有6个面对应6个不同的点数);足球比赛的结果有胜、平、负三种。参照二项分布试验的特点,多项分布试验的特点如下:
-
每次试验有多种可能的结果,但是每种结果只会出现一个;
-
每种结果都有各自发生的概率,所有结果的发生概率之和为1;
-
各次试验相互独立,每次试验结果都不受其他各次试验结果的影响。
2. 概率分布
假设某个多项分布试验可能发生结果的数量为k,依据历史数据,每种结果发生的统计概率分别为p1, p2, …, pk。现在进行n次多项分布试验,假设观测到结果a1的次数为x1次,结果a2的次数为x2次,…,结果ak的次数为xk次,那么多项分布的联合概率函数为:
多项分布对其每一个结果都有均值和方差,分别为:
从上可知,多项分布的均值和方差类似于二项分布。
3. R中的实现
在R中,没有特定函数用于多项分布的计算,不过我们可以编写函数来完成相关计算。
3.1 计算概率分布
下面的multi
函数就是用来计算多项分布的概率分布的,其中p
, x
均为向量,分别代表各试验结果的概率和发生次数,即p=c(p1, p2, ..., pk)
, x=c(x1, x2, ..., xk)
。
multi <- function(p, x) {
n <- sum(x) ##试验次数
f1 <- prod(p^x)
f2 <- prod(factorial(x))
factorial(n)*f1/f2 ##返回值
}
来看个实际的例子:
巴萨 VS 皇马西班牙足球甲级联赛(简称“西甲”)已经成为世界上最高水平的足球联赛之一,吸引了世界球迷的目光,巴萨与皇马的德比之战更是令世界瞩目。截止目前,巴萨在历史上和皇马交手178次,拿到了71胜35平72负的战绩。如果接下来巴萨与皇马将进行6场比赛,求巴萨3胜1平2负的概率是多少?
分析:根据历史数据,我们可统计得到每种结果的统计概率,巴萨胜、平、负三种结果的统计概率分别为71/178
、35/178
和72/178
。假定在新的比赛开始前,胜平负的历史统计概率保持不变(实际上,随着球队各种情况的变化,胜平负的概率会发生变化),运用多项分布(三项分布)的概率计算公式可以计算得到6场比赛中巴萨3胜1平2负的概率为:
> p <- c(71, 35, 72)/178
> x <- c(3, 1, 2)
> multi(p, x)
[1] 0.1225009
从计算结果可知,巴萨获得3胜1平2负的概率是比较小的(约12%)。巴萨与皇马的德比之战吸引人们高度关注的因素有很多,比如有强强对话、场面火爆、球星云集等,其中有一个非常重要的因素在于比赛结果难以预测,充满了偶然性,比赛不同结果的发生概率小恰恰说明了这一点。
3.2 模拟试验过程
利用sample()
函数,我们可以模拟试验过程。还是用上面的例子来说明,假如巴萨将与皇马比赛10000次,巴萨的战绩将如何?
sample()
函数的用法可参考R语言初级教程(17): 随机数、随机抽样这篇博客
> a <- c('胜', '平', '负')
> p <- c(71, 35, 72)/178 ##巴萨胜、平、负各概率值
> n <- 10000 ##比赛场数
> set.seed(18)
> result <- sample(a, n, replace=TRUE, prob=p) ##replace=TRUE表示可重复抽样
> head(result, 20) ##前20场比赛的结果
[1] "平" "胜" "平" "负" "负" "胜" "负" "胜" "负" "负" "胜" "胜" "负" "负" "平" "负"
[17] "胜" "负" "平" "负"
> table(result) ## 计数
result
负 平 胜
4022 1958 4020
> n*p[1] ##巴萨获胜场数的理论值
[1] 3988.764
> n*p[2] ##巴萨打平场数的理论值
[1] 1966.292
> n*p[3] ##巴萨输皇马场数的理论值
[1] 4044.944
计算结果显示,当比赛次数足够大(这里为10000),巴萨战绩与理论值很接近。
多项分布的介绍就到此结束,希望对大家的学习有所帮助,也希望大家多多支持本公众号。
感谢您的阅读!想了解更多有关技巧,请关注我的微信公众号“R语言和Python学堂”,我将定期更新相关文章。