Hi:
Thank you for your reply. I realize that I did not state the problem
clearly before.
Here is the problem again.
Let X = (X1, X2, ..., Xn) and Y=(Y1,Y2,...,Yn). Xi's can be 0 or 1.
When Xi=1, Yi is distributed as N(2,1). When Xi=0, Yi is distributed as
N(0,1).
There are 2^n possible X values. For example, x=(0,0,...,0) , i.e. all xi is
0.
The summand is:
beta(a+sum(xi), b+n-sum(xi) ) * [ (1-x1) * dnorm(y1, 0, 1) + x1 * dnorm(y1,
2, 1) ] *
[(1-x2) * dnorm(y2, 0, 1) + x2 * dnorm(y2, 2, 1) ] * ...* [ (1-xn) *
dnorm(yn, 0, 1) + xn * dnorm(yn, 2, 1) ]
where sum(xi)=x1 + x2 + ... + xn.
For example, when x=(0,0,...,0) , i.e. all xi is 0. The summand is
beta(a, b+n) * dnorm(y1, 0, 1) * dnorm(y2, 0, 1) * ...* dnorm(yn, 0, 1)
I want to take the sum of the summand over all possible X values. There are
2^n of them.
I am wondering whether there is a function in R that can take care of this
kind of sum.
Thank you
2009/12/15 Dennis Murphy <djmuser@gmail.com>
> Hi:
>
> Your expression makes no sense in that I don't see where the summation
can
> obtain 'over all 2^n possible values...' the way you wrote it. How
about
> this?
>
> Let x = (x1, x2, ..., xn). The summand can be then be expressed in R as
>
> beta(a + sum(x), b + n - sum(x)) * ((1 - x) * dnorm(x, 0, 1) + x *
> dnorm(x, 2, 1)) .
>
> The beta function term is a scalar, the second expression is a vector.
> Do you want the sum of the products of the vector elements? If so, it
> should be as easy as
>
> beta(a + sum(x), b + n - sum(x)) * sum((1 - x) * dnorm(x, 0, 1) + x *
> dnorm(x, 2, 1))
>
> If, on the other hand, you meant to write the summand as
>
> beta(a + x, b + 1 - x) * ((1 - x) * dnorm(x, 0, 1) + x * dnorm(x, 2, 1)) ,
>
> then the sum is
>
> sum(beta(a + x, b + 1 - x) * ((1 - x) * dnorm(x, 0, 1) + x * dnorm(x, 2,
> 1))
>
>
> More below...HTH
> Dennis
>
> On Mon, Dec 14, 2009 at 6:38 PM, li li <hannah.hlx@gmail.com> wrote:
>
>> Hello,
>> Can anyone give me some suggestion in term of calculating the sum
below.
>> Is there a function in R that can help doing it faster?
>>
>> x1, x2, ...xn where xi can be 0 or 1. I want to calculate the
following:
>>
>> sum{ beta[a+sum(xi), b+n-sum(xi) ]* [ (1-x1)dnorm(0,1)+x1dnorm(2,1) ]*
[
>> (1-x2)dnorm(0,1)+x2dnorm(2,1) ]* ...* [ (1-xn)dnorm(0,1)+xndnorm(2,1) ]
}
>>
>
> The problem I have is that you're taking the product of the n normal
> mixtures and then
> you somehow want to sum over them; if
> this is meant to be a likelihood function, then it seems that you would
> want
>
> beta(a+sum(x), b+n-sum(x)) * prod((1 - x) * dnorm(x, 0, 1) + x * dnorm(x,
> 2, 1))
>
> instead. As I said up front, it's not clear what you really want, so I
> leave you with
> multiple possibilities in the hope that one of them is what you need...
>
>
>> The sum in the beginning is over all 2^n possible values for the vector
>> x1,
>> x2, ...xn .
>>
>> Thank you very much!
>>
>> Hannah
>>
>> [[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]]