多元正态分布的密度

R 中的多元概率分布

Surajit Ray

Professor, University of Glasgow

为何要计算分布的密度?

R 中的多元概率分布

为何要计算分布的密度?

R 中的多元概率分布

单变量正态函数 dnorm() 正态

R 中的多元概率分布

二元正态的概率密度

标准二元正态,$$ \mu = \begin{pmatrix} 0 \\ 0 \end{pmatrix} , \Sigma = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} $$ 动画

dmvnorm() 函数

在多个位置(xy 坐标)计算密度高度

密度

R 中的多元概率分布

使用 dmvnorm 计算密度

library(mvtnorm)
dmvnorm(x, mean, sigma)
  • x 可以是行向量或矩阵

 

mu1 <- c(1, 2)
sigma1 <- matrix(c(1, .5, .5, 2), 2)
dmvnorm(x = c(0, 0), mean = mu1, sigma = sigma1)
0.0384
R 中的多元概率分布

用 dmvnorm 在多点计算密度

x <- rbind(c(0, 0), c(1, 1), c(0, 1)); x 
[1,]    0    0
[2,]    1    1
[3,]    0    1

 

dmvnorm(x = x, mean = mu, sigma = sigma)
[1] 0.0384 0.0904 0.0679
R 中的多元概率分布

用透视图绘制二元密度

步骤:

  • 创建 x 与 y 坐标网格
  • 在网格上计算密度

R 中的多元概率分布

用透视图绘制二元密度

步骤:

  • 创建 x 与 y 坐标网格
  • 在网格上计算密度
  • 将密度转换为矩阵
  • 使用 persp() 绘制透视图

R 中的多元概率分布

绘制二元密度的代码

# 创建网格
d <- expand.grid(seq(-3, 6, length.out = 50 ), seq(-3,  6, length.out = 50))                   

# 在网格上计算密度
dens1 <- dmvnorm(as.matrix(d), mean=c(1,2), sigma=matrix(c(1, .5, .5, 2), 2))

# 转为矩阵 
dens1 <-  matrix(dens1, nrow = 50 )

# 使用透视图
persp(dens1, theta = 80, phi = 30, expand = 0.6, shade = 0.2, col = "lightblue", xlab = "x", ylab = "y", zlab = "dens")

R 中的多元概率分布

在透视图中更改视角

persp()theta = 30, phi = 30

persp()theta = 80, phi = 10

R 中的多元概率分布

Passons à la pratique !

R 中的多元概率分布

Preparing Video For Download...