[R] integration function

Peter Ehlers ehlers at ucalgary.ca
Sun Jun 26 17:04:01 CEST 2011


On 2011-06-26 06:34, li li wrote:
> Thank you all for the answering.
> Sorry I did not state the problem clearly. I want to take the
> integration with respect to mu, not x.
> For example, f1 should have been a function of x after integrating mu
> out of f(x, mu) which is the following:
> f(x, mu)=dnorm(x, mean=mu, sd=1)*dnorm(mu, mean=2, sd=1).

So you probably want something like:

  h <- function(mu, x) dnorm(x, mu, 1) * dnorm(mu, 2, 1)
  f1 <- function(x)
     integrate(function(mu, x) h(mu, x), -Inf, Inf, x)$value

In your original formulation (below), all you have
to do is change

    {integrand <- function (x, mu){

to

    {integrand <- function (mu, x){


Peter Ehlers

>
> Thank you!
>        Hannah
>
>
> f1<- function(x)
>
>      {integrand <- function (x, mu){
>
> dnorm(x, mean=mu, sd=1)*dnorm(mu, mean=2, sd=1)
>
>                                     }
>
> integrate(integrand, -Inf, Inf,x)$val
>
> }
>
>
> f2<- function(x)
>
>      {integrand <- function (x, mu){
>
> dnorm(x, mean=mu, sd=1)*mu^2*dnorm(mu, mean=2, sd=1)
>
>                                     }
>
> integrate(integrand, -Inf, Inf,x)$val
>
> }
>
>
>
> 2011/6/25 Peter Ehlers <ehlers at ucalgary.ca <mailto:ehlers at ucalgary.ca>>
>
>     On 2011-06-25 08:48, li li wrote:
>
>         Hi all,
>             Can anyone please take a look at the following two functions.
>         The answer does not seem to be right.
>             Thank you very much!
>
>         f1<- function(x)
>
>              {integrand<- function (x, mu){
>
>              dnorm(x, mean=mu, sd=1)*dnorm(mu, mean=2, sd=1)
>
>                                             }
>
>              integrate(integrand, -Inf, Inf,x)$val
>
>              }
>
>
>         f2<- function(x)
>
>              {integrand<- function (x, mu){
>
>              dnorm(x, mean=mu, sd=1)*mu^2*dnorm(mu, mean=2, sd=1)
>
>                                             }
>
>              integrate(integrand, -Inf, Inf,x)$val
>
>              }
>
>
>     Your x and mu will get mightily confused.
>     The argument x in f1 is in fact used as the argument mu
>     in integrand() because, as the help page clearly indicates,
>     additional arguments follow the lower/upper limits in integrate().
>
>     A cleaner version of what you're doing is the following:
>
>       f1 <- function(mu){
>
>        integrand <- function (x, mu){
>          dnorm(x, mean=mu, sd=1) * dnorm(mu, mean=2, sd=1)
>        }
>        integrate(integrand, -Inf, Inf, mu)[["value"]]
>       }
>
>     But then again, you could just evaluate dnorm(mu, 2, 1).
>     So I suspect that you want something different.
>
>     Ditto for f2.
>
>     Peter Ehlers
>
>
>
>                 [[alternative HTML version deleted]]
>
>         ________________________________________________
>         R-help at r-project.org <mailto:R-help at r-project.org> mailing list
>         https://stat.ethz.ch/mailman/__listinfo/r-help
>         <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.
>
>
>



More information about the R-help mailing list