Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need expected values of a list where the random variable to take expectations over should be an input into expressions defined earlier. I suspect Set[] and SetDelayed[] tripped me. (Or Map and Table?)

I hope the intention is reasonably clear from the code: I am interested in expressions of six numbers in [0,1] where I suspect (model) that they have been measured with error (errors being independent and uniform here, but answers truncated to lie in the meaningful range anyway). I don't get the solution I expect, only an expression substituted into.


AList = {a1,a2,a3,a4,a5,a6}
answers := (Min[1,Max[# ,0]])& /@ (AList+errors)
dlist ={answers[[5]],answers[[6]],answers[[3]]/answers[[1]],answers[[4]]/answers[[2]]} 
deltasbetas = Expectation[dlist,errors\[Distributed]Table[UniformDistribution[],{6}]]

(note that errors are defined within Expectation, as I think it should be) Output:

{Min[1,Max[0,0.8 +UniformDistribution[{0,1}]]],Min[1,Max[0,0.7 +UniformDistribution[{0,1}]]],Min[1,Max[0,0.5 +UniformDistribution[{0,1}]]]/Min[1,Max[0,0.8 +UniformDistribution[{0,1}]]],Min[1,Max[0,0.4 +UniformDistribution[{0,1}]]]/Min[1,Max[0,0.7 +UniformDistribution[{0,1}]]]}
share|improve this question
what are AList and errors? – R. M. Jul 13 '12 at 13:39
I think you need to use TransformedDistribution ... but how?:) – kglr Jul 13 '12 at 14:41
I think maybe you have to explicitly use something like {e1, e2, e3, e4, e5, e6} \[Distributed] UniformDistribution[{{0,1},{0,1},{0,1},{0,1},{0,1},{0,1}}] instead of just one errors variable. – Silvia Jul 13 '12 at 14:56
errors=Array[er,6] before you use errors; and then use errors \[Distributed] UniformDistribution[Table[{0, 1}, {6}] instead of errors \[Distributed] Table.... – kglr Jul 13 '12 at 15:12
@László, pls ignore the Thread comment. Regarding er going undefined, errors=Array[er,{6}] defines errors as a list with 6 elements with names er[1] thru er[6]. So, you can use the symbol errors instead of {e1,e2,...,e6}. – kglr Jul 13 '12 at 15:46

If there is no way to use a "list variable" for the random vector, an explicit list of scalars can be filled in with the right distribution, thanks to @Silvia:

underlying := {0.8, 0.7, 0.5, 0.4, 0.8, 0.7}
answers := (Min[1, Max[# , 0]]) & /@ (underlying + {e1, e2, e3, e4, e5, e6})
dlist := {answers[[5]], answers[[6]], answers[[3]]/answers[[1]], answers[[4]]/answers[[2]]} 
deltasbetas = Expectation[dlist,
         {e1, e2, e3, e4, e5, e6} \[Distributed] UniformDistribution[Table[{0, 0.1}, {6}]]]

{0.85, 0.75, 0.647807, 0.600891}
share|improve this answer
You are welcome :) – Silvia Jul 13 '12 at 15:10

Using assumptions on the aList, namely, that all a[i]s are in the unit interval, we get symbolic results for Expectation:

aList = Array[a, {6}];
errors = Array[er, 6];
answers = (Min[1, Max[#, 0]]) & /@ (aList + errors);
dlist = {answers[[5]], answers[[6]], answers[[3]]/answers[[1]], answers[[4]]/answers[[2]]};
deltasbetas = Expectation[dlist, 
errors \[Distributed] UniformDistribution[Table[{0, 1}, {6}]], 
Assumptions -> {And @@ Table[0 < a[i] <= 1, {i, 6}]}]

we get

enter image description here

EDIT 1: For UniformDistribution[0,1/10]

 Expectation[dlist,  errors \[Distributed] 
 UniformDistribution[Table[{0, 1/10}, {6}]], Assumptions -> {And @@ Table[0 < a[i] <= 1, {i, 6}]}]

we get

enter image description here

Evaluating at underlying:

 % /. Thread[aList -> underlying]

we get

{0.85, 0.75, 0.647807, 0.600891}

EDIT 2: Alternative specifications of the joint distribution under Expectation:

 Expectation[dlist, errors \[Distributed] 
 ProductDistribution[Table[UniformDistribution[], {6}]], 
 Assumptions -> {And @@ Table[0 < a[i] <= 1, {i, 6}]}]

give the same result.

So does

 trdist = TransformedDistribution[dlist, 
 errors \[Distributed] UniformDistribution[Table[{0, 1}, {6}]]];
 Expectation[z, z \[Distributed] trdist, 
 Assumptions -> {And @@ Table[0 < a[i] <= 1, {i, 6}]}]
share|improve this answer
Nice, thank you! So I can Manipulate the result be giving it values of aList (or a?) And still Plot the resulting list in terms of the range of the error distribution (simply numerically 1 in the example)? – László Jul 13 '12 at 16:30
Only 40 more to 10k (which you should reach today). Congrats in advance! :) – R. M. Jul 13 '12 at 18:43
@R.M thank you!! – kglr Jul 13 '12 at 18:53

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.