我正在用 C# 和 Java 编写一个基准程序作为 CS 类的第一个作业。我们应该写一些关于我们的方法和基准测试结果的报告,我想在我的中添加一个统计组件。
我有来自每种语言的 15 个运行时样本,以及每种语言的平均值和标准差。如何确定它们之间是否存在统计学上的显着差异?
我正在用 C# 和 Java 编写一个基准程序作为 CS 类的第一个作业。我们应该写一些关于我们的方法和基准测试结果的报告,我想在我的中添加一个统计组件。
我有来自每种语言的 15 个运行时样本,以及每种语言的平均值和标准差。如何确定它们之间是否存在统计学上的显着差异?
如果每种语言的运行时样本大致呈正态分布*(很可能是这种情况),那么您可以使用t-test,特别是具有不等方差的独立双样本 t-test。
如果你安装了 R,你可以通过运行t.test(x = c_sharp_samples, y = java_samples).
但是,如果您想手动运行测试,请首先计算:
然后(大约)遵循具有自由度的学生 t 分布,因此在适当的表中查找(或使用一些 t 分布计算器)。
*即使每种语言的运行时样本不是正态分布的,15 个样本也可能足以让正常近似值(即 CLT)发挥作用,所以你应该没问题。但是,如果您想正式一点并且不想做出这种正常假设,则可以改用(非参数)Mann Whitney 检验。
置换测试是另一种可能性,尽管我认为对于您描述的问题,已经提到的替代方案会更好。
听起来您想要的是使用 t 检验(这里是维基百科页面)。
如果您不假设您的观察结果是正常分布的,那么试试这个Mann-Whitney U 检验(但它不能单独从平均值/标准差计算)。
确保您的观察是独立的,以便保持 t 检验的有效性。
祝你好运,在你做事之前阅读更多关于这个的信息!