Jump to content

Statistics/Chi-squared distribution: Difference between revisions

added Raku programming solution
m (add references)
(added Raku programming solution)
Line 425:
For the airport data, diff total is 4.512820512820513, χ2 is 0.088753925984435, p value 0.7888504263193064
</pre>
 
=={{header|Raku}}==
{{trans|Julia}}
<syntaxhighlight lang="raku" line># 20221101 Raku programming solution
 
use Graphics::PLplot;
 
sub Γ(\z) { # https://rosettacode.org/wiki/Gamma_function#Raku
constant g = 9;
z < .5 ?? π/ sin(π * z) / Γ(1 - z)
!! sqrt(2*π) * (z + g - 1/2)**(z - 1/2) * exp(-(z + g - 1/2)) *
[+] < 1.000000000000000174663 5716.400188274341379136
-14815.30426768413909044 14291.49277657478554025
-6348.160217641458813289 1301.608286058321874105
-108.1767053514369634679 2.605696505611755827729
-0.7423452510201416151527e-2 0.5384136432509564062961e-7
-0.4023533141268236372067e-8 > Z* 1, |map 1/(z + *), 0..*
}
 
sub χ2(\x,\k) {x>0 && k>0 ?? (x**(k/2 - 1)*exp(-x/2)/(2**(k/2)*Γ(k / 2))) !! 0}
sub Γ_cdf(\k,\x) { x**k * exp(-x) * sum( ^101 .map: { x** $_ / Γ(k+$_+1) } ) }
 
sub cdf_χ2(\x,\k) { (x <= 0 or k <= 0) ?? 0.0 !! Γ_cdf(k / 2, x / 2) }
 
say 'x χ² ', [~] (1..5)».&{ "k = $_" ~ ' ' x 13 };
say '-' x my \width = 93;
for 0..10 -> \x {
say x.fmt('%2d'), [~] (1…5)».&{χ2(x, $_).fmt: " %-.{((width-2) div 5)-4}f"}
}
 
say "\nχ² x cdf for χ² P value (df=3)\n", '-' x 36;
for 2 «**« 0…5 -> \p {
my $cdf = cdf_χ2(p, 3).fmt: '%-.10f';
say p.fmt('%2d'), " $cdf ", (1-$cdf).fmt: '%-.10f'
}
 
my \airport = [ <77 23>, <88 12>, <79 21>, <81 19> ];
my \expected = [ <81.25 18.75> xx 4 ];
my \dtotal = ( (airport »-« expected)»² »/» expected )».List.flat.sum;
 
say "\nFor the airport data, diff total is ",dtotal,", χ² is ", χ2(dtotal, 3), ", p value ", cdf_χ2(dtotal, 3);
 
given Graphics::PLplot.new( device => 'png', file-name => 'output.png' ) {
.begin;
.pen-width: 3 ;
.environment: x-range => [-1.0, 10.0], y-range => [-0.1, 0.5], just => 0 ;
.label: x-axis => '', y-axis => '', title => 'Chi-squared distribution' ;
for 0..3 -> \k {
.color-index0: 1+2*k;
.line: (0, .1 … 10).map: { ( $_, χ2($_, k) )».Num };
.text-viewport: side=>'t', disp=>-k-2, pos=>.5, just=>.5, text=>'k = '~k
} # plplot.sourceforge.net/docbook-manual/plplot-html-5.15.0/plmtex.html
.end
}</syntaxhighlight>
{{out}}
<pre>
x χ² k = 1 k = 2 k = 3 k = 4 k = 5
---------------------------------------------------------------------------------------------
0 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000
1 0.24197072451914 0.30326532985632 0.24197072451914 0.15163266492816 0.08065690817305
2 0.10377687435515 0.18393972058572 0.20755374871030 0.18393972058572 0.13836916580686
3 0.05139344326792 0.11156508007421 0.15418032980377 0.16734762011132 0.15418032980377
4 0.02699548325659 0.06766764161831 0.10798193302638 0.13533528323661 0.14397591070183
5 0.01464498256193 0.04104249931195 0.07322491280963 0.10260624827987 0.12204152134939
6 0.00810869555494 0.02489353418393 0.04865217332964 0.07468060255180 0.09730434665928
7 0.00455334292164 0.01509869171116 0.03187340045148 0.05284542098906 0.07437126772012
8 0.00258337316926 0.00915781944437 0.02066698535409 0.03663127777747 0.05511196094425
9 0.00147728280398 0.00555449826912 0.01329554523581 0.02499524221105 0.03988663570744
10 0.00085003666025 0.00336897349954 0.00850036660252 0.01684486749771 0.02833455534173
 
χ² x cdf for χ² P value (df=3)
------------------------------------
1 0.1987480431 0.8012519569
2 0.4275932955 0.5724067045
3 0.6083748237 0.3916251763
4 0.7385358701 0.2614641299
5 0.8282028557 0.1717971443
 
For the airport data, diff total is 4.512821, χ² is 0.08875392598443506, p value 0.7888504263193072</pre>
 
[[File:RakuPlotChiSquared.png|thumb|center]]
 
=={{header|Wren}}==
354

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.