Skip to content

Integration of mixed normal distribution

3 messages · Johannes Radinger, Rui Barradas, David Winsemius

#
Hi,

I already found a conversation on the integration of a normal
distribution and two
suggested solutions
(https://stat.ethz.ch/pipermail/r-help/2007-January/124008.html):

1) integrate(dnorm, 0,1, mean = 0, sd = 1.2)

and

2) pnorm(1, mean = 0, sd = 1.2) - pnorm(0, mean = 0, sd = 1.2)

where the pnorm-approach is supposed to be faster and with higher precision.

I want to integrate a mixed normal distribution like:
normaldistr_1 * p + normaldistr_2 * (1-p)

where p is between 0 and 1 and the means for both distributions are 0
but the standard deviations differ.

In addition, I want to get the integrals from x to infinity or from -
infinity to x for
the mixed distribution.

Can that be done with high precision in R and if yes how?

best regards,

Johannes
#
Hello,

You could do something like the following.


fun <- function(x, mean, sd1, sd2, p)
	dnorm(x, mean, sd1)*p + dnorm(x, mean, sd2)*(1 - p)

fun2 <- function(x1, x2, mean, sd1, sd2, p){
	p1 <- pnorm(x2, mean, sd1) - pnorm(x1, mean, sd1)
	p2 <- pnorm(x2, mean, sd2) - pnorm(x1, mean, sd2)
	p1*p + p2*(1 - p)
}

integrate(fun, 0, 1, mean = 0, sd1 = 1, sd2 = 2, p = 0.5)
fun2(0, 1, mean = 0, sd1 = 1, sd2 = 2, p = 0.5)


Hope this helps,

Rui Barradas


Em 30-01-2013 09:19, Johannes Radinger escreveu:
#
On Jan 30, 2013, at 4:19 AM, Johannes Radinger wrote:

            
I think if you check any calculus text you will find a theorem stating  
that

integral( a*f(x) + b*g(x) ) = a*integral(f(x)) + b*integral(g(x))
The application to this problem seems straightforward. The fact that  
you are using the range of -Inf to x should make the calculations  
easier.