如何报告两组实验结果的比例?

机器算法验证 置信区间 标准差 报告
2022-03-30 17:05:26

和算法测量了解决问题所花费的时间这需要很长时间,所以每个算法我只有 10 个数据: XY

X:(x1,x2,,x10)Y:(y1,y2,,y10)

编辑:

他们正在解决的问题是随机的。我使用 10 个不同的随机种子生成了 10 个问题实例。这 10 个计算时间对应于这 10 个问题实例。从这个意义上说,数据是成对的

一颗种子的变化并没有太大的改变问题的难度。

编辑结束

我计算了平均值的比率:

avg=k=110xkk=110yk

然而,这并没有传达任何关于该比率有多精确的信息。

一种可能的方法是估计标准偏差

根据这个答案,独立同分布随机变量的平均值是渐近正态的,因此该比率具有渐近柯西分布,其标准差是无限的。这并不让我满意,尤其是因为我只有 10 个数据。

然后根据这个答案,我应该使用泰勒级数来近似标准偏差这个答案看起来更好,但仍然感觉不对。

比率的分布在 1 附近直观地高度不对称。(您只有区间 更快的事实,但整个更快的事实)。因此,即使是一个很好估计的标准偏差也可能没有多大用处。(0;1)X(1;)Y

最好提供某种置信区间例如:比率为 1,5,不对称置信区间为 (1,3 ; 2,8)。但我不知道如何估计这一点,因为我不知道我的数据分布。

编辑2:

这是我的数据:

X       Y
111536  160134
111165  164850
112494  165844
115959  166409
121296  161755
119948  167781
119172  168666
117330  169766
116661  166518
129311  169884

编辑3:

回答DL Dahly的问题(在评论中)

为什么不只报告一种算法在所有情况下都更快

为了问题的简洁,我没有提到我实际上有 84 组数据在这个问题中描述。2 个问题 x 6 个问题的维度 x 7 个可能的问题大小。在某些情况下X更快,在某些情况下Y更快,在某些情况下结果是不确定的。

我不一定需要置信区间或标准差。我只想为读者提供比平均值更丰富的东西读者应该了解平均值代表实验结果的程度。

4个回答

我会对称化问题并通过使用各个比率的日志来识别匹配,例如,得到 % 置信区间的限制通常的方式为(我知道这不是严格合理的,但是对于这么小的,我更喜欢它而不是引导程序。)zi=ln(xi/yi)100(1α)zz¯±t9,1α/2sz/10n

你问了一个非常有趣的问题。正如您所说,关键问题是的理论分布都是未知的。然而,如果它是已知的,就有可能推导出比率的方差,从而找到标准误差的样本估计值。XY

暂时假设两个随机变量都遵循已知分布。正如您所指出的,正态分布是一种可能性,因此根据中心极限理论,该比率是柯西分布的。我还认为解决任务的响应时间有时是由指数分布建模的。因此,也可以假设 rv呈指数分布,并且它们的和是次指数的。XY

更一般地,的比率是比率分布的。不幸的是,比率分布的一个已知问题是它们通常既没有现有的期望(均值)也没有方差。因此,均值的 se 往往不存在。柯西分布和两个指数变量的比率也是如此,其他比率分布也是如此。sum(X)sum(Y)

幸运的是,还有一些分布比率具有明确的均值和方差。在下文中,我将假设该比率的总体均值存在,并基于此假设构建一个示例。

在这种情况下,您仍然不知道您的 rv 在实践中的分布。获得平均值的一种选择是通过非参数引导,我将通过示例进行演示。

假设分别遵循自由度为 1 和 5 的缩放卡方分布。那么比率是具有 1*n 和 5*n 自由度的 F 分布,其中 n 是求和 rv 的数量。在实践中,n 是样本大小。XYsum(X)/sum(Y)

n=10^3
df1=1
df2=5
X<-rchisq(n,df=df1)/(df1) #Scaled Chi-square distribution with df=df1
Y<-rchisq(n,df=df2)/(df2) #Scaled Chi-square distribution with df=df2
ratio<-sum(X)/sum(Y) # F-distributed with df1*n and df2*n degrees of freedom

您可以验证 F 分布的平均值是否已知。

ratio #sample mean of ratio
df2*n/(df2*n-2) #theoretical mean of ratio (mean of F-distribution with df1 and df2)

现在假设我们有一个来自同一分布n=10

n=10
df1=1
df2=5
X<-rchisq(n,df=df1)/(df1) #Scaled Chi-square distribution with df=df1
Y<-rchisq(n,df=df2)/(df2) #Scaled Chi-square distribution with df=df2
ratio_sample<-sum(X)/sum(Y) # F-distributed
df2*n/(df2*n-2) #theoretical mean of ratio (mean of F-distribution with df1 and df2)

引导程序从数据中替换样本。我将分别抽取 10,000 个大小为 10 的样本。我估计了自举分布的平均比率、方差和标准差。后者提供se。

boot=10^4
data<-data.frame(X,Y)
bootsamples<-numeric()
for(i in 1:boot){
  temp <- data[sample(n,n,replace=T),]
  bootsamples[i]<-sum(temp$X)/sum(temp$Y)
  }
ratio_var<-var(bootsamples)
ratio_se<-sqrt(ratio_var)
ratio_mean<-mean(bootsamples)

总结结果,我们可以考虑基于正态理论的经典置信区间,但由于样本量小,这不是立即可取的。

c(ratio_mean-1.965*ratio_se,ratio_mean+1.965*ratio_se) #Classical 95% CI based on asymptotics

或者,您可以考虑比率的自举分布的 2.5 和 97.5 百分位数。

quantile(bootsamples,probs=c(.025,.975)) #Bootstrapped 95% CI

您可以再次验证自举置信区间是否覆盖了真实均值。

df2*n/(df2*n-2) #True mean

再次,我应该强调,只有在比率的期望及其方差存在的情况下,bootstrap 才会起作用,而这对于比率来说是不确定的。在这种情况下,您的比率的 se也不存在,问题也无法解决。avg

为什么泰勒展开式看起来不正确?

如果您想要一个对称统计,您可以尝试查看差异而不是,很容易计算出与任何的分布(不仅仅是正态分布),前提是存在方差(均匀??)。这种差异应该在 0 左右对称。您可以使用 t-test 进行测试。x¯y¯x¯y¯X,Y

回到比率,如果你真的想坚持比率,你可以使用置换检验来计算区间估计。在 R 中,它看起来像:

N=10
x=runif(N,1,3)  # your data x
y=runif(N,10,30)   # your data y
ratio=mean(x)/mean(y)
NP=100
stat=rep(NA,NP)
for(i in 1:NP){
  id<-sample.int(2*N,size=N,replace=F)
  stat[i]=mean(c(x,y)[id])/mean(c(x,y)[-id])
}
CI=quantile(stat,c(0.025,0.975))
print(CI);print(ratio)
(ratio<CI[2])&(ratio>CI[1])

鉴于您的数据点太少,使用所有这些统计假设几乎没有意义。为什么不只报告标准统计数据:平均 x_i/y_i、中位数 x_i/y_i、百分位数等。