[R] mnormt and mvtnorm
Shh
shh102004 at yahoo.com
Sun Feb 15 19:56:29 CET 2009
Hi R user,
I came across a question when I played around with mnormt package (mvtnorm as well), could any of you let me know where I made the mistake? Thanks!
For instance, with a multivariate normal distribution with known mean and variance (to be simple, I tried the i.i.d case first)
u1 <- u2 <- u3 <- 1
test <- function(x) {2*x*dnorm(x,u1)* pmnorm(rep(x,1),c(u2),diag(1)) }
value1 <- integrate(test , lower=-Inf, upper=Inf)$value
testA <- function(x) {2*x*dnorm(x,u1,1)*pnorm(x,u2)}
value1A <- integrate(testA , lower=-Inf, upper=Inf)$value
value1
#[1] 1.564190
value1A
#[1] 1.564190
# when pmnorm handle the univariate case, it is the same as pnorm. However, when I extended to multivariate, I got a confusing result:
test2 <- function(x) {x*dnorm(x,u1)*pmnorm(rep(x,2),c(u2,u3),diag(2)) }
value2 <- integrate(test2 , lower=-Inf, upper=Inf)$value
test2A <- function(x) {x*dnorm(x,u1)*pnorm(x,u2)*pnorm(x,u3)}
value2A <- integrate(test2A , lower=-Inf, upper=Inf)$value
value2
# [1] 0.6997612
value2A
# [1] 0.6154281
# I assume value2=value2a since they are independent, am I right? Also when I used some acutual values, I got:
pmnorm(rep(0,2),c(u2,u3),diag(2))
# [1] 0.02517149
pnorm(0,u2)*pnorm(0,u3)
# [1] 0.02517149
test3 <- function(x) {x*dnorm(x,u1)*dmnorm(rep(x,2),c(u2,u3),diag(2)) }
value3 <- integrate(test3 , lower=-Inf, upper=Inf)$value
test3A <- function(x) {x*dnorm(x,u1)*dnorm(x,u2)*dnorm(x,u3)}
value3A <- integrate(test3A , lower=-Inf, upper=Inf)$value
value3
#[1] 0
value3A
# [1] 0.09188815
# I got they same with an actual value:
dmnorm(rep(0,2),c(u2,u3),diag(2))
#[1] 0.05854983
dnorm(0,u2)*dnorm(0,u3)
# [1] 0.05854983
Similar thing occurred in mvtnorm I got three different results with mvtnorm, mnormt and pnorm.
More information about the R-help
mailing list