具有多种均值的 dmnorm() 函数

发布于 2024-12-11 14:19:07 字数 362 浏览 0 评论 0原文

我一直在搜索答案,但除了 之外,没有找到有关此功能的任何信息离开。 R 文档

如果我想计算具有不同均值或标准差的同一 x 中的一维正态分布的值,我只需调用

dnorm(x, mu, sigma)

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

PS:抱歉我的英语不好,谢谢你的回答。

I've been searching the answer but didn't find any information about this function except the off. R docs.

If i want to calculate the values of 1-dimentional normal distribution in the same x with different means or standard deviations i'll just call

dnorm(x, mu, sigma)

where mu and sigma will be arrays with desired means and sigmas.
Is there any way to perform same trick with dmnorm function from mnormt module, when x and mu are vectors and sigma is a covariation matrix?

P.S.: Sorry for my English, thanks for answers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

听你说爱我 2024-12-18 14:19:07

在 R 中,函数的集合称为“包”。如果函数的参数未进行向量化,则可以使用 sapply 将一个参数作为向量传递给它,或者使用 maply 作为一组并行化列表传递给它。因此,您应该考虑数学问题,尤其是“均值”不再是单个数字而是一个向量,并且 sigma(dmnorm 称为“varcov”)不再是单个数字而是一个矩阵。帮助页面中的第一个示例为您提供了 21 个不同 x、y、z 的密度以及单个均值向量和 sigma 矩阵。

使用该示例作为起点,创建 7 个 x、y、x 和 7 个不同均值和西格玛的列表,然后将其映射到 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 

In R the collections of functions are called "packages". If a function is not vectorized in its parameters, you can pass it one parameter as a vector with sapply or as a parallelized set of list with mapply. So you should consider the mathematical issue, especially that the 'mean' is no longer a single number but rather a vector, and that sigma (which dmnorm is calling 'varcov')is no longer a single number but rather a matrix. The first example in the help page gives you the densities of 21 different x,y,z's and a single mean vector and sigma matrix.

Using that example as a starting point, make a list of 7 x,y,x and 7 varying means and sigmas and then mapply it to the first 7 items in the xyz's :

 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 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文