MATLAB Answers

sampling error from a truncated normal distribution

4 views (last 30 days)
piyius raj
piyius raj on 16 Mar 2020
Answered: Jeff Miller on 16 Mar 2020
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

  0 Comments

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 16 Mar 2020
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

Show 2 older comments
piyius raj
piyius raj on 16 Mar 2020
Hi Walter,
I am interested in constructing a probability distribution in an interval which I generated
pd = makedist('Normal','mu',d_mu,'sigma',d_sig); % normal distribution
tpd = truncate(pd,0,t); % truncated normal distribution
"tpd" is a probability distribution with area 1.
Now I want to sample some data from this distribution which I did by
d_tnorm = random(tpd,n,1); % sample from truncated normal
now if I am plotting "tpd" and histogram of "d_tnorm" data, both should match but they do not. Hope it clears my problem.
piyius raj
piyius raj on 16 Mar 2020
Sorry. The correct code is
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

Sign in to comment.


Jeff Miller
Jeff Miller on 16 Mar 2020
Change the histogram line to this:
histogram(d_tnorm,30,'Normalization','pdf')

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products


Release

R2018a