Hi David,

Thanks for explaining that, I see how that causes problems when S is not a
set of numbers. Even so, would it make sense for the random variable ps to
be the identity function X(x) = x on the probability space ps? Currently the
random variable ps is the function X(x) = P(x). Is this a useful random
variable that I'm just not aware of?

One way to accomplish this is to override expectation in the
DiscreteProbabilitySpace class with the one you sent earlier. We would also
need to do this for variance, covarience, etc., so I admit this is probably
not the ideal solution.

-- Paul

On Mon, Dec 1, 2008 at 3:48 AM, William Stein <[EMAIL PROTECTED]> wrote:

>
> [Another response in this thread from David Kohel (who maybe should be
> posting on list)]
>
> Hi William and Paul,
>
> Actually, I correct myself -- the average should be over the values
> of the function, weighted by the probabilities.  The domain of the
> function (the keys) can be in any set (e.g. "A","B","C"), so the
> current behavior is correct.
>
> In the defintition of the probability space itself:
>
> sage: ps = DiscreteProbabilitySpace([1,2,3],{1:1/3,2:1/3,3:1/3})
>
> Consider replacing the domain of ps with such a set.  Then it
> should be clear that you can't average over "A", "B", and "C".
>
> S = ["A","B","C"]
> P = {}
> for i in range(3):
>   P[S[i]] = 1/3
>
> ps = DiscreteProbabilitySpace(S,P)
> ps.expectation() # 0.33
>
> This is the random variable with
>
>  f("A") = 1,
>  f("B") = 2,
>  f("C") = 3,
>
> for which the expectation is 2:
>
> f = {}
> for i in range(3):
>   f[S[i]] = i+1
>
> rv = DiscreteRandomVariable(ps,f)
> rv.expectation() # 2.00
>
> On the other hand, I'd be happy with some syntax for creating a
> random variable with the uniform distribution P(x) = 1/n on some
> set or tuple. Currently this gives an error:
>
> sage: rv = DiscreteRandomVariable(S,f)
>
> but it could easily create the uniform distribution on S behind
> the scenes.  The reason I didn't do this is the following:
>
> sage: ps1 = DiscreteProbabilitySpace(S,P)
> sage: ps2 = DiscreteProbabilitySpace(S,P)
> sage: ps1 == ps2
> False
>
> Probably this should be considered a bug.  But to avoid creating
> many copies of the "same" space, one should consider caching the
> probability spaces.  However, since dictionaries are mutable, it
> can't be cached.
>
> The correct solution might be to define additional types for the
> uniform distribution and other standard distributions (which are
> the most likely candidates to be created over and over) and have
> only one instance of each.
>
> My type DiscreteProbabilitySpace is also too naive -- it really
> only implements a FiniteProbabilitySpace.
>
> It is suitable for the examples I've taught in classical cryptography,
> but for a statistics class one certainly needs infinite discrete
> probability spaces and more classes for distributions on continuous
> intervals.
>
> Some thought also needs to be given to their ease of use.  The
> usual approach to this is to first write some documentation which
> describes the desired behavior and then implement the classes and
> functions.
>
> --David
>
> ----- Forwarded message from "David R. Kohel" <[EMAIL PROTECTED]>
> -----
>
> Date: Mon, 1 Dec 2008 09:04:12 +0100
> From: "David R. Kohel" <[EMAIL PROTECTED]>
> To: William Stein <[EMAIL PROTECTED]>
> Cc: Paul Butler <[EMAIL PROTECTED]>
> Subject: Re: Fwd: [sage-devel] Expected value of probability space
> User-Agent: Mutt/1.5.6i
>
> Dear William, Paul,
>
> Indeed, the function definition should be:
>
>   def expectation(self):
>       r"""
>       The expectation of the discrete random variable, namely
> $\sum_{x \in S} p(x) X[x]$,
>       where $X$ = self and $S$ is the probability space of $X$.
>       """
>       E = 0
>       Omega = self.probability_space()
>       for x in self._function.keys():
>           E += Omega(x) * x
>       return E
>
> rather than:
>
>   def expectation(self):
>       r"""
>       The expectation of the discrete random variable, namely
> $\sum_{x \in S} p(x) X[x]$,
>       where $X$ = self and $S$ is the probability space of $X$.
>       """
>       E = 0
>       Omega = self.probability_space()
>       for x in self._function.keys():
>           E += Omega(x) * self(x)
>       return E
>
> Cheers,
>
> David
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to