我有两个相关的数据集,其中一个可以略低于0
我试图计算两者之间的“线性”百分比差异
我已经编写了一些示例代码: perc[1]是合适的百分比法,但是在最后两个示例中,百分比差异对于双方来说都不是“线性的”(即-87与700相比)-我需要它们相等或在计算中具有某种线性,而我猜最后三种方法是线性的。我喜欢perc[3],因为它只是绝对的差异和放大,但有点无单位。也许[4]或[5]对于这个用例来说是最准确的,使用两者的平均值作为分母
1, 8: [12.5, -87.5, 700.0, -700, -155.55555555555557, 155.55555555555557]
8, 1: [800.0, 700.0, -87.5, 700, 155.55555555555557, -155.55555555555557]
统计不是我的强项。有人能给出我应该使用[4]或[5]的合理理由吗。我知道0、1、2和3在这里可能不是正确的选择
import numpy as np
import matplotlib.pyplot as plt
def perc_calc(x,y):
perc0=(x/y)*100 #Original one i used but is non-linear
perc1=((x-y)/(y))*100 #Proper % method but still nonlinear
perc2=((y-x)/x)*100 #Depends if use x or y
perc3=(x-y)*100 #Just amplifying the real difference
perc4=(x-y)/((x+y)/2)*100 #Difference by the mean
perc5=(y-x)/((x+y)/2)*100 #Opposite difference by the mean
return [perc0,perc1,perc2,perc3,perc4,perc5]
x=np.random.uniform(-0.005, 1, size=600)
y=np.random.uniform(0.005,1,size=600)
plt.plot(perc_calc(x,y)[3])
plt.show()
plt.plot(perc_calc(x,y)[4])
plt.show()
def example(x,y):
print(str(x)+', '+str(y)+': '+str(perc_calc(x,y)))
#Example Cases:
example(5,10)
example(-1,10)
example(1,8)
example(8,1)
参照此Wikipedia article,相对百分比通常为以下形式
|x-y |/| f(x,y)|
如果您有一个参考点,则可以删除| x-y |中的绝对值,以获得负百分比。如果这对你来说没有意义,你应该保留它
函数| f(x,y)|通常被称为比例因子。您可以在这里的许多选项中进行选择,这取决于应用程序
你可以只取f(x,y)=y,就像你在(1)中做的那样。这通常是在比较实验值和理论值时进行的,例如,在一些实验中测量之后;或者当测量与过去状态相关的变化时。但请注意,它需要一个参考点(理论值,或更改前的值),并且它不会具有您正在寻找的“线性”特性,因为在交换x和y时,缩放因子会发生变化(如果使用1和2,则为1/2 vs 1)。这是因为,对于值2,突然变为10意味着增加400%,而10变为2则意味着减少80%
所以你需要一些在交换参数时不会改变的函数f。这在数学中称为asymmetric function。许多例子显示在the article referenced before中。我建议使用(| x |+| y |)/2,但试一下其他方法,看看有什么更有意义
要通过绘图进行测试,请尝试固定y的值,比如10,然后做x对
perc_calc(x, 10)[6]
的散点图相关问题 更多 >
编程相关推荐