如何根据投票数/得分/样本/等计算平均值?

时间:2009-05-21 20:38:09

标签: mean equation

为简单起见,我们有一组可能的分数{0,1,2}。有没有办法根据分数计算平均值而不进入毛茸茸的查找表等95%置信区间计算?

dreeves在此发布了一个解决方案:How can I calculate a fair overall game score based on a variable number of matches?

现在说我们有2个场景......

情景A)2票2的值导致SE = 0,导致均值为2

场景B)10000票值2导致SE = 0,导致均值为2

我希望场景A的值小于2,因为投票数很少,但似乎这个解决方案似乎没有处理(当你的集合中没有所有值等于dreeve的等式时)彼此)。我错过了什么或者是否有其他算法可以用来计算更好的分数。

我可以获得的数据是:

  • n(票数)
  • 总和(票数总和)
  • {set of votes}(所有投票值)

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以在排名结果时给它一个加权分数,而不是只显示到目前为止的平均投票,乘以一些投票数的函数。

C#中的一个例子(因为那是碰巧最了解的......),可以很容易地翻译成您选择的语言:

double avgScore = Math.Round(sum / n);
double rank = avgScore * Math.Log(n);

这里我使用了n的对数作为加权函数 - 但只有在投票数不是太小或太大的情况下它才能正常工作。 “最佳”究竟有多大取决于您希望投票数量的重要程度。

如果您喜欢对数方法,但基数10与您的投票计数无关,则可以轻松使用其他基数。例如,要在基础3中执行此操作:

double rank = avgScore * Math.Log(n, 3);

您应该使用哪种功能进行称重最好取决于您希望达到的投票数量级。

您还可以通过定义

来使用自定义加权函数
double rank = avgScore * w(n);

其中w(n)根据投票数返回权重值。然后根据需要定义w(n),例如:

double w(int n) {
    // caution! ugly example code ahead...
    // if you even want this approach, at least use a switch... :P

    if (n > 100) { 
        return 10; 
    } else if (n > 50) {
        return 8;
    } else if (n > 40) {
        return 6;
    } else if (n > 20) {
        return 3;
    } else if (n > 10) {
        return 2;
    } else {
        return 1;
    }
}

答案 1 :(得分:0)

如果你想在我的其他参考答案中使用这个想法(谢谢!)平均使用悲观的下界,那么我认为需要注入一些额外的假设/参数。

为了确保我理解:凭10000票,每一票都是“2”,你非常确定真正的平均值是2.有2票,每张都是“2”,你很不确定 - - 也许有些0和1会进来并降低平均值。但是如何量化,我认为是你的问题。

这是一个想法:每个人都从一些“行李”开始:单个幻影投票“1”。具有2个真正“2”票的人将具有平均(1 + 2 + 2)/ 3 = 1.67,其中具有10000个真正“2”票的人将具有平均1.9997。仅此一项就可以满足您的标准。或者,为了增加悲观的下限想法,有2票的人将有一个悲观的平均得分为1.333,拥有10k票的人将为1.99948。

(绝对确定你永远不会有零标准错误的问题,使用两个不同的幻影投票。或者使用尽可能多的幻影投票,因为有可能的投票值,每个值一票。)