手动计算多元正态分布的密度

时间:2020-04-09 11:26:00

标签: r function normal-distribution probability-density

我想手动计算多元正态分布的密度。作为函数的输入,我有x,它是数据点的n*p矩阵,向量mun的均值以及协方差矩阵sigma p*p变暗。

我为此编写了以下函数:

`dmnorm <- function(mu, sigma, x){
k <- ncol(sigma)
x <- t(x)
dmn <- exp((-1/2)*t(x-mu)%*%solve(sigma)%*%(x- 
mu))/sqrt(((2*pi)^k)*det(sigma))  
return(dmn)
}`

我自己的函数给了我n*n的矩阵。但是,我应该得到一个长度为n的向量。

最后,我希望获得与使用dmvnorm()包中的mvtnorm函数获得的结果相同的结果。我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

表达式t(x-mu)%*%solve(sigma)%*%(x- mu)为p x p,因此这就是您的结果是该大小的原因。您想要该矩阵的对角线,可以使用

diag(t(x-mu)%*%solve(sigma)%*%(x-mu))

因此完整功能应该是

dmnorm <- function(mu, sigma, x){
  k <- ncol(sigma)
  x <- t(x)
  dmn <- exp((-1/2)*diag(t(x-mu)%*%solve(sigma)%*%(x- 
    mu)))/sqrt(((2*pi)^k)*det(sigma))  
  dmn
}