How to calculate the dirichlet cdf

조회 수: 7 (최근 30일)
xueqi
xueqi 2014년 6월 14일
댓글: Star Strider 2014년 6월 14일
Dear Fellows,
Do you know how to write the cdf of dirichlet distribution? I could write the pdf but do not know how to formulate the cdf. I would like to calculate the area between x-0.5 to x+0.5, which is F(x+0.5)-F(x-0.5) where F refers to the cdf. Could you offer me some advice about this?
Thanks very much.
Xueqi

채택된 답변

Star Strider
Star Strider 2014년 6월 14일
편집: Star Strider 2014년 6월 14일
Wikipedia doesn’t give an analytic expression for the cdf. Since you already have a function written for the pdf, I suggest simply integrating it using the integral or integral2 function.
  댓글 수: 2
xueqi
xueqi 2014년 6월 14일
Hey. Thanks. I tried to use integral2.
if true
% a=[2,5,4];
X=[0.4,0.3,0.3];
Y=dirpdf(X,a)
f1=@(x)dirpdf(x,a);
f2=@(x1,x2) dirpdf([x1,x2,1-x1-x2],a);
f2(0.3,0.2);
f3=@(x1,x2) integral2(f2,x1-0.005,x1+0.005,x2-0.005,x2+0.005);
f3(0.3,0.2)
end
But I get the error message
if true
%
Error using dirpdf (line 46)
Columns in X must be equal or one less than columns in ALPHA
Error in @(x1,x2)dirpdf([x1,x2,1-x1-x2],a)
Error in integral2Calc>integral2t/tensor (line 229)
Z = FUN(X,Y); NFE = NFE + 1;
Error in integral2Calc>integral2t (line 56)
[Qsub,esub] = tensor(thetaL,thetaR,phiB,phiT);
Error in integral2Calc (line 10)
[q,errbnd] = integral2t(fun,xmin,xmax,ymin,ymax,optionstruct);
Error in integral2 (line 107)
Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);
Error in @(x1,x2)integral2(f2,x1-0.005,x1+0.005,x2-0.005,x2+0.005)
Error in testdircdf (line 8)
f3(0.3,0.2)
end
The function dirpdf and f2 are working fine as I can get f2(0.3,0.2)=1.512. So there is something wrong when I use integral2. Could you find out where is wrong?
Star Strider
Star Strider 2014년 6월 14일
It is difficult for me to follow your code. I have no experience with dirpdf.
If you are using vector-valued functions, or if your call to dirpdf returns a vector, it might be necessary for you to use two nested integral calls, one to evaluate the value for x1 and the other for x2. The integral function will take vectors, while integral2 will not.
If that is not the problem, you will likely need to go through your code and your calls to dirpdf with the arguments you present to it in your call to integral or integral2 to understand what it returns.
If all else fails, generate a vector of values for x, evaluate dirpdf in as many nested loops as necessary, and then use trapz to integrate it.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by