Python 计算线性百分比差

Python 计算线性百分比差,python,numpy,statistics,Python,Numpy,Statistics,我有两个相关的数据集,其中一个可以略低于0 我试图计算两者之间的“线性”百分比差异 我已经编写了一些示例代码: perc[1]是合适的百分比法,但是在最后两个示例中,百分比差异对于双方来说都不是“线性的”(即-87与700相比)-我需要它们相等或在计算中具有某种线性,而我猜最后三种方法是线性的。我喜欢perc[3],因为它只是绝对的差异和放大,但有点无单位。也许[4]或[5]对于这个用例来说是最准确的,使用两者的平均值作为分母 1, 8: [12.5, -87.5, 700.0, -700, -

我有两个相关的数据集,其中一个可以略低于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)
参照此,相对百分比通常为

|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。这在数学中称为。中显示了许多示例。我建议使用(| x |+| y |)/2,但试一下其他方法,看看有什么更有意义

perc6=abs(x-y)/((abs(x)+abs(y))/2)*100
若要通过绘图进行测试,请尝试固定y的值,例如10,然后对x进行散点绘图,与perc_calc(x,10)[6]