2011-12-11 12 views
5
class Rating 
{ 
    public static function ratingAverage($positive, $total, $power = '0.05') 
{ 
if ($total == 0) 
    return 0; 

$z = Rating::pnormaldist(1-$power/2,0,1); 
$p = 1.0 * $positive/$total; 
$s = ($p + $z*$z/(2*$total) - $z * sqrt(($p*(1-$p)+$z*$z/(4*$total))/$total))/(1+$z*$z/$total); 
return $s; 
    } 

public static function pnormaldist($qn) 
{ 
    $b = array(
    1.570796288, 0.03706987906, -0.8364353589e-3, 
    -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5, 
    -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8, 
    0.3657763036e-10, 0.6936233982e-12); 

if ($qn < 0.0 || 1.0 < $qn) 
    return 0.0; 

if ($qn == 0.5) 
    return 0.0; 

$w1 = $qn; 

if ($qn > 0.5) 
    $w1 = 1.0 - $w1; 

$w3 = - log(4.0 * $w1 * (1.0 - $w1)); 
$w1 = $b[0]; 

for ($i = 1;$i <= 10; $i++) 
    $w1 += $b[$i] * pow($w3,$i); 

if ($qn > 0.5) 
    return sqrt($w1 * $w3); 

return - sqrt($w1 * $w3); 
} 
} 

¿Puedo hacer uso de esto al calcular la calificación promedio basada en un sistema de calificación de 5 estrellas (donde 1 estrella = 1 punto)? Y si es así, me gustaría un ejemplo usando la clase vinculada. ¿O debería buscar algo así como el "cálculo bayesiano"?Clasificación por estrellas, implementando el intervalo de puntuación Wilson

Respuesta

3

No creo que esto sea posible. Intervalo de Wilson es solo para 2 variables. Pero en lugar de usar los positivos o los éxitos en una distribución binominal, puede calcular la varianza de la calificación de 5 estrellas: http://www.mathsisfun.com/data/standard-deviation.html. Aquí está una función wilson adaptada: http://www.goproblems.com/test/wilson/wilson.php?v1=0&v2=0&v3=3&v4=0&v5=0

+0

http://www.goproblems.com/test/wilson/wilson.php?v1=0&v2=0&v3=3&v4=0&v5=0, modificado aunque – Johan

+0

@Johan: solucionado mi respuesta . – Bytemain

+0

genial, aceptado – Johan

Cuestiones relacionadas