Уилсон доверительный интервал для 5-звездочной рейтинговой системы, используя goproblems.com

У меня есть некоторые проблемы с пониманием примера по гопроблеме (http://www.goproblems.com/test/wilson/wilson.php?v1=0&V2 = 2&V3 = 0&V4 = 0&v5 = 0).

Я написал свой собственный код из примера выше (как я думал, что это будет работать):

$stars = 4;
$n = 2;
$xbar = (($stars / $n)-1)/4;
$z = 0;
$Wilson = ((1 + 4 * (($xbar + pow($z,$n) / pow(2,$n) - $z) * sqrt($xbar * (1 - $xbar) / $n + pow($z,2) / 4 * pow($n,2))) / (1 + pow($z, 2) / $n)) - 0.374474917663);
echo $Wilson;

Теперь моя проблема в том, что я не получаю тот же самый нижний предел оценки .. Я думаю, что что-то не так с тем, как я вычисляю, но я не могу понять, что ..

Вот пример: приведенная выше ссылка на goproblem открывает результат по нижней границе оценки: 1.1067061310626. Теперь пытаюсь отразить, что (в коде выше) у меня есть результат: 0.9317113001849 ..

Что-то говорит мне, что я что-то совершенно не понял. Надеюсь, вы, ребята, можете помочь мне отсюда ..

0

Решение

Существует класс, написанный Марком Бадолато, который делает именно то, что вам нужно, вы можете либо использовать эту библиотеку, либо поучиться у его реализации.

class WilsonConfidenceIntervalCalculator {
const CONFIDENCE = 1.959964;

public function getScore($positiveVotes, $totalVotes) {
return $totalVotes ? $this->lowerBound($positiveVotes, $totalVotes) : 0;
}

private function lowerBound($positiveVotes, $totalVotes) {
$phat           = 1.0 * $positiveVotes / $totalVotes;
$numerator      = $this->calculationNumerator($totalVotes, self::CONFIDENCE, $phat);
$denominator    = $this->calculationDenominator($totalVotes, self::CONFIDENCE);

return $numerator / $denominator;
}

private function calculationDenominator($total, $z) {
return 1 + $z * $z / $total;
}

private function calculationNumerator($total, $z, $phat) {
return $phat + $z * $z / (2 * $total) - $z * sqrt(($phat * (1 - $phat) + $z * $z / (4 * $total)) / $total);
}
}

Вы можете прочитать больше об этом здесь и посмотреть, как запустить модульные тесты.
https://gist.github.com/mbadolato/8253004

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]