How to draw random number from a conditional distribution
17 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
yanting wu
el 23 de Sept. de 2019
Hi, dear friends,
I am working a drawing 10000 random numbers for variable, X, based on the following two conditions:
condition 1: X follows a normal distribution with mean=12.21 and standard deviation = 0.63;
condition 2: given another variable Y, the probability of X >= Y is 0.97: prob (X(n)>=Y(n) =0.97).
I know how to draw a random variable with specific mean and standard deviation, but I don't know how to plug in the second condition to my code.
Can anyone give me some help?
I do really appreciate.
Thank you again
Best,
Yanting
2 comentarios
the cyclist
el 23 de Sept. de 2019
Editada: the cyclist
el 23 de Sept. de 2019
I don't understand condition 2. What does n represent? What is X(n)?
Regardless, your condition 1 fully specifies the distribution. There is only one distribution that can obey all those conditions. So, I don't see how condition 2 can also be satisfied, in general.
Or maybe I am misunderstanding something.
Edit: Maybe Adam's answer is actually what you meant, in which case you can generate values using rejection sampling.
Respuesta aceptada
Adam Danz
el 23 de Sept. de 2019
Editada: Adam Danz
el 23 de Sept. de 2019
The first condition is easy,
X = randn(1,100000) * .63 + 12.21;
figure
histogram(X)
mean(X) % <--- ~12.21
std(X) % <--- ~0.63
To find the cuttoff of the distribution that defines 97% of the data on the right and 3% of the data on the left, you need to find the 3rd percentile of the data. Any value in X has a 97% chance of being greater than 'pt'.
pt = prctile(X,3); %stats toolbox
Now add a vertical reference line to the plot and convince yourself that 97% of the data are greater than this value.
xline(pt, 'k-', '3rd percentile')
mean(X > pt) % <--- ~97%
8 comentarios
Adam Danz
el 24 de Sept. de 2019
Yeah, that will be impossible as the figure shows in an earlier comment of mine (blue line). You'll never get 97% values in X>=Y if x and y are numbers from normal distributions with the means and std's you specified.
Más respuestas (1)
Bruno Luong
el 24 de Sept. de 2019
Editada: Bruno Luong
el 24 de Sept. de 2019
Your problem is not well defined, there are many Y that can meet such requirement (if you guys think it is impossible beside a scalar you are wrong). One these is given by this code:
mux = 12.21;
sigma = 0.63;
muy = fzero(@(muy) integral2(@(x,t) pdffun(x,t,muy), -Inf, Inf, 0, Inf)-0.97, 0);
muy = mux + sigma*muy; % 10.534298385905991 you can enter this value without using FZERO
X = mux + sigma*randn(1,1e6);
Y = muy + sigma*randn(1,1e6);
% Check how many X >= Y, it should be about 0.97
sum(X>=Y) / length(X)
function p = pdffun(x,t,muy)
y = x - t - muy;
p = 1/(2*pi)*exp(-x.^2/2).*exp(-y.^2/2);
end
1 comentario
Adam Danz
el 24 de Sept. de 2019
Editada: Adam Danz
el 24 de Sept. de 2019
"Your problem is not well defined, there are many Y that can meet such requirement (if you guys think it is impossible beside a scalar you are wrong)."
Agreed that the problem is not well defined but some valid interpretations of the problem (including the correct interpretation, according to OP) would result in impossibilities as I've shown above.
Interpretation 1
The distribution X only has 1 value where 97% of the data are greater than that value (the 3rd percentile). So it would be impossible to have a normal distribution with a known mean and known std and have multiple y values that define that boundary.
Interpretation 2
If 'n' random Ys are drawn from distribution y and 'n' random Xs are drawn from a distribution x, 97% of the Y(1:n) should be greater than X(1:n). Given the means and std's the OP defined, I've shown that this is indeed impossible and plotted the simulated results across 1000 repetitions where there were never more than ~60% Y values greater than their X pair.
Note that in your solution, the two distributions do not have the means and std's given by OP: "...generate 10000 observations for two normal distributed variables X (mean= 12.21, SD= 0.63) and Y (mean =12.01, SD=0.61)."-OP
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!