Chisquared Distribution Plot (xfig example)
Jump to navigation
Jump to search
The Chi²-distribution and its according cumulative distribution function for a large number of degrees of freedom for illustrative purposes. Confidence levels are indicated in the CDF. Feel free to use it in your thesis, there are some customization options in the header.
#!/usr/bin/env isis-script require("isisscripts"); %---------options----------------------------- variable CHISQRMIN = 0.0003, CHISQRMAX = 150, KVALUES = [1,2,4,8,15,30,60,100], COLOR = ["blue","crimson"], LOG = 1, dx=0.001; %---------we-need-the-gamma-function------------------ % defined for integer and half-integer values define gamma_function(n){ variable gamma = 0; if(n mod 1 == 0){ gamma = factorial(n-1); }else if(n mod 1 == 0.5){ n -= 0.5; gamma = sqrt(PI)*factorial(2*n)/(4^n*factorial(n)); } return gamma; } %-------initializing-panels----------------------- variable panel = Struct_Type[2]; panel[0] = xfig_plot_new(12, 9); panel[0].world( CHISQRMIN+LOG*0.1, 0.999*CHISQRMAX, 0, 0.5; xlog=LOG); panel[0].ylabel("$f_k (\chi^2)$"R); panel[1] = xfig_plot_new(12, 6); panel[1].world( CHISQRMIN+LOG*0.1, 0.999*CHISQRMAX, 0, 1.1; xlog=LOG); panel[1].ylabel("$F_k (\chi^2)$"R); variable chisqr = [CHISQRMIN:CHISQRMAX:dx]; variable prob_density = Double_Type[length(chisqr)]; variable cumulative_distr = Double_Type[length(chisqr)]; %-------calculate-and-plot-distribution-for-k-values------------------------------ % (k larger than 100 not possible as factorial breaks down) variable i, k, labely = 0.9, labelx = 0.8, ystep = 0.06, sigma_flag; foreach k (KVALUES){ variable kcolor = xfig_mix_colors(COLOR[0], COLOR[1], log(k-1)/5 ); sigma_flag = 0; % calculating probability densities and integrating them in the same loop for(i=0; i<length(chisqr)-1; i++){ prob_density[i] = ( chisqr[i]^(k/2.-1.)*E^(-chisqr[i]/2.) )/( 2.^(k/2.)*gamma_function(k/2.) ); cumulative_distr[i] = cumulative_distr[i-1]+prob_density[i]*dx; % plot a line at edge of confidence level if(cumulative_distr[i] >=0.9 && sigma_flag == 0){ panel[0].plot([chisqr[i],chisqr[i]], [0,prob_density[i]]; line=2, color = kcolor, depth=100-k); panel[1].plot([chisqr[i],chisqr[i]], [0.9,1.1]; line=2, color = kcolor, depth=100-k); sigma_flag = 1; } } % plot and label the probability density for k panel[0].plot(chisqr, prob_density; line=0, color = kcolor, depth=100-k); panel[0].xylabel(labelx, labely , "k$\,=\,$"R + string(k), -0.5, 0; world0, color = kcolor); labely -= ystep; % plot according cumulative distribution function panel[1].plot(chisqr, cumulative_distr; line=0, color = kcolor, depth=100-k); } % dashed line in second panel panel[1].plot([0.1,200], [1,1]; line=1, color = "gray", depth=100); panel[1].plot([0.1,200], [0.9,0.9]; line=1, color = "gray", depth=100); panel[1].xylabel(0.05, 0.77, "90\%-level"R, -0.5, 0; world0, color = "gray"); %-------render-all--------------------------------------- variable multi = xfig_multiplot(panel; xlabel=`$\chi^2$`, cols=1); multi.render("chisqr.pdf"); quit;