how to use betafit for a data that is outside the range of 0 to 1.?

조회 수: 28 (최근 30일)
I have numbers between 10 to 20. If I try to use betafit it refuses to fit because the range is not from 0 to 1. If I have numbers from say .12 to .25 it lets me fit a beta. I am not sure why range has to limit my ability to fit a beta distribution to a dataset. Help please.
  댓글 수: 1
Pappu Murthy
Pappu Murthy 2022년 1월 12일
편집: Pappu Murthy 2022년 1월 12일
I would like to elaborate a bit. I have one data set where the numbers vary from a min 0.991 and max of 1.441. If I try to "betafit" to Data as it is, then it gives an error saying my data can not lie outside of 0-1 interval. So I used the command rescale(Data) which scaled the Data between 0 and 1. Now I beta fit and got the following picture which is clearly wrong. Picture Attached. What am I doing wrong here?

댓글을 달려면 로그인하십시오.

채택된 답변

John D'Errico
John D'Errico 2022년 1월 12일
편집: John D'Errico 2022년 1월 12일
You essentially have a 4 parameter beta distribution that you wish to fit. That is, the upper and lower limits can be part of it. But betafit only does the 2-parameter one, because estimating those bounds can be difficult.
Why do I say the bounds are difficult to estimate automatically? Because where the distrbution goes to zero at the end, exactly where does it become exactly zero? And on distributions where the PDF goes to infinity, now you have a singularity, and trying to figure out exactly where the singularity lies is again a nasty thing.
But you can simply shift and scale your data to [0,1], or [-1,1], depending on the beta parameterization. For example...
x = randn(1,10000)/10 + 3;
histogram(x,'norm','pdf')
Yes, we all know this is normally distributed data. SHSSH! Its a secret. Now, suppose we want to fit a beta distribution to it? Now it lives in the interval [0,1]. Again, exactly where those limits really should be is very difficult to quantify.
xscale = (x - mean(x));
xscale = xscale/max([abs(min(xscale)),max(xscale)])/2 + 1/2;
histogram(xscale,'norm','pdf')
PHAT = betafit(xscale)
PHAT = 1×2
5.6668 5.6614
hold on
fplot(@(X) betapdf(X,PHAT(1),PHAT(2)),[0 1])
That is not a terrible fit, but a normal would surely have done better.
Finally, what did you do wrong in the pickture you showed? That data does not look very much like any beta distribution I can think of, with that large spike in the center, but flat tails. I'm not remotely surprised you got crap for a fit. And it does not look like you have much data. Betafit had problems fitting a beta to that data. Again, absolutely no surprise.
  댓글 수: 1
Pappu Murthy
Pappu Murthy 2022년 1월 17일
Thanks for the help. I didn't realize that it can get tricky but your answer really clarified everything.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by