2011-12-11 17 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); 
} 
} 

Czy mogę z tego skorzystać przy obliczaniu średniej oceny opartej na systemie 5 gwiazdek (gdzie 1 gwiazdka = 1 punkt)? A jeśli tak, chciałbym podać przykład używając połączonej klasy. Czy powinienem wybrać coś w rodzaju "szacunku Bayesa"?Liczba gwiazdek, realizacja interwału Wilsona

Odpowiedz

3

Nie sądzę, że to możliwe. Interwał Wilsona dotyczy tylko 2 zmiennych. Ale zamiast używać pozytywu lub sukcesów w rozkładzie dwumianowym, możesz obliczyć wariancję 5-gwiazdkowej oceny: http://www.mathsisfun.com/data/standard-deviation.html. Oto dostosowany funkcja Wilson: 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, modyfikowane chociaż – Johan

+0

@Johan: stała moją odpowiedź . – Bytemain

+0

świetnie, akceptowane – Johan