sampling error from a truncated normal distribution
Show older comments
Hi everyone,
Please see the code below. I tried to sample from a truncated normal distibution but the sample histogram is not matching with the actual truncated distribution plot. Can anyone help me with this.
t = 0.01;
n = 10000;
d_mu = 0.0052;
d_COV = 61.35;
d_sig = d_COV*d_mu/100;
pd = makedist('Normal','mu',d_mu,'sigma',d_sig); % normal distribution
tpd = truncate(pd,0,t); % truncated normal distribution
d_norm = random(pd,n,1); % sample from normal
d_tnorm = random(tpd,n,1); % sample from truncated normal
x = linspace(-.01,.02,n);
figure
plot(x,pdf(pd,x))
hold on
plot(x,pdf(tpd,x),'LineStyle','--')
histogram(d_tnorm,30)
legend('Normal','Truncated','Truncated bar')
hold off

Answers (2)
Walter Roberson
on 16 Mar 2020
0 votes
When you use truncate(), it does not make the samples outside the range just vanish: it adjusts the distribution so that the total is still 1.
Truncated distribution, returned as a probability distribution object. The probability distribution function (pdf) of t is 0 outside the truncation interval. Inside the truncation interval, the pdf of t is equal to the pdf of pd, but divided by the probability assigned to that interval by pd.
5 Comments
piyius raj
on 16 Mar 2020
Walter Roberson
on 16 Mar 2020
In order for there to be a match like you want, what you would have to have is something that drew randomly from the normal distribution and threw away the samples outside the truncation region. The result would not be a probability distribution -- it would not have the required pdf and cdf properties to be a probability distribution.
The Statistics Toolbox truncate() operation, on the other hand, constructs something that is still a probability distribution, by dividing the pdf of the truncated area by the probability of the interval, getting out something whose total probability is still 1.
For example, there is some point on the normal distribution that where the probability is 1/10, and you want the probability to still be 1/10 for that point, but it can't be 1/10 anymore because the probability of selecting anything outside the truncated area is 0 and the total probability that was originally outside the truncation area has to go somewhere.
piyius raj
on 16 Mar 2020
Walter Roberson
on 16 Mar 2020
d_pit_COV and d_pit_mu are not defined.
piyius raj
on 16 Mar 2020
Jeff Miller
on 16 Mar 2020
Change the histogram line to this:
histogram(d_tnorm,30,'Normalization','pdf')
Categories
Find more on Student's t Distribution in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!