Ik krijg een paar verschillende uitkomsten met verschillende scripts: die op phphulp, die van mezelf en met select stddev(kolom) from tabel.
<?php
	function standaardDeviatie ( )
	{
		$aGetallen = func_get_args ( );
		if ( is_array ( $aGetallen [ 0 ] ) )
			$aGetallen = $aGetallen [ 0 ];
		
		$fTotaal = array_sum ( $aGetallen );
		$iAantal = count ( $aGetallen );
		
		$fGemiddelde = $fTotaal / $iAantal;
		
		$fTotaleVariatie = 0;
		foreach ( $aGetallen as $fGetal)
			$fTotaleVariatie += abs ( $fGemiddelde - $fGetal );
		
		$fStandaardDeviatie = $fTotaleVariatie / $iAantal;
		
		return $fStandaardDeviatie;
	}
?>
Wat ik hier heb gedaan is dit:

•Bereken gemiddelde: alle getallen in de array optellen en dan delen door het totaal aantal getallen.
•Door de array met getallen lopen, en elke keer het verschil tussen het betreffende getal en het gemiddelde optellen bij de totale afwijking / deviatie. Dan dat totale aantal delen door het aantal getallen.

Wat klopt er niet / wel? Ik heb dit geprobeerd:
<?php
	echo standaardDeviatie ( 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9  );
?>
Ik krijg zelf deze uitkomst: 2
Met dezelfde waarden geeft MySQL: 2.2913
En het script op phphulp geeft: 2.4494897427832


Dank u
Ik herinner me de precieze definitie van standaarddeviatie niet meer, maar ik zou zoiets doen:
<?php
$array = range (1, 6);
$gem = round (array_sum ($array) / count ($array), 2);
$verschillen = array ();
for ($i = 0; $i < 50; $i++) {
shuffle ($array);
$verschillen[$i] = abs ($gem - $array[0]);
}
echo '<pre>' . print_r ($verschillen, true) . '</pre>';
echo '<pre>' . print_r ($gem, true) . '</pre>';
$stddev = round (array_sum ($verschillen) / count ($verschillen), 2);
echo '<pre>' . print_r ($stddev, true) . '</pre>';
?>
Ik begrijp de keuze voor shuffle helemaal niet! Waarom zou je? Je berekent iets toch...???

Ik ken zelf de definitie van standaarddeviatie eigenlijk ook niet, maar ik had zelf bedacht dat het de gemiddelde afwijking zou zijn.

Dus nogmaals mijn vraag: wat klopt? (mijn script, mysql, dit script)

MySQL zal wel gelijk hebben, maar waarom?
standaarddeviatie is toch, als je 10 cijfers hebt, waar je het gemiddelde van wilt weten (dus alles optellen delen door 10) en je hebt bijv 2 (extreme) uitschieters in de 10 cijfers, dat dat dan die standaardefiatie is? (die zorgt ervoor dat je gemiddelde dus enorm omhoog of omlaag getrokken word, terwijl als je die uitschieters eruithaalt, je een beter beeld hebt van het gemiddelde)

pff, ff snel gegetypt, ik ga nu naar huis, vanaaf weer werken @ gamma

tjeu!
Wikipedia, even uitwerken in PHP en klaar is kees.
Wikipedia heb ik ook al bekeken...

Makkelijker gezegd dan gedaan. Ik snap die limieten en sigma's allemaal niet.

En wat is dit dan?
Uit een superduperbron heb ik vernomen dat je de kwadraten van de afwijking moet nemen, en de wortel van het gemiddelde daarvan. Zo dus
<?php
	function standaardDeviatie ( )
	{
		$aGetallen = func_get_args ( );
		if ( is_array ( $aGetallen [ 0 ] ) )
			$aGetallen = $aGetallen [ 0 ];
		
		$iAantal = count ( $aGetallen );
		$fGemiddelde = array_sum ( $aGetallen ) / $iAantal;
		
		$fTotaleVariatie = 0;
		foreach ( $aGetallen as $fGetal)
			$fTotaleVariatie += pow ( $fGemiddelde - $fGetal , 2 );
		
		$fStandaardDeviatie = sqrt ( $fTotaleVariatie / $iAantal );
		
		return $fStandaardDeviatie;
	}
	
	echo standaardDeviatie ( 1 , 2 , 3 );
?>

Reageren