【问题标题】:Objective-C implementation of the Wilson Score Interval威尔逊分数区间的 Objective-C 实现
【发布时间】:2009-11-07 00:03:58
【问题描述】:

我正在寻找一个 Objective-c 库,或者只是可以处理此处解释的 Wilson 得分区间计算的函数:

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

作为参考,这里有一个来自同一来源的 Ruby 实现:

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

【问题讨论】:

    标签: objective-c statistics


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2010-12-23
      • 2012-03-27
      • 2014-02-12
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      相关资源
      最近更新 更多