R语言统计学R统计

R统计学(04): 多项分布

2018-12-15  本文已影响17人  R语言和Python学堂

前面我们介绍了四种离散型概率分布,包括伯努利分布、二项分布、几何分布以及超几何分布,大家可以点击下方链接来回顾:

今天我们介绍另一个离散分布:多项分布(Multinomial distribution),它是二项分布的推广。

1. 特点

二项分布的试验结果只有两个(成功和失败),而多项分布的试验结果则多于两个。如果试验的结果有三个,则是三项分布;如果结果有六个,则是六项分布。现实生活中也有很多符合多项分布的例子:例如,扔骰子,结果点数有六种可能(骰子有6个面对应6个不同的点数);足球比赛的结果有胜、平、负三种。参照二项分布试验的特点,多项分布试验的特点如下:

2. 概率分布

假设某个多项分布试验可能发生结果的数量为k,依据历史数据,每种结果发生的统计概率分别为p1, p2, …, pk。现在进行n次多项分布试验,假设观测到结果a1的次数为x1次,结果a2的次数为x2次,…,结果ak的次数为xk次,那么多项分布的联合概率函数为:

P(X_1=x_1, X_2=x_2, ..., X_k=x_k)=\frac{n!}{x_1!x_2!···x_k!}{p_1}^{x_1}{p_2}^{x_2}···{p_k}^{x_k}

多项分布对其每一个结果都有均值和方差,分别为:

E(x_i)=np_i

Var(x_i)=np_i(1-p_i)

从上可知,多项分布的均值和方差类似于二项分布

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/17835/17872/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学堂”,我将定期更新相关文章。

上一篇下一篇

猜你喜欢

热点阅读