C++ 在给定此信息的情况下,一个班级中有多少学生比一个学生做得更好的算法

C++ 在给定此信息的情况下,一个班级中有多少学生比一个学生做得更好的算法,c++,algorithm,statistics,C++,Algorithm,Statistics,我想制作一个简单的应用程序,它将接受: 学生人数 班级平均分(分数/100) 中位成绩(分数/100) 类别标准差 学生的当前成绩(分数/100) 结果是有多少学生比那个学生做得更好 我对这一信息的最佳估计很感兴趣 我只是不知道如何计算这个 我的数据集中的成绩平均值与中位数相同,所以请简单解释一下如何做到这一点。你需要知道比平均值、中位数和标准差更多的信息才能得到分数的概率分布,你需要这个分布来计算有多少学生表现更好 如果假设概率分布(或知道分布,因为老师在该曲线上评分),成绩更好的学生人数将是

我想制作一个简单的应用程序,它将接受:

  • 学生人数
  • 班级平均分(分数/100)
  • 中位成绩(分数/100)
  • 类别标准差
  • 学生的当前成绩(分数/100)
  • 结果是有多少学生比那个学生做得更好

    我对这一信息的最佳估计很感兴趣

    我只是不知道如何计算这个


    我的数据集中的成绩平均值与中位数相同,所以请简单解释一下如何做到这一点。

    你需要知道比平均值、中位数和标准差更多的信息才能得到分数的概率分布,你需要这个分布来计算有多少学生表现更好


    如果假设概率分布(或知道分布,因为老师在该曲线上评分),成绩更好的学生人数将是
    (cdf(最大可能分数)-cdf(学生分数))*学生人数
    ,其中,cdf是该分布的累积分布函数。

    上面的评论是正确的,没有更多信息,您无法准确地确定这一点。然而,正如史蒂夫·乔布斯喜欢说的那样,真正的艺术家是有价值的,所以如果你需要一个大概的估计,我会这么做

    两种最直接的方法是假设数据为正态分布或来自贝塔分布(因为分数在0-100之间)。因为你说数据中的平均值和中位数很接近,所以我将给出代码来计算假设为正态分布的数量

    正态分布有两个参数以及一个均值和一个方差。你将要得到的平均值的最佳估计是来自数据的样本平均值,方差的最佳估计是标准偏差的平方。如果你想知道有多少学生比某个分数差,你需要的是累积分布函数

    double mu=sample_mean;
    double sigma=sample_std_deviation;
    int numStudents=sample_size;
    int NumberBetterThan(double score,double mu,double sigma,int numStudents)
    {
       double temp=(score-mu)/sqrt(2*pow(sigma,2.0));
       temp=0.5*(1+erf(temp));
       int result=numStudents*(1.0-temp); // truncates to int but you can return a float if you are ok with a fractional number of students
       return(result);
    
    }
    

    erf是统计中的错误函数。你可以在网上找到很多C++代码来实现它。一个这样的地方是

    如果你想得到准确的答案,你必须提供所有学生的详细情况。你是否假设正态分布?()考虑到你想要的是“尽可能最好的估计”,这听起来像是一个统计问题,而不是一个编程问题。这对5-200的样本来说不是一个小假设。到目前为止,你尝试了什么?你如何定义“最佳”?你打算如何测试这个算法?为什么你需要的不仅仅是平均值和标准值@米洛:看看@Stefan的累积分布函数,在我知道他假设正态分布之前,我就写过。给定足够大的样本量,分布是“标准分布”(即钟形曲线)@Martin我想你的意思是,给定足够大的样本量,平均测试分数的分布是正态分布的。这就是我们从中心极限定理得到的结果。我们不能仅仅从样本量来说明分数的总体分布。