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); 
} 
} 

Tôi có thể sử dụng tính năng này khi tính điểm trung bình dựa trên hệ thống xếp hạng 5 sao (trong đó 1 sao = 1 điểm) không? Và nếu có, tôi muốn một ví dụ sử dụng lớp được liên kết. Hoặc tôi nên đi cho một cái gì đó giống như "ước tính Bayes"?Xếp hạng sao, thực hiện khoảng thời gian Wilson

Trả lời

3

Tôi không nghĩ điều này là có thể. Wilson intervall chỉ dành cho 2 biến. Nhưng thay vì sử dụng tích cực hoặc thành công trong phân phối nhị thức, bạn có thể tính toán phương sai của xếp hạng 5 sao: http://www.mathsisfun.com/data/standard-deviation.html. Đây là hàm wilson được điều chỉnh: 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, sửa đổi mặc dù – Johan

+0

@Johan: đã sửa câu trả lời của tôi . – Bytemain

+0

tuyệt vời, được chấp nhận – Johan