威尔逊分数区间的 Objective-C 实现 [英] Objective-C implementation of the Wilson Score Interval

查看:73
本文介绍了威尔逊分数区间的 Objective-C 实现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一个 Objective-C 库,或者只是寻找可以处理计算威尔逊分数区间的函数,解释如下:

I'm looking for an objective-c library or just the functions that can handle calculating the Wilson Score Interval explained here:

http://www.evanmiller.org/how-not-to-sort-by-average-rating.html

作为参考,以下是来自同一来源的 Ruby 实现:

For reference, here's a Ruby implementation from the same source:

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

推荐答案

假设 pnormaldist 列出的实现 这里 是正确的(我已逐字复制):

Assuming the implementation for pnormaldist listed here is correct (i've copied it verbatim):

double pnormaldist(double qn)
{
    double b[] = {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;

    double w1 = qn;
    if(qn > 0.5)
        w1 = 1.0 - w1;
    double w3 = -log(4.0 * w1 * (1.0 - w1));
    w1 = b[0];
    int i=1;
    for(;i<11;i++)
        w1 += b[i] * pow(w3,i);

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

double ci_lower_bound(int pos, int n, double power)
{
    if(n==0)
        return 0.0;
    double z = pnormaldist(1-power/2);
    double phat = 1.0*pos/n;
    return (phat + z*z/(2*n) - z * sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n);
}

这篇关于威尔逊分数区间的 Objective-C 实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆