dmnorm()函数有多种方法

时间:2011-10-23 15:19:50

标签: r distribution multidimensional-array

我一直在搜索答案,但除了off. R docs之外没有找到任何关于此功能的信息。

如果我想用不同的平均值或标准偏差来计算相同x中的1维正态分布的值,我只需要调用

dnorm(x, mu, sigma)

其中mu和sigma将是具有所需方法和sigma的数组。 当x和mu是向量而sigma是协变矩阵时,有没有办法用mnormt模块执行dmnorm函数的相同技巧?

P.S。:对不起我的英文,谢谢你的回答。

1 个答案:

答案 0 :(得分:3)

在R中,函数集合称为“包”。如果函数未在其参数中进行矢量化,则可以将一个参数作为带有sapply的向量或带有mapply的并行列表集传递给它。所以你应该考虑数学问题,特别是'均值'不再是一个数字而是一个向量,而sigma(dmnorm称之为'varcov')不再是一个数字而是一个数字矩阵。帮助页面中的第一个示例为您提供了21个不同的x,y,z和单个均值向量和sigma矩阵的密度。

使用该示例作为起点,列出7 x,y,x和7种不同的均值和sigma,然后将mapply列为xyz中的前7项:

 x <- seq(-2,4)
 y <- 2*x+10
 z <- x+cos(y) 
 mu <- c(1,12,2)
Sigma <- matrix(c(1,2,0,2,5,0.5,0,0.5,3), 3, 3) 
lsig <- lapply(seq(-2,4)/10, "+", Sigma);  lmean<-lapply(seq(-2,4)/10, "+",mu)

mapply(dmnorm, x=as.data.frame(t(cbind(x,y,z)[1:7,])), mean=lmean,  varcov=lsig)
#        V1        V2        V3        V4        V5        V6        V7 
# 6.177e-06 6.365e-04 5.364e-03 3.309e-02 2.205e-02 6.898e-03 1.077e-03