Hi Dennis,
  Thank you for your kind reply. Yes, essentially, we take integration
twice. However, I still have a few questions:
  First, if we consider doing a double integration at the end, since the
first integration in within the indicator function,
it seems to be difficult.

  Second, m1star is a univariate function, say, of x, since I already take
the integration. Then T is an univariate
function of x and func2 is a function of  x and c. It seems to make sense
if I integrate func2 with respect to x.

  Can you give more hint in terms of doing a double integration? Thank you
again.
           Hannah
2011/2/17 Dennis Murphy <djmu...@gmail.com>

> Hi Hannah:
>
> You have a few things going on, but the bottom line is that numer and denom
> are both double integrals.
>
>  On Thu, Feb 17, 2011 at 1:06 PM, li li <hannah....@gmail.com> wrote:
>
>> Hi all,
>>   I have some some problem with regard to finding the integral of a
>> function containing an indicator function.
>> please see the code below:
>>
>>
>> func1 <- function(x, mu){
>>  (mu^2)*dnorm(x, mean = mu, sd = 1)*dgamma(x, shape=2)}
>>
>
> curve(func1(x, 10), 0, 20)
> curve(func1(x, 5), 0, 20)
>
> both yield reasonable plots, so this is a function of one variable when mu
> is supplied. If you wanted to plot this as a function of mu, you could get a
> single curve by fixing x or integrating over x, which is what m1star appears
> to be doing.
>
> m1star <- function(x){
>>   integrate(func1, lower = 0, upper = Inf,x)$val}
>>
>
> u <- seq(0, 20, 0.05)
> v <- sapply(u, m1star)
> plot(u, v, type = 'l')
>
> yields a plot of m1star, which appears to marginalize func1 to make it a
> function of mu, from what I can tell.
>
>  T <- function(x){
>>   0.3*dnorm(x)/(0.3*dnorm(x)+0.7*m1star(x))}
>>
>
> plot(u, sapply(u, T), type = 'l')
>
> yields a plot of T, but having to use sapply() indicates that T also
> marginalizes a 2D function.
>
>
>
>> func2 <- function(x,c){(T(x) <=c)*0.3*dnorm(x)}
>> func3 <- function(x,c){(T(x) <= c)*(0.3*dnorm(x)+0.7*m1star(x))}
>>
>
> func2 uses T, which in turn uses m1star, so func2 is a marginalization of a
> 2D function whose support is on T(x) <= c. To integrate func2, you have to
> do the integration in m1star first, so basically you have a double integral
> to evaluate in numer. The same problem occurs in func3, since m1star() is a
> part of both T() and the convex combination. Therefore, denom also requires
> double integration.
>
>
>> numer <- function(c){
>>   integrate(func2, -Inf, Inf, c)$val}
>>
>> denom <- function(c){
>>   integrate(func3, lower, Inf,c)$val}
>>
>> Look into cubature or Rcuba for two packages that are capable of
> performing numerical double integration. An alternative solution is to use
> approxfun() to create a function object from evaluations of m1star and T,
> and then use the approxfun()s as the functions to be integrated in numer and
> denom. If you decide to go the approxfun route, make sure to make enough
> evaluations to reasonably capture the curvature in both m1star and T.
>
> HTH,
> Dennis
>
>>
>>
>> The error message is as below :
>>
>> > numer(0.5)
>> Error in integrate(func1, lower = 0, upper = Inf, x) :
>>  the integral is probably divergent
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to