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

क्या मैं 5 सितारा रेटिंग सिस्टम (जहां 1 सितारा = 1 बिंदु) के आधार पर औसत रेटिंग की गणना करते समय इसका उपयोग कर सकता हूं? और यदि ऐसा है, तो मैं लिंक किए गए वर्ग का उपयोग कर एक उदाहरण चाहूंगा। या मुझे "Bayesian अनुमान" की तरह कुछ के लिए जाना चाहिए?स्टार रेटिंग, विल्सन स्कोर अंतराल को कार्यान्वित करना

उत्तर

3

मुझे नहीं लगता कि यह संभव है। विल्सन इंटरवॉल केवल 2 चर के लिए है। लेकिन एक द्विपक्षीय वितरण में सकारात्मक या सफलताओं का उपयोग करने के बजाय आप 5-सितारा रेटिंग के भिन्नता की गणना कर सकते हैं: http://www.mathsisfun.com/data/standard-deviation.htmlhttp://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, हालांकि – Johan

+0

@Johan संशोधित:: यहाँ एक अनुकूलित विल्सन समारोह है मेरा उत्तर तय । – Bytemain

+0

महान, स्वीकार्य – Johan

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^