2011-03-25 27 views
16

Estoy tratando de calcular los puntajes Z utilizando PHP. Básicamente, estoy buscando la manera más eficiente de calcular la media y la desviación estándar de un conjunto de datos (matriz de PHP). ¿Alguna sugerencia sobre cómo hacer esto en PHP?z-Scores (desviación estándar y media) en PHP

Estoy tratando de hacer esto en el menor número de pasos.

Respuesta

30

para calcular la media que puede hacer:

$mean = array_sum($array)/count($array) 

desviación estándar es de esta manera:

// Function to calculate square of value - mean 
function sd_square($x, $mean) { return pow($x - $mean,2); } 

// Function to calculate standard deviation (uses sd_square)  
function sd($array) { 
    // square root of sum of squares devided by N-1 
    return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array)/count($array)))))/(count($array)-1)); 
} 

la derecha de this page

+1

La función stats_standard_deviation() de PHP ejecuta el código C++ y se ejecutará mucho más rápido que una función equivalente escrita en código PHP. – geofflee

+0

El php "built" en stats_standard_deviation devuelve un valor diferente de la función 'sd()' que presente. Comprobé usando Excel STDDEV y coincide con el tuyo, pero curiosamente, stats_standard_deviation parece devolver un nivel de confianza del 95% ... no es exactamente lo que devuelve la función de CONFIANZA de Excel, pero está bastante cerca. – Hank

+0

Esto se debe a que stats_standard_deviation() calcula la desviación estándar de ** población ** por defecto, mientras que STDEV de Excel calcula la desviación estándar de ** muestra **. Para obtener los mismos resultados, debe usar Excel STDEVP o llamar a stats_standard_deviation() con $ sample = true. Para comprender por qué existe una diferencia entre la muestra y la población, consulte [Corrección de Bessel] (https://en.wikipedia.org/wiki/Bessel%27s_correction). – geofflee

13

¿Y si uso el construido en el paquete estadístico como stats_standard_deviation y stats_harmonic_mean. No puedo encontrar una función para los medios estándar, pero si sabes algo sobre estadísticas, estoy seguro de que puedes descubrir algo usando las funciones integradas.

+1

Tener un voto positivo :-) Dado que esta fue la mejor respuesta ("menor cantidad de pasos" y (probablemente) "forma más eficiente"). (Tal vez alguien no estaba contento de decir _built-in_; tienes que hacer "sudo pecl install stats" y luego editar php.ini) –

+0

@DarrenCook Ha, gracias! – rockerest

+0

@DarrenCook Me pregunto si hay una actualización del compositor para este problema. Mi punto de dolor con pera/pecl ha sido que como desarrollador de aplicaciones se redistribuye, nunca se sabe cuándo/si un cliente puede usar pera. Compositor está ayudando a cambiar eso :-) Solo mi $ 0.02. PS - Voto a favor de usted rockerest –

4
function standard_deviation($aValues) 
{ 
    $fMean = array_sum($aValues)/count($aValues); 
    //print_r($fMean); 
    $fVariance = 0.0; 
    foreach ($aValues as $i) 
    { 
     $fVariance += pow($i - $fMean, 2); 

    }  
    $size = count($aValues) - 1; 
    return (float) sqrt($fVariance)/sqrt($size); 
} 
Cuestiones relacionadas